From 02a8eea90dd8040cb2e71553c7f5c29d0b9f4047 Mon Sep 17 00:00:00 2001 From: Frank Date: Sun, 18 Jun 2023 14:50:18 +0200 Subject: [PATCH] Capture Registries even earlier (TerraformersMC/Biolith#4) --- .../biolith/impl/biome/BiomeCoordinator.java | 2 +- .../biolith/impl/mixin/MixinSaveLoader.java | 27 +++++++++++++++++++ src/main/resources/biolith.mixins.json | 1 + 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/terraformersmc/biolith/impl/mixin/MixinSaveLoader.java diff --git a/src/main/java/com/terraformersmc/biolith/impl/biome/BiomeCoordinator.java b/src/main/java/com/terraformersmc/biolith/impl/biome/BiomeCoordinator.java index 748903a..c744e01 100644 --- a/src/main/java/com/terraformersmc/biolith/impl/biome/BiomeCoordinator.java +++ b/src/main/java/com/terraformersmc/biolith/impl/biome/BiomeCoordinator.java @@ -29,7 +29,7 @@ public class BiomeCoordinator { protected static DynamicRegistryManager.Immutable registryManager; public static void setRegistryManager(CombinedDynamicRegistries combinedDynamicRegistries) { - // Called by biolith$earlyCaptureRegistries() in MixinMinecraftServer so we can set this really early. + // Called by biolith$earlyCaptureRegistries() in MixinMinecraftServer and MixinServerLoad so we can set this really early. registryManager = combinedDynamicRegistries.getCombinedRegistryManager(); } diff --git a/src/main/java/com/terraformersmc/biolith/impl/mixin/MixinSaveLoader.java b/src/main/java/com/terraformersmc/biolith/impl/mixin/MixinSaveLoader.java new file mode 100644 index 0000000..03c6023 --- /dev/null +++ b/src/main/java/com/terraformersmc/biolith/impl/mixin/MixinSaveLoader.java @@ -0,0 +1,27 @@ +package com.terraformersmc.biolith.impl.mixin; + +import net.minecraft.registry.CombinedDynamicRegistries; +import net.minecraft.registry.ServerDynamicRegistryType; +import net.minecraft.server.SaveLoader; + +import com.terraformersmc.biolith.impl.biome.BiomeCoordinator; +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.ModifyVariable; + +@Mixin(value=SaveLoader.class, priority = 500) +public class MixinSaveLoader { + @Shadow @Final private CombinedDynamicRegistries combinedDynamicRegistries; + + @ModifyVariable(method = "", argsOnly = true, at = @At(value = "INVOKE", target = "Ljava/lang/Record;()V", shift = At.Shift.AFTER)) + private CombinedDynamicRegistries biolith$earlyCaptureRegistries( + CombinedDynamicRegistries combinedDynamicRegistries + ) { + System.out.println("Biolith: early capture registries"); + // We need the registries really early in case TerraBlender calls us before the Fabric server start event. + BiomeCoordinator.setRegistryManager(combinedDynamicRegistries); + return combinedDynamicRegistries; + } +} diff --git a/src/main/resources/biolith.mixins.json b/src/main/resources/biolith.mixins.json index 5334876..ec13793 100644 --- a/src/main/resources/biolith.mixins.json +++ b/src/main/resources/biolith.mixins.json @@ -11,6 +11,7 @@ "MixinEntries", "MixinMinecraftServer", "MixinMultiNoiseBiomeSource", + "MixinSaveLoader", "MixinSearchTree", "MixinServerWorld", "MixinSurfaceBuilder",