From 17fe7a31ed84519eb0bb8c44430c6e4fc756ef57 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Thu, 20 Feb 2025 16:08:24 -0500 Subject: [PATCH] Enhanced registries --- .../api/registry/CreateBuiltInRegistries.java | 21 ++++++++++++++-- .../mixin/BuiltInRegistriesMixin.java | 15 ------------ .../accessor/BuiltInRegistriesAccessor.java | 15 ------------ src/main/resources/META-INF/coremods.json | 3 +++ .../resources/coremods/better_registry.js | 24 +++++++++++++++++++ src/main/resources/create.mixins.json | 2 -- 6 files changed, 46 insertions(+), 34 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/foundation/mixin/BuiltInRegistriesMixin.java delete mode 100644 src/main/java/com/simibubi/create/foundation/mixin/accessor/BuiltInRegistriesAccessor.java create mode 100644 src/main/resources/META-INF/coremods.json create mode 100644 src/main/resources/coremods/better_registry.js diff --git a/src/main/java/com/simibubi/create/api/registry/CreateBuiltInRegistries.java b/src/main/java/com/simibubi/create/api/registry/CreateBuiltInRegistries.java index 238f7a2257..e090124505 100644 --- a/src/main/java/com/simibubi/create/api/registry/CreateBuiltInRegistries.java +++ b/src/main/java/com/simibubi/create/api/registry/CreateBuiltInRegistries.java @@ -1,5 +1,7 @@ package com.simibubi.create.api.registry; +import java.lang.reflect.Field; + import org.jetbrains.annotations.ApiStatus; import com.mojang.serialization.Lifecycle; @@ -10,18 +12,21 @@ import com.simibubi.create.api.contraption.storage.item.MountedItemStorageType; import com.simibubi.create.content.kinetics.fan.processing.FanProcessingType; import com.simibubi.create.content.kinetics.mechanicalArm.ArmInteractionPointType; import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttributeType; -import com.simibubi.create.foundation.mixin.accessor.BuiltInRegistriesAccessor; import net.minecraft.core.MappedRegistry; import net.minecraft.core.Registry; import net.minecraft.core.WritableRegistry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceKey; /** * Static registries added by Create. + * * @see CreateRegistries */ public class CreateBuiltInRegistries { + public static final WritableRegistry> ROOT_REGISTRY = getRootRegistry(); + public static final Registry ARM_INTERACTION_POINT_TYPE = simple(CreateRegistries.ARM_INTERACTION_POINT_TYPE); public static final Registry FAN_PROCESSING_TYPE = simple(CreateRegistries.FAN_PROCESSING_TYPE); public static final Registry ITEM_ATTRIBUTE_TYPE = simple(CreateRegistries.ITEM_ATTRIBUTE_TYPE); @@ -36,12 +41,24 @@ public class CreateBuiltInRegistries { @SuppressWarnings("unchecked") private static Registry register(ResourceKey> key, WritableRegistry registry) { - BuiltInRegistriesAccessor.getWRITABLE_REGISTRY().register( + ROOT_REGISTRY.register( (ResourceKey>) (Object) key, registry, Lifecycle.stable() ); return registry; } + @SuppressWarnings("unchecked") + private static WritableRegistry> getRootRegistry() { + // an accessor can't be used here because BuiltInRegistries is loaded too early during datagen. + try { + Field field = BuiltInRegistries.class.getDeclaredField("WRITABLE_REGISTRY"); + field.setAccessible(true); + return (WritableRegistry>) field.get(null); + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException("Create: Failed to get root registry", e); + } + } + @ApiStatus.Internal public static void init() { // make sure the class is loaded. diff --git a/src/main/java/com/simibubi/create/foundation/mixin/BuiltInRegistriesMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/BuiltInRegistriesMixin.java deleted file mode 100644 index 2d896176b9..0000000000 --- a/src/main/java/com/simibubi/create/foundation/mixin/BuiltInRegistriesMixin.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.simibubi.create.foundation.mixin; - -import org.spongepowered.asm.mixin.Mixin; - -import com.simibubi.create.api.registry.CreateBuiltInRegistries; - -import net.minecraft.core.registries.BuiltInRegistries; - -@Mixin(BuiltInRegistries.class) -public class BuiltInRegistriesMixin { - static { - // Mixin merges static blocks. - CreateBuiltInRegistries.init(); - } -} diff --git a/src/main/java/com/simibubi/create/foundation/mixin/accessor/BuiltInRegistriesAccessor.java b/src/main/java/com/simibubi/create/foundation/mixin/accessor/BuiltInRegistriesAccessor.java deleted file mode 100644 index 154149ae1c..0000000000 --- a/src/main/java/com/simibubi/create/foundation/mixin/accessor/BuiltInRegistriesAccessor.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.simibubi.create.foundation.mixin.accessor; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import net.minecraft.core.WritableRegistry; -import net.minecraft.core.registries.BuiltInRegistries; - -@Mixin(BuiltInRegistries.class) -public interface BuiltInRegistriesAccessor { - @Accessor - static WritableRegistry> getWRITABLE_REGISTRY() { - throw new AbstractMethodError(); - } -} diff --git a/src/main/resources/META-INF/coremods.json b/src/main/resources/META-INF/coremods.json new file mode 100644 index 0000000000..0b7ada160d --- /dev/null +++ b/src/main/resources/META-INF/coremods.json @@ -0,0 +1,3 @@ +{ + "better_registry": "coremods/better_registry.js" +} diff --git a/src/main/resources/coremods/better_registry.js b/src/main/resources/coremods/better_registry.js new file mode 100644 index 0000000000..07c01ac231 --- /dev/null +++ b/src/main/resources/coremods/better_registry.js @@ -0,0 +1,24 @@ +var ASMAPI = Java.type('net.minecraftforge.coremod.api.ASMAPI') + +// Necessary to fix forge being a terrible loader +function initializeCoreMod() { + return { + "registrycoremod": { + 'target': { + 'type': 'METHOD', + 'class': 'net.minecraft.core.registries.BuiltInRegistries', + 'methodName': '', + 'methodDesc': '()V' + }, + 'transformer': function (method) { + var CreateBuiltInRegistries = "com/simibubi/create/api/registry/CreateBuiltInRegistries"; + + var insn = ASMAPI.buildMethodCall(CreateBuiltInRegistries, "init", "()V", ASMAPI.MethodType.STATIC) + + method.instructions.insertBefore(method.instructions.getLast(), insn) + + return method; + } + } + } +} diff --git a/src/main/resources/create.mixins.json b/src/main/resources/create.mixins.json index feee74ca39..1376a3728c 100644 --- a/src/main/resources/create.mixins.json +++ b/src/main/resources/create.mixins.json @@ -9,7 +9,6 @@ "mixins": [ "ArmorTrimMixin", "BlockItemMixin", - "BuiltInRegistriesMixin", "ClientboundMapItemDataPacketMixin", "CustomItemUseEffectsMixin", "EntityMixin", @@ -23,7 +22,6 @@ "TestCommandMixin", "WaterWheelFluidSpreadMixin", "accessor.AbstractProjectileDispenseBehaviorAccessor", - "accessor.BuiltInRegistriesAccessor", "accessor.DispenserBlockAccessor", "accessor.FallingBlockEntityAccessor", "accessor.FlowingFluidAccessor",