From 2b913fd4acb632ddb9c10f96efc4ae48f67fdc85 Mon Sep 17 00:00:00 2001 From: Jikoo Date: Sat, 7 Aug 2021 06:37:10 -0400 Subject: [PATCH] Update reflection for 1.17 Closes #38 --- .../util/enchant/EnchantingTableUtil.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/github/jikoo/enchantableblocks/util/enchant/EnchantingTableUtil.java b/src/main/java/com/github/jikoo/enchantableblocks/util/enchant/EnchantingTableUtil.java index e8e1a00..7ea56d6 100644 --- a/src/main/java/com/github/jikoo/enchantableblocks/util/enchant/EnchantingTableUtil.java +++ b/src/main/java/com/github/jikoo/enchantableblocks/util/enchant/EnchantingTableUtil.java @@ -98,14 +98,24 @@ private static int getEnchantmentId(Enchantment enchantment) { String nmsVersion = split[split.length - 1]; try { - Class clazzIRegistry = Class.forName("net.minecraft.server." + nmsVersion + ".IRegistry"); - Object enchantmentRegistry = clazzIRegistry.getDeclaredField("ENCHANTMENT").get(null); - Method methodIRegistryA = clazzIRegistry.getDeclaredMethod("a", Object.class); + Object enchantmentRegistry; + Method methodIRegistryGetId; + try { + // 1.17+ + Class clazzIRegistry = Class.forName("net.minecraft.core.IRegistry"); + enchantmentRegistry = clazzIRegistry.getDeclaredField("X").get(null); + methodIRegistryGetId = clazzIRegistry.getDeclaredMethod("getId", Object.class); + } catch (ClassNotFoundException e) { + // 1.16- + Class clazzIRegistry = Class.forName("net.minecraft.server." + nmsVersion + ".IRegistry"); + enchantmentRegistry = clazzIRegistry.getDeclaredField("ENCHANTMENT").get(null); + methodIRegistryGetId = clazzIRegistry.getDeclaredMethod("a", Object.class); + } Class clazzCraftEnchant = Class.forName("org.bukkit.craftbukkit." + nmsVersion + ".enchantments.CraftEnchantment"); Method methodCraftEnchantGetRaw = clazzCraftEnchant.getDeclaredMethod("getRaw", Enchantment.class); - return (int) methodIRegistryA.invoke(enchantmentRegistry, methodCraftEnchantGetRaw.invoke(null, enchantment)); + return (int) methodIRegistryGetId.invoke(enchantmentRegistry, methodCraftEnchantGetRaw.invoke(null, enchantment)); } catch (ReflectiveOperationException | ClassCastException e) { return 0; }