From 16794d9398de66a7625d5bb52b85b04271237abe Mon Sep 17 00:00:00 2001 From: Krakenied Date: Tue, 20 Feb 2024 12:19:05 +0100 Subject: Fix ItemGetter on CraftBukkit 1.8 Improve setting item unbreakability --- .../bukkit/hook/itemgetter/ItemGetter13.java | 8 ++++---- .../bukkit/hook/itemgetter/ItemGetter14.java | 8 ++++---- .../quests/bukkit/hook/itemgetter/ItemGetter8.java | 24 ++++++++++++---------- 3 files changed, 21 insertions(+), 19 deletions(-) (limited to 'bukkit/src') diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter13.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter13.java index 57e980ca..8b89bdfe 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter13.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter13.java @@ -26,7 +26,7 @@ import java.util.UUID; *
  • lore
  • *
  • enchantments (without namespace support)
  • *
  • item flags
  • - *
  • unbreakability
  • + *
  • unbreakability (with CraftBukkit support)
  • *
  • attribute modifiers
  • * * Requires at least API version 1.13. @@ -124,9 +124,9 @@ public class ItemGetter13 extends ItemGetter { } // unbreakability - boolean unbreakable = config.getBoolean("unbreakable", false); - if (unbreakable && !filters.contains(Filter.UNBREAKABLE)) { - meta.setUnbreakable(true); + Boolean unbreakable = (Boolean) config.get("unbreakable"); + if (unbreakable != null && !filters.contains(Filter.UNBREAKABLE)) { + meta.setUnbreakable(unbreakable); } // attribute modifiers diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter14.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter14.java index 630b0fbd..351a7dd4 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter14.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter14.java @@ -29,7 +29,7 @@ import java.util.UUID; *
  • lore
  • *
  • enchantments (without namespace support)
  • *
  • item flags
  • - *
  • unbreakability
  • + *
  • unbreakability (with CraftBukkit support)
  • *
  • attribute modifiers
  • *
  • custom model data
  • * @@ -128,9 +128,9 @@ public class ItemGetter14 extends ItemGetter { } // unbreakability - boolean unbreakable = config.getBoolean("unbreakable", false); - if (unbreakable && !filters.contains(Filter.UNBREAKABLE)) { - meta.setUnbreakable(true); + Boolean unbreakable = (Boolean) config.get("unbreakable"); + if (unbreakable != null && !filters.contains(Filter.UNBREAKABLE)) { + meta.setUnbreakable(unbreakable); } // attribute modifiers diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter8.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter8.java index 5f3746f4..d3405a5e 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter8.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter8.java @@ -23,15 +23,15 @@ import java.util.List; *
  • lore
  • *
  • enchantments (without namespace support)
  • *
  • item flags
  • - *
  • unbreakability
  • + *
  • unbreakability (without CraftBukkit support)
  • * * Requires at least API version 1.8. */ @SuppressWarnings({"deprecation", "DuplicatedCode", "JavaReflectionMemberAccess"}) public class ItemGetter8 extends ItemGetter { - private static final Method spigotMethod; - private static final Method setUnbreakableMethod; + private static Method spigotMethod; + private static Method setUnbreakableMethod; static { try { @@ -39,8 +39,8 @@ public class ItemGetter8 extends ItemGetter { Class spigotClass = Class.forName("org.bukkit.inventory.meta.ItemMeta.Spigot"); setUnbreakableMethod = spigotClass.getMethod("setUnbreakable", boolean.class); - } catch (ClassNotFoundException | NoSuchMethodException e) { - throw new RuntimeException(e); + } catch (ClassNotFoundException | NoSuchMethodException ignored) { + // server version cannot support the method (doesn't work on CraftBukkit) } } @@ -133,12 +133,14 @@ public class ItemGetter8 extends ItemGetter { } } - // unbreakability - boolean unbreakable = config.getBoolean("unbreakable", false); - if (unbreakable && !filters.contains(Filter.UNBREAKABLE)) { - try { - setUnbreakableMethod.invoke(spigotMethod.invoke(meta), true); - } catch (IllegalAccessException | InvocationTargetException ignored) { + if (spigotMethod != null && setUnbreakableMethod != null) { + // unbreakability + Boolean unbreakable = (Boolean) config.get("unbreakable"); + if (unbreakable != null && !filters.contains(Filter.UNBREAKABLE)) { + try { + setUnbreakableMethod.invoke(spigotMethod.invoke(meta), unbreakable); + } catch (IllegalAccessException | InvocationTargetException ignored) { + } } } -- cgit v1.2.3-70-g09d2