diff --git a/forge/src/main/java/dev/rdh/createunlimited/forge/CreateUnlimitedForge.java b/forge/src/main/java/dev/rdh/createunlimited/forge/CreateUnlimitedForge.java index d47c6bf..16a0a18 100755 --- a/forge/src/main/java/dev/rdh/createunlimited/forge/CreateUnlimitedForge.java +++ b/forge/src/main/java/dev/rdh/createunlimited/forge/CreateUnlimitedForge.java @@ -9,12 +9,15 @@ import net.minecraftforge.registries.DeferredRegister; import net.minecraft.commands.synchronization.ArgumentTypeInfo; -import net.minecraft.core.registries.Registries; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; + +import static dev.rdh.createunlimited.multiversion.SupportedMinecraftVersion.*; @Mod(CreateUnlimited.ID) public final class CreateUnlimitedForge { - static final DeferredRegister> ARGUMENTS = DeferredRegister.create(Registries.COMMAND_ARGUMENT_TYPE, CreateUnlimited.ID); + static final DeferredRegister> ARGUMENTS = DeferredRegister.create(getCommandArgumentTypeRegistry(), CreateUnlimited.ID); public CreateUnlimitedForge() { IEventBus modEventBus = FMLJavaModLoadingContext.get() @@ -27,4 +30,21 @@ public CreateUnlimitedForge() { modEventBus.addListener(Events.ClientModBusEvents::onLoadComplete); CreateUnlimited.init(); } + + @SuppressWarnings({"unchecked", "JavaReflectionMemberAccess", "RedundantSuppression"}) + private static ResourceKey>> getCommandArgumentTypeRegistry() { + try { + if(v1_19_2 >= CURRENT) { + return (ResourceKey>>) + Registry.class.getDeclaredField("COMMAND_ARGUMENT_TYPE_REGISTRY").get(null); + } else if(v1_20_1 <= CURRENT) { + return (ResourceKey>>) + Class.forName("net.minecraft.core.registries.Registries").getDeclaredField("COMMAND_ARGUMENT_TYPE").get(null); + } else { + throw new IllegalStateException("Unsupported Minecraft version: " + CURRENT); + } + } catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) { + throw unchecked(e); + } + } } diff --git a/forge/src/main/java/dev/rdh/createunlimited/forge/UtilImpl.java b/forge/src/main/java/dev/rdh/createunlimited/forge/UtilImpl.java index 85fd388..ea6489f 100644 --- a/forge/src/main/java/dev/rdh/createunlimited/forge/UtilImpl.java +++ b/forge/src/main/java/dev/rdh/createunlimited/forge/UtilImpl.java @@ -56,7 +56,7 @@ public static boolean isDevEnv() { return !FMLLoader.isProduction(); } - private static final RegistryObject reachAttribute = makeReachAttribute(); + private static RegistryObject reachAttribute = null; @SuppressWarnings({"unchecked", "JavaReflectionMemberAccess"}) private static RegistryObject makeReachAttribute() { @@ -73,6 +73,9 @@ private static RegistryObject makeReachAttribute() { } public static Attribute getReachAttribute() { + if(reachAttribute == null) { + reachAttribute = makeReachAttribute(); + } return reachAttribute.get(); }