From 93aa63ad518f35af67d825ff5bbfadbb5b076fbd Mon Sep 17 00:00:00 2001 From: TylerS1066 Date: Sat, 13 Jun 2026 16:38:37 -0500 Subject: [PATCH 1/2] Clean up and fix version logic --- .../features/BlockBehaviorOverride.java | 64 +++++++++---------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/src/main/java/net/countercraft/movecraft/combat/features/BlockBehaviorOverride.java b/src/main/java/net/countercraft/movecraft/combat/features/BlockBehaviorOverride.java index a94afd17..2b277e5e 100644 --- a/src/main/java/net/countercraft/movecraft/combat/features/BlockBehaviorOverride.java +++ b/src/main/java/net/countercraft/movecraft/combat/features/BlockBehaviorOverride.java @@ -72,7 +72,7 @@ public static void load(@NotNull FileConfiguration config) { } } - protected static void loadFlammabilityValues(FileConfiguration config, Function addToSet, BiConsumer>> putBurnOddsFunction, BiConsumer>> putIgniteOddsFunction) { + protected static void loadFlammabilityValues(@NotNull FileConfiguration config, Function addToSet, BiConsumer>> putBurnOddsFunction, BiConsumer>> putIgniteOddsFunction) { if (!config.contains("FlammabilityOverride")) return; var section = config.getConfigurationSection("FlammabilityOverride"); @@ -111,7 +111,7 @@ protected static void loadFlammabilityValues(FileConfiguration config, Function< } } - protected static void loadBlastResistanceValues(FileConfiguration config, Function addToSet, BiConsumer putFunction) { + protected static void loadBlastResistanceValues(@NotNull FileConfiguration config, Function addToSet, BiConsumer putFunction) { if (!config.contains("BlastResistanceOverride")) return; var section = config.getConfigurationSection("BlastResistanceOverride"); @@ -156,26 +156,26 @@ protected static void processOverriddenEntry(final BiFunction magicNumbers; - protected NMSHelper(String blastResField, String burnOddsField, String igniteOddsField) { - this.fieldNameBlastResistance = blastResField; - this.fieldNameBurnOdds = burnOddsField; - this.fieldNameIgniteOdds = igniteOddsField; + protected NMSHelper(@Nullable String blastResField, @Nullable String burnOddsField, @Nullable String igniteOddsField) { + fieldNameBlastResistance = blastResField; + fieldNameBurnOdds = burnOddsField; + fieldNameIgniteOdds = igniteOddsField; } public boolean setBlastResistance(Material m, float value) { try { - Object block = this.getBlockClass(m); - writeField(block, value, this.fieldNameBlastResistance); + Object block = getBlockClass(m); + writeField(block, value, fieldNameBlastResistance); return true; } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException | NoSuchFieldException | ClassNotFoundException e) { @@ -239,8 +240,8 @@ public boolean setBlastResistance(Material m, float value) { public Optional getBlastResistance(Material m) { try { - Object block = this.getBlockClass(m); - return getFieldValueSafe(block, this.fieldNameBlastResistance); + Object block = getBlockClass(m); + return getFieldValueSafe(block, fieldNameBlastResistance); } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException | ClassNotFoundException e) { e.printStackTrace(); @@ -250,7 +251,7 @@ public Optional getBlastResistance(Material m) { public boolean setBurnOdds(Material m, int value) { try { - Object fireBlock = this.getBlockClass(Material.FIRE); + Object fireBlock = getBlockClass(Material.FIRE); return setBurnOdds(m, value, fireBlock); } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException | ClassNotFoundException e) { @@ -261,9 +262,9 @@ public boolean setBurnOdds(Material m, int value) { public Optional getBurnOdds(Material m) { try { - Object fireBlock = this.getBlockClass(Material.FIRE); - Object block = this.getBlockClass(m); - Optional optMap = getFieldValueSafe(fireBlock, this.fieldNameBurnOdds); + Object fireBlock = getBlockClass(Material.FIRE); + Object block = getBlockClass(m); + Optional optMap = getFieldValueSafe(fireBlock, fieldNameBurnOdds); if (optMap.isPresent()) { if (optMap.get().containsKey(block)) { return Optional.of(optMap.get().getInt(block)); @@ -279,7 +280,7 @@ public Optional getBurnOdds(Material m) { public boolean setIgniteOdds(Material m, int value) { try { - Object fireBlock = this.getBlockClass(Material.FIRE); + Object fireBlock = getBlockClass(Material.FIRE); return setIgniteOdds(m, value, fireBlock); } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException | ClassNotFoundException e) { @@ -290,9 +291,9 @@ public boolean setIgniteOdds(Material m, int value) { public Optional getIgniteOdds(Material m) { try { - Object fireBlock = this.getBlockClass(Material.FIRE); - Object block = this.getBlockClass(m); - Optional> optMap = getFieldValueSafe(fireBlock, this.fieldNameIgniteOdds); + Object fireBlock = getBlockClass(Material.FIRE); + Object block = getBlockClass(m); + Optional> optMap = getFieldValueSafe(fireBlock, fieldNameIgniteOdds); if (optMap.isPresent()) { if (optMap.get().containsKey(block)) { return Optional.of(optMap.get().getInt(block)); @@ -342,8 +343,8 @@ protected boolean setIgniteOdds(Material m, int value, Object fireBlock) { protected Object getBlockClass(Material m) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, ClassNotFoundException { - if (this.magicNumbers == null) { - this.magicNumbers = this.getCraftMagicNumbersClass(); + if (magicNumbers == null) { + magicNumbers = getCraftMagicNumbersClass(); } Method method = magicNumbers.getMethod("getBlock", Material.class); return method.invoke(null, m); @@ -385,7 +386,6 @@ protected static T getFieldValue(@NotNull Object instance, String fieldName) } private static class NMSSpigotMappings extends NMSHelper { - // Tested in 1.19.4 private static final String FIELD_NAME_IGNITE_ODDS = "O"; private static final String FIELD_NAME_BURN_ODDS = "P"; @@ -399,6 +399,7 @@ protected NMSSpigotMappings(String blastResField, String burnOddsField, String i super(blastResField, burnOddsField, igniteOddsField); } + @NotNull @Override Class getCraftMagicNumbersClass() throws ClassNotFoundException { String packageName = Bukkit.getServer().getClass().getPackage().getName(); @@ -408,7 +409,6 @@ Class getCraftMagicNumbersClass() throws ClassNotFoundException { } private static class NMSMojangMappings extends NMSHelper { - // Tested on 1.20.4 and 1.21 private static final String FIELD_NAME_IGNITE_ODDS = "igniteOdds"; private static final String FIELD_NAME_BURN_ODDS = "burnOdds"; @@ -422,10 +422,10 @@ protected NMSMojangMappings(String blastResField, String burnOddsField, String i super(blastResField, burnOddsField, igniteOddsField); } + @NotNull @Override Class getCraftMagicNumbersClass() throws ClassNotFoundException { return Class.forName(Bukkit.getServer().getClass().getPackage().getName() + ".util.CraftMagicNumbers"); } } - } From ce1c004a9d2f0cf13b456311454532751253a35a Mon Sep 17 00:00:00 2001 From: TylerS1066 Date: Sat, 13 Jun 2026 17:17:00 -0500 Subject: [PATCH 2/2] Recursively look for field on super classes --- .../features/BlockBehaviorOverride.java | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/countercraft/movecraft/combat/features/BlockBehaviorOverride.java b/src/main/java/net/countercraft/movecraft/combat/features/BlockBehaviorOverride.java index 2b277e5e..8013752f 100644 --- a/src/main/java/net/countercraft/movecraft/combat/features/BlockBehaviorOverride.java +++ b/src/main/java/net/countercraft/movecraft/combat/features/BlockBehaviorOverride.java @@ -353,7 +353,17 @@ protected Object getBlockClass(Material m) protected static void writeField(@NotNull Object block, @NotNull Consumer whatToDoWithField, String fieldName) throws IllegalAccessException, NoSuchFieldException, ClassCastException, InaccessibleObjectException, SecurityException { - Field field = block.getClass().getField(fieldName); + Class clazz = block.getClass(); + Field field = null; + while (clazz != null) { + try { + field = clazz.getDeclaredField(fieldName); + break; + } catch (NoSuchFieldException e) { + clazz = clazz.getSuperclass(); + } + } + if (field == null) throw new NoSuchFieldException(fieldName); field.setAccessible(true); T obj = (T) field.get(block); whatToDoWithField.accept(obj); @@ -362,7 +372,17 @@ protected static void writeField(@NotNull Object block, @NotNull Consumer protected static void writeField(@NotNull Object block, T value, String fieldName) throws IllegalAccessException, NoSuchFieldException, ClassCastException, InaccessibleObjectException, SecurityException { - Field field = block.getClass().getField(fieldName); + Class clazz = block.getClass(); + Field field = null; + while (clazz != null) { + try { + field = clazz.getDeclaredField(fieldName); + break; + } catch (NoSuchFieldException e) { + clazz = clazz.getSuperclass(); + } + } + if (field == null) throw new NoSuchFieldException(fieldName); field.setAccessible(true); field.set(block, value); } @@ -378,7 +398,7 @@ protected static Optional getFieldValueSafe(@NotNull Object instance, Str protected static T getFieldValue(@NotNull Object instance, String fieldName) throws IllegalAccessException, NoSuchFieldException, ClassCastException, InaccessibleObjectException, SecurityException { - Field field = instance.getClass().getField(fieldName); + Field field = instance.getClass().getDeclaredField(fieldName); field.setAccessible(true); T obj = (T) field.get(instance); return obj;