80 lines
3.5 KiB
Diff
80 lines
3.5 KiB
Diff
From ba3e15745ed9c595c8b787eff25b4092ab524e97 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Wed, 4 May 2016 22:31:18 -0400
|
|
Subject: [PATCH] Process NMS Data Conversion post ItemMeta on Copy
|
|
|
|
ItemMeta apply is a destructive process that expects to be the authority on
|
|
what the items NBT data is.
|
|
|
|
When CraftItemStack.asNMSCopy was called, the conversion ran, potentially setting
|
|
the converted data into the ItemStacks tag.
|
|
|
|
Then if that item had ItemMeta, it would completely undo that conversion by
|
|
erasing the NBT Tag.
|
|
|
|
On copy, run conversion post ItemMeta apply.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/DataInspectorBlockEntity.java b/src/main/java/net/minecraft/server/DataInspectorBlockEntity.java
|
|
index 4a8820e68..27fb802bf 100644
|
|
--- a/src/main/java/net/minecraft/server/DataInspectorBlockEntity.java
|
|
+++ b/src/main/java/net/minecraft/server/DataInspectorBlockEntity.java
|
|
@@ -32,7 +32,7 @@ public class DataInspectorBlockEntity implements DataInspector {
|
|
boolean flag;
|
|
|
|
if (s1 == null) {
|
|
- DataInspectorBlockEntity.a.warn("Unable to resolve BlockEntity for ItemInstance: {}", new Object[] { s});
|
|
+ //DataInspectorBlockEntity.a.warn("Unable to resolve BlockEntity for ItemInstance: {}", new Object[] { s}); // Paper - no need to nag about an ok condition
|
|
flag = false;
|
|
} else {
|
|
flag = !nbttagcompound2.hasKey("id");
|
|
diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java
|
|
index 66973051a..1218c005e 100644
|
|
--- a/src/main/java/net/minecraft/server/ItemStack.java
|
|
+++ b/src/main/java/net/minecraft/server/ItemStack.java
|
|
@@ -55,13 +55,24 @@ public final class ItemStack {
|
|
this(item, i, 0);
|
|
}
|
|
|
|
+ // Paper start
|
|
public ItemStack(Item item, int i, int j) {
|
|
+ this(item, i, j, true);
|
|
+ }
|
|
+ public ItemStack(Item item, int i, int j, boolean convert) {
|
|
+ // Paper end
|
|
this.item = item;
|
|
this.damage = j;
|
|
this.count = i;
|
|
// CraftBukkit start - Pass to setData to do filtering
|
|
+ // Paper start
|
|
+ if (convert) convertData(j);
|
|
+ }
|
|
+
|
|
+ public final void convertData(int data) {
|
|
+ // Paper end
|
|
if (MinecraftServer.getServer() != null) {
|
|
- this.setData(j);
|
|
+ this.setData(data);
|
|
NBTTagCompound savedStack = new NBTTagCompound();
|
|
this.save(savedStack);
|
|
MinecraftServer.getServer().getDataConverterManager().a(DataConverterTypes.ITEM_INSTANCE, savedStack); // PAIL: convert
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
|
|
index 4afd3a99a..a862e946c 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());
|
|
}
|
|
+ stack.convertData(original.getDurability()); // Paper
|
|
return stack;
|
|
}
|
|
|
|
--
|
|
2.11.0
|
|
|