From 976cceb1eaba63b9e7bcf5726db579aaf9bc2069 Mon Sep 17 00:00:00 2001 From: Aikar Date: Thu, 29 Dec 2016 07:54:48 -0500 Subject: [PATCH] Fix ItemStack Data Conversion Spigot did not copy our version, and their version is not 100% correct. The current state results in item meta and damage data value conversions clashing for control For example on a horse egg, on itemstack creation, the 100 Damage is converted to 0 and sets EntityTag SetItemMeta then drops the previous NBTTagCompound and makes a new one, which has no EntityType associated to it as the previous stack had no metadata. This change makes it so that itemstack conversion is delayed until after meta applies Pretty much restores our previous implementation before Spigot tried to resolve it. diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java index 6db93b953..2d7cac940 100644 --- a/src/main/java/net/minecraft/server/ItemStack.java +++ b/src/main/java/net/minecraft/server/ItemStack.java @@ -56,6 +56,9 @@ public final class ItemStack { } public ItemStack(Item item, int i, int j) { + this(item, i, j, true); // Paper + } + public ItemStack(Item item, int i, int j, boolean convert) { // Paper this.item = item; this.damage = j; this.count = i; @@ -63,7 +66,7 @@ public final class ItemStack { if (MinecraftServer.getServer() != null) { this.setData(j); } - this.convertStack(); + if (convert) this.convertStack(); // Paper // CraftBukkit end if (this.damage < 0) { // this.damage = 0; // CraftBukkit - remove this. @@ -454,7 +457,7 @@ public final class ItemStack { } public ItemStack cloneItemStack() { - ItemStack itemstack = new ItemStack(this.item, this.count, this.damage); + ItemStack itemstack = new ItemStack(this.item, this.count, this.damage, false); // Paper - no need to convert a clone if (this.tag != null) { itemstack.tag = this.tag.g(); diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java index fafc6b68d..dc1c416c7 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java @@ -41,10 +41,11 @@ public final class CraftItemStack extends ItemStack { return net.minecraft.server.ItemStack.a; } - net.minecraft.server.ItemStack stack = new net.minecraft.server.ItemStack(item, original.getAmount(), original.getDurability()); + net.minecraft.server.ItemStack stack = new net.minecraft.server.ItemStack(item, original.getAmount(), original.getDurability(), false); // Paper if (original.hasItemMeta()) { setItemMeta(stack, original.getItemMeta()); - } + } else { stack.convertStack(); } // Paper - setItemMeta will convert also + return stack; } -- 2.11.0