From 0cb7e26846080d82de6e2d09083f8ae54b401c70 Mon Sep 17 00:00:00 2001 From: md_5 Date: Wed, 18 Jul 2018 14:00:44 +1000 Subject: SPIGOT-4028: Improve legacy ItemStack conversion --- src/main/java/org/bukkit/inventory/ItemStack.java | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'src/main/java/org') diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java index 6324044d..73f79b22 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java @@ -438,8 +438,6 @@ public class ItemStack implements Cloneable, ConfigurationSerializable { */ public static ItemStack deserialize(Map args) { int version = (args.containsKey("v")) ? ((Number) args.get("v")).intValue() : -1; - Material type = Material.getMaterial((String) args.get("type"), version < 0); - short damage = 0; int amount = 1; @@ -447,6 +445,21 @@ public class ItemStack implements Cloneable, ConfigurationSerializable { damage = ((Number) args.get("damage")).shortValue(); } + Material type; + if (version < 0) { + type = Material.getMaterial(Material.LEGACY_PREFIX + (String) args.get("type")); + + byte dataVal = (type.getMaxDurability() == 0) ? (byte) damage : 0; // Actually durable items get a 0 passed into conversion + type = Bukkit.getUnsafe().fromLegacy(new MaterialData(type, dataVal)); + + // We've converted now so the data val isn't a thing and can be reset + if (dataVal != 0) { + damage = 0; + } + } else { + type = Material.getMaterial((String) args.get("type")); + } + if (args.containsKey("amount")) { amount = ((Number) args.get("amount")).intValue(); } @@ -474,11 +487,6 @@ public class ItemStack implements Cloneable, ConfigurationSerializable { } } - // Set damage again incase meta overwrote it - if (args.containsKey("damage")) { - result.setDurability(damage); - } - return result; } -- cgit v1.2.3