From 07dd3c7a70b65dd568d81fd73b1204819143033a Mon Sep 17 00:00:00 2001 From: Phoenix616 Date: Tue, 18 Jun 2024 22:49:51 +0100 Subject: [PATCH] Update durability usage to modern API (Fixes #597) --- .../Acrobot/Breeze/Utils/MaterialUtil.java | 20 +++++++++++++------ .../ChestShop/Events/MaterialParseEvent.java | 4 +++- .../ChestShop/Metadata/ItemDatabase.java | 10 +++++++++- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/Acrobot/Breeze/Utils/MaterialUtil.java b/src/main/java/com/Acrobot/Breeze/Utils/MaterialUtil.java index 274d254..20cbf4c 100644 --- a/src/main/java/com/Acrobot/Breeze/Utils/MaterialUtil.java +++ b/src/main/java/com/Acrobot/Breeze/Utils/MaterialUtil.java @@ -259,8 +259,12 @@ public class MaterialUtil { String itemName = itemStack.getType().toString(); String durability = ""; - if (itemStack.getDurability() != 0) { - durability = ":" + itemStack.getDurability(); + ItemMeta meta = itemStack.getItemMeta(); + if (meta instanceof Damageable) { + Damageable damageable = (Damageable) meta; + if (damageable.hasDamage()) { + durability = ":" + damageable.getDamage(); + } } String metaData = ""; @@ -386,8 +390,8 @@ public class MaterialUtil { split[i] = split[i].trim(); } - short durability = getDurability(itemName); - MaterialParseEvent parseEvent = new MaterialParseEvent(split[0], durability); + int durability = getDurability(itemName); + MaterialParseEvent parseEvent = new MaterialParseEvent(split[0], (short) durability); Bukkit.getPluginManager().callEvent(parseEvent); Material material = parseEvent.getMaterial(); if (material == null) { @@ -414,7 +418,7 @@ public class MaterialUtil { * @param itemName Item name * @return Durability found */ - public static short getDurability(String itemName) { + public static int getDurability(String itemName) { Matcher m = DURABILITY.matcher(itemName); if (!m.find()) { @@ -429,7 +433,11 @@ public class MaterialUtil { data = data.substring(1); - return NumberUtil.isShort(data) ? Short.valueOf(data) : 0; + try { + return Integer.parseInt(data); + } catch (NumberFormatException e) { + return 0; + } } /** diff --git a/src/main/java/com/Acrobot/ChestShop/Events/MaterialParseEvent.java b/src/main/java/com/Acrobot/ChestShop/Events/MaterialParseEvent.java index f80d80a..fcafaf9 100644 --- a/src/main/java/com/Acrobot/ChestShop/Events/MaterialParseEvent.java +++ b/src/main/java/com/Acrobot/ChestShop/Events/MaterialParseEvent.java @@ -11,7 +11,7 @@ public class MaterialParseEvent extends Event { private final short data; private Material material = null; - public MaterialParseEvent(String materialString, short data) { + public MaterialParseEvent(String materialString, @Deprecated short data) { this.materialString = materialString; this.data = data; } @@ -35,7 +35,9 @@ public class MaterialParseEvent extends Event { /** * Get the data of legacy materials that might result in different flattening materials * @return The data + * @deprecated Modern materials don't use data values anymore */ + @Deprecated public short getData() { return data; } diff --git a/src/main/java/com/Acrobot/ChestShop/Metadata/ItemDatabase.java b/src/main/java/com/Acrobot/ChestShop/Metadata/ItemDatabase.java index 8900e1f..9660ebb 100644 --- a/src/main/java/com/Acrobot/ChestShop/Metadata/ItemDatabase.java +++ b/src/main/java/com/Acrobot/ChestShop/Metadata/ItemDatabase.java @@ -13,6 +13,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConstructor; import org.bukkit.configuration.file.YamlRepresenter; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.Yaml; @@ -140,7 +141,14 @@ public class ItemDatabase { try { ItemStack clone = new ItemStack(item); clone.setAmount(1); - clone.setDurability((short) 0); + + ItemMeta meta = clone.getItemMeta(); + if (meta instanceof Damageable) { + Damageable damageable = (Damageable) clone.getItemMeta(); + if (damageable.hasDamage()) { + damageable.setDamage(0); + } + } String dumped = yaml.dump(clone); ItemStack loadedItem = yaml.loadAs(dumped, ItemStack.class);