AuraDevelopmentTeam / InvSync

This plugin synchronizes the player inventory with a database
GNU General Public License v3.0
12 stars 10 forks source link

Database is insert NBT tag on items that have no NBT tags #39

Open phillipinman opened 5 years ago

phillipinman commented 5 years ago

Issue Description:

InvSync is inserting a 0 NBt tag causing items to be considered separate. For example, minecraft:goldingot is becoming minecraft:goldingot with NBT tags 0 on logout. This results in two items essentially.

Screenshot: image image

What happens:

Results in two items, one with no NBT data and one with 0 NBT tags

What you expected to happen:

Both items to have null NBT data and combine into stacks

Steps to reproduce:

  1. Setup DB sync
  2. get a gold ingot and throw it on the ground, meanwhile put another one in your inventory and log out then back in
  3. pickup and compare the ingots, one will have nul NBT data and the other 0 NBT tags ...

Affected Versions (Do not use "latest"):

Your most recent log or stack trace file where the issue was present:

Most relevent log:

[21:03:39] [Server thread/DEBUG] [invsync]: Preparing statement: REPLACE INTO invsync_inventories (UUID, Active, Data) VALUES (?, FALSE, ?) [21:03:39] [Server thread/DEBUG] [invsync]: Saving inventory for player Iron_Phildo69 (64f2ebea-4b08-4cbb-b288-7a772381ed27) [21:03:39] [Server thread/INFO] [net.minecraft.server.dedicated.DedicatedServer]: Iron_Phildo69 left the game

phillipinman commented 5 years ago

Relevant information i suspect:

Oracle Mode MariaDB starting with 10.3 In Oracle mode from MariaDB 10.3, PREPARE stmt FROM 'SELECT :1, :2' is used, instead of ?.

https://mariadb.com/kb/en/library/prepare-statement/

just some brain storming from someone that is not smart in SQL :P

I'm wondering if using MariaDB instead of MySQL could be the source of the issue?

BrainStone commented 5 years ago

That looks like an issue with Sponge to me. The empty tags are in the debug data, which means either Sponge is serializing (my personal bet would be that) or deserializing it incorrectly.

I’m especially thinking that’s the case because the server version is 1.11.2. And there certainly are some serialization issues in that version.

phillipinman commented 5 years ago

Ohh crap sorry, version is 1.12.2, i forgot to change the version sorry. Updated it

BrainStone commented 5 years ago

Hm ok. Though it still looks like the serialization is messing up. (Or the deserialization)
There was another issue that was struggling with serialization too (#37) so I'll be reaching out to the Sponge team.

phillipinman commented 5 years ago

Thank you :) I'll be eagerly awaiting an update

BrainStone commented 5 years ago

Hi there. Is this still an issue?

phillipinman commented 5 years ago

I have not tested as of late but can get back to you :)

LivierG8 commented 4 years ago

Hi, I have the same issue on my server, with latest version released.

Here are the specs of my server :

If needed, I can turn on debug mode to see exactly what is registered in database, but as I encounter the same issue, I think it's the same dataset type which is sent to database.

I hope I can help you fix this issue because we have an issue with inventories that we were able to fix only with your plugin as no other one offers sync over mysql (the other one known on Sponge Ore repository is MS DataSync which only saves ivnentory to MongoDB, but as we don't have a VPS, we only have access to one MySQL database (yes, only one, gladly each plugin using it has its own table prefix...)

BrainStone commented 4 years ago

This is still an issue caused by forge.