diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/RegistryEntryReferenceInvoker.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/RegistryEntryReferenceInvoker.java new file mode 100644 index 000000000..d84b643cb --- /dev/null +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/RegistryEntryReferenceInvoker.java @@ -0,0 +1,13 @@ +package com.dfsek.terra.lifecycle.mixin; + + +import net.minecraft.registry.entry.RegistryEntry.Reference; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + + +@Mixin(Reference.class) +public interface RegistryEntryReferenceInvoker { + @Invoker("setValue") + void invokeSetValue(T value); +} diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/SimpleRegistryMixin.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/SimpleRegistryMixin.java new file mode 100644 index 000000000..2da9f317d --- /dev/null +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/mixin/SimpleRegistryMixin.java @@ -0,0 +1,28 @@ +package com.dfsek.terra.lifecycle.mixin; + +import com.dfsek.terra.lifecycle.util.RegistryHack; + +import net.minecraft.registry.SimpleRegistry; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.registry.entry.RegistryEntry.Reference; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import java.util.Map; + + +@Mixin(SimpleRegistry.class) +public class SimpleRegistryMixin implements RegistryHack { + @Shadow + @Final + private Map> valueToEntry; + + @Override + public void terra_bind() { + valueToEntry.forEach((value, entry) -> { + //noinspection unchecked + ((RegistryEntryReferenceInvoker) entry).invokeSetValue(value); + }); + } +} 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 14a466dd4..d11095d8a 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 @@ -2,6 +2,8 @@ package com.dfsek.terra.lifecycle.mixin.lifecycle; import com.dfsek.terra.lifecycle.LifecyclePlatform; +import com.dfsek.terra.lifecycle.util.RegistryHack; + import com.mojang.datafixers.util.Pair; import net.minecraft.registry.MutableRegistry; import net.minecraft.registry.RegistryKeys; @@ -34,32 +36,18 @@ public class RegistryLoaderMixin { ) ) private static void grabManager(List, Object>> instance, Consumer, Object>> consumer) { - MutableRegistry biomeMutableRegistry = (MutableRegistry) - instance.stream() - .map(Pair::getFirst) - .filter(r -> r.getKey().equals(RegistryKeys.BIOME)) - .findFirst() - .orElseThrow(); - MutableRegistry worldPresetMutableRegistry = (MutableRegistry) - instance.stream() - .map(Pair::getFirst) - .filter(r -> r.getKey().equals(RegistryKeys.WORLD_PRESET)) - .findFirst() - .orElseThrow(); - MutableRegistry dimensionTypeMutableRegistry = (MutableRegistry) - instance.stream() - .map(Pair::getFirst) - .filter(r -> r.getKey().equals(RegistryKeys.DIMENSION_TYPE)) - .findFirst() - .orElseThrow(); - MutableRegistry chunkGeneratorSettingsMutableRegistry = (MutableRegistry) - instance.stream() - .map(Pair::getFirst) - .filter(r -> r.getKey().equals(RegistryKeys.CHUNK_GENERATOR_SETTINGS)) - .findFirst() - .orElseThrow(); - LifecyclePlatform.setRegistries(biomeMutableRegistry, dimensionTypeMutableRegistry, chunkGeneratorSettingsMutableRegistry); - LifecycleUtil.initialize(biomeMutableRegistry, worldPresetMutableRegistry); + + //LifecyclePlatform.setRegistries(biomeMutableRegistry, dimensionTypeMutableRegistry, chunkGeneratorSettingsMutableRegistry); + //LifecycleUtil.initialize(biomeMutableRegistry, worldPresetMutableRegistry); + instance.forEach(mutableRegistryObjectPair -> { + System.out.println(mutableRegistryObjectPair.getFirst()); + System.out.println(mutableRegistryObjectPair.getFirst().size()); + if(mutableRegistryObjectPair.getFirst().getKey().equals(RegistryKeys.BIOME)) { + ((RegistryHack) mutableRegistryObjectPair.getFirst()).terra_bind(); + System.out.println("BIOMES: " + mutableRegistryObjectPair.getFirst().stream().toList()); + } + //System.out.println(mutableRegistryObjectPair.getFirst().stream().toList()); + }); instance.forEach(consumer); } } diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/RegistryHack.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/RegistryHack.java new file mode 100644 index 000000000..347a13bfa --- /dev/null +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/RegistryHack.java @@ -0,0 +1,5 @@ +package com.dfsek.terra.lifecycle.util; + +public interface RegistryHack { + void terra_bind(); +} 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 afc8050c2..101cead1c 100644 --- a/platforms/mixin-lifecycle/src/main/resources/terra.lifecycle.mixins.json +++ b/platforms/mixin-lifecycle/src/main/resources/terra.lifecycle.mixins.json @@ -5,7 +5,9 @@ "compatibilityLevel" : "JAVA_17", "mixins" : [ "NoiseConfigMixin", + "RegistryEntryReferenceInvoker", "RegistryMixin", + "SimpleRegistryMixin", "lifecycle.MinecraftServerMixin", "lifecycle.RegistryLoaderMixin" ],