Fix ItemStack.removeEnchantment returning wrong value

This commit is contained in:
Aikar
2018-08-04 01:13:10 -04:00
parent 7fe1caf23d
commit 154a6bba21
2 changed files with 19 additions and 22 deletions

View File

@@ -18,7 +18,7 @@ For consistency, the old API methods now forward to use the
ItemMeta API equivalents, and should deprecate the old API's.
diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java
index 82d72ea15..5047a57e9 100644
index 82d72ea158..5047a57e9b 100644
--- a/src/main/java/net/minecraft/server/ItemStack.java
+++ b/src/main/java/net/minecraft/server/ItemStack.java
@@ -0,0 +0,0 @@ public final class ItemStack {
@@ -69,7 +69,7 @@ index 82d72ea15..5047a57e9 100644
public boolean hasEnchantments() {
diff --git a/src/main/java/net/minecraft/server/NBTTagList.java b/src/main/java/net/minecraft/server/NBTTagList.java
index ca9eb2f3b..576c3b714 100644
index ca9eb2f3b2..576c3b7141 100644
--- a/src/main/java/net/minecraft/server/NBTTagList.java
+++ b/src/main/java/net/minecraft/server/NBTTagList.java
@@ -0,0 +0,0 @@ public class NBTTagList extends NBTBase {
@@ -86,7 +86,7 @@ index ca9eb2f3b..576c3b714 100644
public NBTTagList() {}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
index fb1dc542d..cdf16e15a 100644
index fb1dc542dd..8ffe18b092 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
@@ -0,0 +0,0 @@ import static org.bukkit.craftbukkit.inventory.CraftMetaItem.ENCHANTMENTS;
@@ -156,7 +156,13 @@ index fb1dc542d..cdf16e15a 100644
- NBTTagList list = getEnchantmentList(handle), listCopy;
- if (list == null) {
- return 0;
- }
+ // Paper start - replace entire method
+ final ItemMeta itemMeta = getItemMeta();
+ int level = itemMeta.getEnchantLevel(ench);
+ if (level > 0) {
+ itemMeta.removeEnchant(ench);
+ setItemMeta(itemMeta);
}
- int index = Integer.MIN_VALUE;
- int level = Integer.MIN_VALUE;
- int size = list.size();
@@ -178,17 +184,9 @@ index fb1dc542d..cdf16e15a 100644
- handle.getTag().remove(ENCHANTMENTS.NBT);
- if (handle.getTag().isEmpty()) {
- handle.setTag(null);
+ // Paper start - replace entire method, maintain backwards compat of returning previous level.
+ final ItemMeta itemMeta = getItemMeta();
+ final Iterator<Enchantment> iterator = itemMeta.getEnchants().keySet().iterator();
+ for (int i = 0; iterator.hasNext(); i++) {
+ if (iterator.next().equals(ench)) {
+ itemMeta.removeEnchant(ench);
+ setItemMeta(itemMeta);
+ return i;
}
- }
- return level;
}
- }
-
- // This is workaround for not having an index removal
- listCopy = new NBTTagList();
@@ -199,9 +197,8 @@ index fb1dc542d..cdf16e15a 100644
- }
- handle.getTag().set(ENCHANTMENTS.NBT, listCopy);
-
- return level;
return level;
+ // Paper end
+ return 0;
}
@Override
@@ -212,7 +209,7 @@ index fb1dc542d..cdf16e15a 100644
static Map<Enchantment, Integer> getEnchantments(net.minecraft.server.ItemStack item) {
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
index c743ae066..0cdc8007a 100644
index c743ae066e..0cdc8007a4 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
@@ -0,0 +0,0 @@ import java.lang.annotation.RetentionPolicy;