Fix serializing unhandled NBT + add unit test with unhandled NBT

By: md_5 <git@md-5.net>
This commit is contained in:
CraftBukkit/Spigot 2021-11-23 12:35:42 +11:00
parent 683f54a1e7
commit 6992843028
2 changed files with 4 additions and 2 deletions

View file

@ -280,7 +280,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
private static final CraftPersistentDataTypeRegistry DATA_TYPE_REGISTRY = new CraftPersistentDataTypeRegistry();
private NBTTagCompound internalTag;
private final Map<String, NBTBase> unhandledTags = new HashMap<String, NBTBase>();
final Map<String, NBTBase> unhandledTags = new HashMap<String, NBTBase>(); // Visible for testing only
private CraftPersistentDataContainer persistentDataContainer = new CraftPersistentDataContainer(DATA_TYPE_REGISTRY);
private int version = CraftMagicNumbers.INSTANCE.getDataVersion(); // Internal use only
@ -1259,7 +1259,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
try {
ByteArrayOutputStream buf = new ByteArrayOutputStream();
NBTCompressedStreamTools.writeCompressed(internal, buf);
builder.put("internal", Base64.getEncoder().encode(buf.toByteArray()));
builder.put("internal", Base64.getEncoder().encodeToString(buf.toByteArray()));
} catch (IOException ex) {
Logger.getLogger(CraftMetaItem.class.getName()).log(Level.SEVERE, null, ex);
}

View file

@ -7,6 +7,7 @@ import java.nio.ByteBuffer;
import java.util.Map;
import java.util.UUID;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagString;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
@ -148,6 +149,7 @@ public class DeprecatedItemMetaCustomValueTest extends AbstractTestingBase {
private CraftMetaItem createComplexItemMeta() {
CraftMetaItem itemMeta = (CraftMetaItem) createNewItemMeta();
itemMeta.unhandledTags.put("unhandled-test", NBTTagString.valueOf("test"));
itemMeta.setDisplayName("Item Display Name");
itemMeta.getCustomTagContainer().setCustomTag(requestKey("custom-long"), ItemTagType.LONG, 4L); //Add random primitive values