diff --git a/forge/src/main/java/com/mrcrayfish/configured/impl/forge/ForgeValue.java b/forge/src/main/java/com/mrcrayfish/configured/impl/forge/ForgeValue.java index b9cb4c4..461bea7 100644 --- a/forge/src/main/java/com/mrcrayfish/configured/impl/forge/ForgeValue.java +++ b/forge/src/main/java/com/mrcrayfish/configured/impl/forge/ForgeValue.java @@ -5,7 +5,6 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraftforge.common.ForgeConfigSpec; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.Nullable; @@ -158,27 +157,22 @@ public static V lastValue(List list, V defaultValue) } /** - * Reflection to get Forge's range of a value + * Gets Forge's range of a value */ - @SuppressWarnings({"unchecked", "rawtypes"}) + @SuppressWarnings("unchecked") public void loadRange() { if(this.range == null) { - try + ForgeConfigSpec.Range range = this.valueSpec.getRange(); + if(range != null) { - Object range = ObfuscationReflectionHelper.getPrivateValue(ForgeConfigSpec.ValueSpec.class, this.valueSpec, "range"); - if(range != null) - { - Class rangeClass = Class.forName("net.minecraftforge.common.ForgeConfigSpec$Range"); - Object min = ObfuscationReflectionHelper.getPrivateValue(rangeClass, range, "min"); - Object max = ObfuscationReflectionHelper.getPrivateValue(rangeClass, range, "max"); - this.range = Pair.of((T) min, (T) max); - return; - } + this.range = Pair.of((T) range.getMin(), (T) range.getMax()); + } + else + { + this.range = Pair.of(null, null); } - catch(ClassNotFoundException ignored) {} - this.range = Pair.of(null, null); } } } diff --git a/forge/src/test/java/test/config/ConfigTest.java b/forge/src/test/java/test/config/ConfigTest.java index 2d6b44f..fd093cc 100644 --- a/forge/src/test/java/test/config/ConfigTest.java +++ b/forge/src/test/java/test/config/ConfigTest.java @@ -48,6 +48,7 @@ public static class Test public final ForgeConfigSpec.ConfigValue> longList; public final ForgeConfigSpec.ConfigValue> doubleList; public final ForgeConfigSpec.EnumValue restrictedEnums; + public final ForgeConfigSpec.ConfigValue stringWithPattern; public Test(ForgeConfigSpec.Builder builder) { @@ -59,6 +60,7 @@ public Test(ForgeConfigSpec.Builder builder) this.longValue = builder.comment("This is a Long value").defineInRange("longValue", 0L, 0L, 10L); this.enumValue = builder.comment("This is an Enum value").defineEnum("enumValue", ChatFormatting.BLACK); this.restrictedEnums = builder.comment("An enum value but with restricted values").defineEnum("restrictedEnums", ChatFormatting.RED, ChatFormatting.RED, ChatFormatting.GREEN, ChatFormatting.BLUE); + this.stringWithPattern = builder.comment("A string value with pattern \\d+").define("stringWithPattern", "0", o -> o instanceof String s && s.matches("\\d+")); builder.pop(); builder.translation("forge_config.config_test.client.lists").push("lists"); this.intList = builder.comment("This is an Integer list").defineList("intList", Arrays.asList(5, 10), o -> o instanceof Integer); diff --git a/neoforge/src/main/java/com/mrcrayfish/configured/impl/neoforge/NeoForgeValue.java b/neoforge/src/main/java/com/mrcrayfish/configured/impl/neoforge/NeoForgeValue.java index 6a7ddb9..eaa9dff 100644 --- a/neoforge/src/main/java/com/mrcrayfish/configured/impl/neoforge/NeoForgeValue.java +++ b/neoforge/src/main/java/com/mrcrayfish/configured/impl/neoforge/NeoForgeValue.java @@ -157,14 +157,22 @@ public static V lastValue(List list, V defaultValue) } /** - * Reflection to get Forge's range of a value + * Gets Forge's range of a value */ - @SuppressWarnings({"unchecked"}) + @SuppressWarnings("unchecked") public void loadRange() { if(this.range == null) { - this.range = Pair.of((T) this.valueSpec.getRange().getMin(), (T) this.valueSpec.getRange().getMax()); + ModConfigSpec.Range range = this.valueSpec.getRange(); + if(range != null) + { + this.range = Pair.of((T) range.getMin(), (T) range.getMax()); + } + else + { + this.range = Pair.of(null, null); + } } } } diff --git a/neoforge/src/test/java/test/config/ConfigTest.java b/neoforge/src/test/java/test/config/ConfigTest.java index 1829c0d..ca4c462 100644 --- a/neoforge/src/test/java/test/config/ConfigTest.java +++ b/neoforge/src/test/java/test/config/ConfigTest.java @@ -12,6 +12,7 @@ import java.util.Arrays; import java.util.List; +import java.util.regex.Pattern; /** * Author: MrCrayfish @@ -48,6 +49,7 @@ public static class Test public final ModConfigSpec.ConfigValue> longList; public final ModConfigSpec.ConfigValue> doubleList; public final ModConfigSpec.EnumValue restrictedEnums; + public final ModConfigSpec.ConfigValue stringWithPattern; public Test(ModConfigSpec.Builder builder) { @@ -59,6 +61,7 @@ public Test(ModConfigSpec.Builder builder) this.longValue = builder.comment("This is a Long value").defineInRange("longValue", 0L, 0L, 10L); this.enumValue = builder.comment("This is an Enum value").defineEnum("enumValue", ChatFormatting.BLACK); this.restrictedEnums = builder.comment("An enum value but with restricted values").defineEnum("restrictedEnums", ChatFormatting.RED, ChatFormatting.RED, ChatFormatting.GREEN, ChatFormatting.BLUE); + this.stringWithPattern = builder.comment("A string value with pattern \\d+").define("stringWithPattern", "0", o -> o instanceof String s && s.matches("\\d+")); builder.pop(); builder.translation("forge_config.config_test.client.lists").push("lists"); this.intList = builder.comment("This is an Integer list").defineList("intList", Arrays.asList(5, 10), o -> o instanceof Integer);