From d321d45ff7fac641ada8b4ac11bc178c160cef04 Mon Sep 17 00:00:00 2001 From: Su5eD Date: Sun, 22 Oct 2023 13:48:12 +0200 Subject: [PATCH] Fix registries freezing before holders are registered Relates to #404 --- gradle.properties | 2 +- .../sinytra/connector/mod/ConnectorLoader.java | 4 ---- .../mod/mixin/registries/BootstrapMixin.java | 15 ++++++++++++--- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/gradle.properties b/gradle.properties index 97c1661b..6241232d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ versionAdapterDefinition=1.8.0 versionMc=1.20.1 versionForge=47.1.3 versionForgeAutoRenamingTool=1.0.8 -versionFabricLoader=2.5.0+0.14.21+1.20.1 +versionFabricLoader=2.5.1+0.14.21+1.20.1 versionAccessWidener=2.1.0 versionFabricApi=0.90.0+1.9.26+1.20.1 versionMixin=0.12.5+mixin.0.8.5 diff --git a/src/mod/java/dev/su5ed/sinytra/connector/mod/ConnectorLoader.java b/src/mod/java/dev/su5ed/sinytra/connector/mod/ConnectorLoader.java index 0b049b13..cac848b8 100644 --- a/src/mod/java/dev/su5ed/sinytra/connector/mod/ConnectorLoader.java +++ b/src/mod/java/dev/su5ed/sinytra/connector/mod/ConnectorLoader.java @@ -6,7 +6,6 @@ import net.fabricmc.api.DedicatedServerModInitializer; import net.fabricmc.api.ModInitializer; import net.fabricmc.loader.impl.entrypoint.EntrypointUtils; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.fml.loading.FMLEnvironment; import net.minecraftforge.fml.loading.progress.ProgressMeter; @@ -56,9 +55,6 @@ public static void load() { EntrypointUtils.invoke("server", DedicatedServerModInitializer.class, DedicatedServerModInitializer::onInitializeServer); } - // Freeze registries - BuiltInRegistries.bootStrap(); - loading = false; finishedLoading = true; } catch (Throwable t) { diff --git a/src/mod/java/dev/su5ed/sinytra/connector/mod/mixin/registries/BootstrapMixin.java b/src/mod/java/dev/su5ed/sinytra/connector/mod/mixin/registries/BootstrapMixin.java index ec9928e7..14a3b6f0 100644 --- a/src/mod/java/dev/su5ed/sinytra/connector/mod/mixin/registries/BootstrapMixin.java +++ b/src/mod/java/dev/su5ed/sinytra/connector/mod/mixin/registries/BootstrapMixin.java @@ -16,17 +16,26 @@ package dev.su5ed.sinytra.connector.mod.mixin.registries; +import net.minecraft.core.MappedRegistry; +import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.server.Bootstrap; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Bootstrap.class) public abstract class BootstrapMixin { - @Redirect(method = "bootStrap", at = @At(value = "INVOKE", target = "Lnet/minecraft/core/registries/BuiltInRegistries;bootStrap()V")) - private static void initialize() { - BuiltInRegistries.createContents(); + @Inject(method = "bootStrap", at = @At(value = "INVOKE", target = "Lnet/minecraft/core/registries/BuiltInRegistries;bootStrap()V", shift = At.Shift.AFTER)) + private static void initialize(CallbackInfo ci) { + // Unfreeze registries + // We let the get frozen first as some forge mods may rely on registering their contents in the BuiltInRegistries.freeze() method + ((MappedRegistry) BuiltInRegistries.REGISTRY).unfreeze(); + for (Registry registry : BuiltInRegistries.REGISTRY) { + ((MappedRegistry) registry).unfreeze(); + } } @Redirect(method = "bootStrap", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/registries/GameData;vanillaSnapshot()V", remap = false))