--- a/net/minecraft/server/PacketDataSerializer.java +++ b/net/minecraft/server/PacketDataSerializer.java @@ -26,6 +26,8 @@ import java.util.UUID; import javax.annotation.Nullable; +import org.bukkit.craftbukkit.inventory.CraftItemStack; // CraftBukkit + public class PacketDataSerializer extends ByteBuf { private final ByteBuf a; @@ -154,7 +156,7 @@ } public > T a(Class oclass) { - return ((Enum[]) oclass.getEnumConstants())[this.i()]; + return ((T[]) oclass.getEnumConstants())[this.i()]; // CraftBukkit - fix decompile error } public PacketDataSerializer a(Enum oenum) { @@ -231,7 +233,7 @@ } else { try { NBTCompressedStreamTools.a(nbttagcompound, (DataOutput) (new ByteBufOutputStream(this))); - } catch (IOException ioexception) { + } catch (Exception ioexception) { // CraftBukkit - IOException -> Exception throw new EncoderException(ioexception); } } @@ -258,7 +260,7 @@ } public PacketDataSerializer a(ItemStack itemstack) { - if (itemstack.isEmpty()) { + if (itemstack.isEmpty() || itemstack.getItem() == null) { // CraftBukkit - NPE fix itemstack.getItem() this.writeBoolean(false); } else { this.writeBoolean(true); @@ -287,6 +289,11 @@ ItemStack itemstack = new ItemStack(Item.getById(i), b0); itemstack.setTag(this.l()); + // CraftBukkit start + if (itemstack.getTag() != null) { + CraftItemStack.setItemMeta(itemstack, CraftItemStack.getItemMeta(itemstack)); + } + // CraftBukkit end return itemstack; } }