From caad76f6dd183d7b123a7a42b1b8bd7a6b419e13 Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 21 Dec 2022 21:34:44 -0700 Subject: [PATCH] add mixin to inject flora --- .../mixin/lifecycle/RegistryLoaderMixin.java | 2 +- .../mixin/lifecycle/SaveLoadingMixin.java | 32 +++++++++++++++ .../resources/terra.lifecycle.mixins.json | 41 ++++++++++--------- 3 files changed, 54 insertions(+), 21 deletions(-) create mode 100644 platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/lifecycle/SaveLoadingMixin.java diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/lifecycle/RegistryLoaderMixin.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/lifecycle/RegistryLoaderMixin.java index a891f056c..cb33c527a 100644 --- a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/lifecycle/RegistryLoaderMixin.java +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/lifecycle/RegistryLoaderMixin.java @@ -17,6 +17,7 @@ import net.minecraft.world.gen.chunk.ChunkGeneratorSettings; import org.checkerframework.checker.units.qual.C; 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 java.util.List; @@ -28,7 +29,6 @@ import com.dfsek.terra.lifecycle.util.LifecycleUtil; @Mixin(RegistryLoader.class) public class RegistryLoaderMixin { - @SuppressWarnings("unchecked") @Redirect( method = "load(Lnet/minecraft/resource/ResourceManager;Lnet/minecraft/registry/DynamicRegistryManager;Ljava/util/List;)" + "Lnet/minecraft/registry/DynamicRegistryManager$Immutable;", diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/lifecycle/SaveLoadingMixin.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/lifecycle/SaveLoadingMixin.java new file mode 100644 index 000000000..260d3c4a2 --- /dev/null +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/lifecycle/SaveLoadingMixin.java @@ -0,0 +1,32 @@ +package com.dfsek.terra.lifecycle.mixin.lifecycle; + +import com.dfsek.terra.lifecycle.util.LifecycleUtil; + +import com.dfsek.terra.mod.util.MinecraftUtil; + +import net.minecraft.registry.DynamicRegistryManager; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.server.SaveLoading; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; + + +@Mixin(SaveLoading.class) +public class SaveLoadingMixin { + @ModifyArg( + method = "method_42097(Lnet/minecraft/registry/DynamicRegistryManager$Immutable;" + + "Lnet/minecraft/server/SaveLoading$SaveApplierFactory;Lnet/minecraft/resource/LifecycledResourceManager;" + + "Lnet/minecraft/registry/CombinedDynamicRegistries;Lnet/minecraft/server/SaveLoading$LoadContext;" + + "Lnet/minecraft/server/DataPackContents;)Ljava/lang/Object;", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/server/DataPackContents;refresh(Lnet/minecraft/registry/DynamicRegistryManager;)V" + ), + index = 0 + ) + private static DynamicRegistryManager grabManager(DynamicRegistryManager in) { + MinecraftUtil.registerFlora(in.get(RegistryKeys.BIOME)); + return in; + } +} diff --git a/platforms/mixin-lifecycle/src/main/resources/terra.lifecycle.mixins.json b/platforms/mixin-lifecycle/src/main/resources/terra.lifecycle.mixins.json index 101cead1c..bf42757a4 100644 --- a/platforms/mixin-lifecycle/src/main/resources/terra.lifecycle.mixins.json +++ b/platforms/mixin-lifecycle/src/main/resources/terra.lifecycle.mixins.json @@ -1,22 +1,23 @@ { - "required" : true, - "minVersion" : "0.8", - "package" : "com.dfsek.terra.lifecycle.mixin", - "compatibilityLevel" : "JAVA_17", - "mixins" : [ - "NoiseConfigMixin", - "RegistryEntryReferenceInvoker", - "RegistryMixin", - "SimpleRegistryMixin", - "lifecycle.MinecraftServerMixin", - "lifecycle.RegistryLoaderMixin" - ], - "client" : [ - ], - "server" : [ - ], - "injectors" : { - "defaultRequire" : 1 - }, - "refmap" : "terra.lifecycle.refmap.json" + "required": true, + "minVersion": "0.8", + "package": "com.dfsek.terra.lifecycle.mixin", + "compatibilityLevel": "JAVA_17", + "mixins": [ + "NoiseConfigMixin", + "RegistryEntryReferenceInvoker", + "RegistryMixin", + "SimpleRegistryMixin", + "lifecycle.MinecraftServerMixin", + "lifecycle.RegistryLoaderMixin", + "lifecycle.SaveLoadingMixin" + ], + "client": [ + ], + "server": [ + ], + "injectors": { + "defaultRequire": 1 + }, + "refmap": "terra.lifecycle.refmap.json" } \ No newline at end of file