diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 12717619dc..ea50373c71 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -269,7 +269,6 @@ import com.simibubi.create.foundation.data.ModelGen; import com.simibubi.create.foundation.data.SharedProperties; import com.simibubi.create.foundation.item.ItemDescription; import com.simibubi.create.foundation.item.UncontainableBlockItem; -import com.simibubi.create.foundation.mixin.accessor.BlockLootSubProviderAccessor; import com.simibubi.create.foundation.utility.DyeHelper; import com.simibubi.create.infrastructure.config.CStress; import com.tterrag.registrate.providers.RegistrateRecipeProvider; @@ -2488,7 +2487,7 @@ public class AllBlocks { .sound(SoundType.STONE)) .transform(pickaxeOnly()) .loot((lt, b) -> { - HolderLookup.RegistryLookup enchantmentRegistryLookup = ((BlockLootSubProviderAccessor) lt).create$getRegistries().lookupOrThrow(Registries.ENCHANTMENT); + HolderLookup.RegistryLookup enchantmentRegistryLookup = lt.getRegistries().lookupOrThrow(Registries.ENCHANTMENT); lt.add(b, lt.createSilkTouchDispatchTable(b, @@ -2509,8 +2508,7 @@ public class AllBlocks { .sound(SoundType.DEEPSLATE)) .transform(pickaxeOnly()) .loot((lt, b) -> { - HolderLookup.RegistryLookup enchantmentRegistryLookup = ((BlockLootSubProviderAccessor) lt).create$getRegistries().lookupOrThrow(Registries.ENCHANTMENT); - + HolderLookup.RegistryLookup enchantmentRegistryLookup = lt.getRegistries().lookupOrThrow(Registries.ENCHANTMENT); lt.add(b, lt.createSilkTouchDispatchTable(b, 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 92388f4034..321eb78dd5 100644 --- a/src/main/java/com/simibubi/create/api/registry/CreateBuiltInRegistries.java +++ b/src/main/java/com/simibubi/create/api/registry/CreateBuiltInRegistries.java @@ -1,11 +1,7 @@ package com.simibubi.create.api.registry; -import java.util.HashSet; -import java.util.Set; - import org.jetbrains.annotations.ApiStatus.Internal; -import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.simibubi.create.api.behaviour.display.DisplaySource; import com.simibubi.create.api.behaviour.display.DisplayTarget; @@ -20,13 +16,12 @@ import com.simibubi.create.content.kinetics.mechanicalArm.ArmInteractionPointTyp import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttributeType; import com.simibubi.create.content.logistics.packagePort.PackagePortTargetType; +import net.minecraft.core.RegistrationInfo; import net.minecraft.core.Registry; +import net.minecraft.core.WritableRegistry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceKey; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.common.EventBusSubscriber; -import net.neoforged.fml.common.EventBusSubscriber.Bus; -import net.neoforged.neoforge.registries.NewRegistryEvent; import net.neoforged.neoforge.registries.RegistryBuilder; /** @@ -34,12 +29,7 @@ import net.neoforged.neoforge.registries.RegistryBuilder; * * @see CreateRegistries */ -@EventBusSubscriber(bus = Bus.MOD) public class CreateBuiltInRegistries { - private static final Set> REGISTRIES = new HashSet<>(); - // specifying Registry here makes generics upset later - private static final Set> HAS_INTRUSIVE_HOLDERS = new HashSet<>(); - 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); @@ -54,31 +44,30 @@ public class CreateBuiltInRegistries { public static final Registry> POTATO_PROJECTILE_BLOCK_HIT_ACTION = simple(CreateRegistries.POTATO_PROJECTILE_BLOCK_HIT_ACTION); private static Registry simple(ResourceKey> key) { - Registry registry = new RegistryBuilder<>(key) - .sync(true) - .create(); - return register(registry); + return register(key, false); } private static Registry withIntrusiveHolders(ResourceKey> key) { - HAS_INTRUSIVE_HOLDERS.add(key); - return simple(key); + return register(key, true); } - private static Registry register(Registry registry) { - REGISTRIES.add(registry); + @SuppressWarnings({"deprecation", "unchecked", "rawtypes"}) + private static Registry register(ResourceKey> key, boolean hasIntrusiveHolders) { + RegistryBuilder builder = new RegistryBuilder<>(key) + .sync(true); + + if (hasIntrusiveHolders) + builder.withIntrusiveHolders(); + + Registry registry = builder.create(); + ((WritableRegistry) BuiltInRegistries.REGISTRY) + .register(key, registry, RegistrationInfo.BUILT_IN); return registry; } @Internal - public static boolean hasIntrusiveHolders(ResourceKey key) { - return HAS_INTRUSIVE_HOLDERS.contains(key); - } - - @SubscribeEvent - public static void onNewRegistryEvent(NewRegistryEvent event) { - for (Registry registry : REGISTRIES) - event.register(registry); - REGISTRIES.clear(); + public static void init() { + // make sure the class is loaded. + // this method is called at the tail of BuiltInRegistries, injected by BuiltInRegistriesMixin. } } diff --git a/src/main/java/com/simibubi/create/foundation/mixin/BuiltInRegistriesMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/BuiltInRegistriesMixin.java new file mode 100644 index 0000000000..475671439c --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/mixin/BuiltInRegistriesMixin.java @@ -0,0 +1,14 @@ +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 { + CreateBuiltInRegistries.init(); + } +} diff --git a/src/main/java/com/simibubi/create/foundation/mixin/accessor/BlockLootSubProviderAccessor.java b/src/main/java/com/simibubi/create/foundation/mixin/accessor/BlockLootSubProviderAccessor.java deleted file mode 100644 index 2069237d72..0000000000 --- a/src/main/java/com/simibubi/create/foundation/mixin/accessor/BlockLootSubProviderAccessor.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.simibubi.create.foundation.mixin.accessor; - -import net.minecraft.core.HolderLookup; -import net.minecraft.data.loot.BlockLootSubProvider; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(BlockLootSubProvider.class) -public interface BlockLootSubProviderAccessor { - @Accessor("registries") - HolderLookup.Provider create$getRegistries(); -} 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 9646101b52..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("WRITABLE_REGISTRY") - static WritableRegistry> create$getWRITABLE_REGISTRY() { - throw new AssertionError(); - } -} diff --git a/src/main/java/com/simibubi/create/foundation/mixin/forge/RegistryBuilderMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/forge/RegistryBuilderMixin.java deleted file mode 100644 index 6d4af185a3..0000000000 --- a/src/main/java/com/simibubi/create/foundation/mixin/forge/RegistryBuilderMixin.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.simibubi.create.foundation.mixin.forge; - -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; - -import com.simibubi.create.api.registry.CreateBuiltInRegistries; - -import net.minecraft.resources.ResourceKey; - -import net.neoforged.neoforge.registries.RegistryBuilder; - -@Mixin(RegistryBuilder.class) -public class RegistryBuilderMixin { - @Shadow - @Final - private ResourceKey registryKey; - - // only a single At is supported by ModifyArg for some reason. - - @ModifyArg( - method = "create", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/core/DefaultedMappedRegistry;(Ljava/lang/String;Lnet/minecraft/resources/ResourceKey;Lcom/mojang/serialization/Lifecycle;Z)V" - ) - ) - private boolean allowIntrusiveHoldersDefaulted(boolean hasIntrusiveHolders) { - return hasIntrusiveHolders || CreateBuiltInRegistries.hasIntrusiveHolders(this.registryKey); - } - - @ModifyArg( - method = "create", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/core/MappedRegistry;(Lnet/minecraft/resources/ResourceKey;Lcom/mojang/serialization/Lifecycle;Z)V" - ) - ) - private boolean allowIntrusiveHolders(boolean hasIntrusiveHolders) { - return hasIntrusiveHolders || CreateBuiltInRegistries.hasIntrusiveHolders(this.registryKey); - } -} diff --git a/src/main/resources/create.mixins.json b/src/main/resources/create.mixins.json index 5c354e10af..57ae13821f 100644 --- a/src/main/resources/create.mixins.json +++ b/src/main/resources/create.mixins.json @@ -9,6 +9,7 @@ "mixins": [ "ArmorTrimMixin", "BlockItemMixin", + "BuiltInRegistriesMixin", "CustomItemUseEffectsMixin", "EnchantedCountIncreaseFunctionMixin", "EntityMixin", @@ -24,8 +25,6 @@ "WaterWheelFluidSpreadMixin", "accessor.AbstractRegistrateAccessor", "accessor.BlockBehaviourAccessor", - "accessor.BlockLootSubProviderAccessor", - "accessor.BuiltInRegistriesAccessor", "accessor.DispenserBlockAccessor", "accessor.FallingBlockEntityAccessor", "accessor.FlowingFluidAccessor", @@ -48,8 +47,7 @@ "compat.journeymap.MapRendererAccessor", "datafixer.BlockPosFormatAndRenamesFixMixin", "datafixer.ItemStackComponentizationFixMixin", - "datafixer.V1460Mixin", - "forge.RegistryBuilderMixin" + "datafixer.V1460Mixin" ], "client": [ "accessor.AgeableListModelAccessor",