mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-29 20:37:38 +01:00
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.
This commit is contained in:
parent
cd8f388582
commit
ef781648ef
@ -0,0 +1,71 @@
|
||||
From 976cceb1eaba63b9e7bcf5726db579aaf9bc2069 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user