From 2ddf620fb80fd445037782c5a7398bfd3de116ba Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 24 May 2022 23:35:28 -0700 Subject: [PATCH] register biomes to builtin registries --- .../com/dfsek/terra/fabric/PlatformImpl.java | 2 +- .../fabric/generation/TerraBiomeSource.java | 24 ++++++++++++++++++- .../client/MinecraftClientMixin.java | 18 +------------- .../lifecycle/server/ServerMainMixin.java | 19 +-------------- .../dfsek/terra/fabric/util/FabricUtil.java | 13 +++++----- 5 files changed, 33 insertions(+), 43 deletions(-) diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/PlatformImpl.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/PlatformImpl.java index f47de12cf..fdbdfc4f3 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/PlatformImpl.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/PlatformImpl.java @@ -83,7 +83,7 @@ public class PlatformImpl extends AbstractPlatform { LOGGER.warn("Failed to execute reload", throwable); return null; }).join(); - FabricUtil.registerBiomes(server.getRegistryManager().get(Registry.BIOME_KEY)); + FabricUtil.registerBiomes(); server.getWorlds().forEach(world -> { if(world.getChunkManager().getChunkGenerator() instanceof FabricChunkGeneratorWrapper chunkGeneratorWrapper) { getConfigRegistry().get(chunkGeneratorWrapper.getPack().getRegistryKey()).ifPresent(pack -> { diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraBiomeSource.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraBiomeSource.java index aeedae4f9..ffdf8062f 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraBiomeSource.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraBiomeSource.java @@ -17,6 +17,8 @@ package com.dfsek.terra.fabric.generation; +import com.dfsek.terra.fabric.util.FabricUtil; + import com.mojang.serialization.Codec; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryEntry; @@ -45,6 +47,9 @@ public class TerraBiomeSource extends BiomeSource { .getBiomes() .spliterator(), false) .map(b -> ((ProtoPlatformBiome) b.getPlatformBiome()).getDelegate())); + biomes.streamEntries().forEach(biomeReference -> { + System.out.println(biomeReference.getKey().orElseThrow()); + }); /* A little (unfortunately, required) jank to watch out for: @@ -72,7 +77,24 @@ public class TerraBiomeSource extends BiomeSource { @Override public RegistryEntry getBiome(int biomeX, int biomeY, int biomeZ, MultiNoiseSampler noiseSampler) { - return ((ProtoPlatformBiome) pack.getBiomeProvider().getBiome(biomeX << 2, biomeZ << 2, seed).getPlatformBiome()).getDelegate(); + /*return biomeRegistry + .getEntry(((ProtoPlatformBiome) pack + .getBiomeProvider() + .getBiome(biomeX << 2, biomeZ << 2, seed) + .getPlatformBiome()) + .getDelegate() + .getKey() + .orElseThrow()) + .orElseThrow(); + + */ + return biomeRegistry.entryOf(((ProtoPlatformBiome) pack + .getBiomeProvider() + .getBiome(biomeX << 2, biomeZ << 2, seed) + .getPlatformBiome()) + .getDelegate() + .getKey() + .orElseThrow()); } public BiomeProvider getProvider() { diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/client/MinecraftClientMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/client/MinecraftClientMixin.java index 3898539d7..fd6ac0ad5 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/client/MinecraftClientMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/client/MinecraftClientMixin.java @@ -43,23 +43,6 @@ import com.dfsek.terra.fabric.mixin.access.GeneratorTypeAccessor; @Mixin(MinecraftClient.class) public class MinecraftClientMixin { - @Shadow - @Final - private static Logger LOGGER; - - @Redirect(method = "method_40187(Lnet/minecraft/util/registry/DynamicRegistryManager;Lnet/minecraft/world/gen/GeneratorOptions;" + - "Lnet/minecraft/world/level/LevelInfo;Lnet/minecraft/resource/ResourceManager;" + - "Lnet/minecraft/resource/DataPackSettings;)Lcom/mojang/datafixers/util/Pair;", - at = @At(value = "INVOKE", - target = "net/minecraft/util/registry/DynamicRegistryManager.createAndLoad ()" + - "Lnet/minecraft/util/registry/DynamicRegistryManager$Mutable;")) - private static Mutable injectBiomes() { - Mutable mutable = DynamicRegistryManager.createAndLoad(); - LOGGER.info("Injecting Terra biomes..."); - FabricUtil.registerBiomes(mutable.get(Registry.BIOME_KEY)); - return mutable; - } - @Inject(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/WindowProvider;createWindow" + "(Lnet/minecraft/client/WindowSettings;Ljava/lang/String;Ljava/lang/String;)" + @@ -74,5 +57,6 @@ public class MinecraftClientMixin { ((GeneratorTypeAccessor) generatorType).setDisplayName(new LiteralText("Terra:" + pack.getID())); GeneratorTypeAccessor.getValues().add(1, generatorType); }); + FabricUtil.registerBiomes(); } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/ServerMainMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/ServerMainMixin.java index 1936dcc37..133e37798 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/ServerMainMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/lifecycle/server/ServerMainMixin.java @@ -38,10 +38,6 @@ import com.dfsek.terra.fabric.FabricEntryPoint; @Mixin(Main.class) public class ServerMainMixin { - @Shadow - @Final - private static Logger LOGGER; - @Inject(method = "main([Ljava/lang/String;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/resource/ResourcePackManager;(Lnet/minecraft/resource/ResourceType;[Lnet/minecraft/resource/ResourcePackProvider;)V") // after registry manager creation @@ -50,19 +46,6 @@ public class ServerMainMixin { FabricEntryPoint.getPlatform().getEventManager().callEvent( new PlatformInitializationEvent()); // Load during MinecraftServer construction, after other mods have registered blocks // and stuff - } - - @Redirect(method = "method_40373(Lnet/minecraft/world/level/storage/LevelStorage$Session;Ljoptsimple/OptionSet;" + - "Ljoptsimple/OptionSpec;Lnet/minecraft/server/dedicated/ServerPropertiesLoader;Ljoptsimple/OptionSpec;" + - "Lnet/minecraft/resource/ResourceManager;Lnet/minecraft/resource/DataPackSettings;)" + - "Lcom/mojang/datafixers/util/Pair;", - at = @At(value = "INVOKE", - target = "net/minecraft/util/registry/DynamicRegistryManager.createAndLoad ()" + - "Lnet/minecraft/util/registry/DynamicRegistryManager$Mutable;")) - private static Mutable injectBiomes() { - Mutable mutable = DynamicRegistryManager.createAndLoad(); - LOGGER.info("Injecting Terra biomes..."); - FabricUtil.registerBiomes(mutable.get(Registry.BIOME_KEY)); - return mutable; + FabricUtil.registerBiomes(); } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java index 24c929b01..bcf9b408c 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java @@ -24,6 +24,7 @@ import net.minecraft.block.entity.SignBlockEntity; import net.minecraft.tag.TagKey; import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.registry.BuiltinRegistries; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryEntry; import net.minecraft.world.WorldAccess; @@ -40,6 +41,7 @@ import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.stream.Stream; import com.dfsek.terra.api.block.entity.BlockEntity; import com.dfsek.terra.api.block.entity.Container; @@ -60,13 +62,12 @@ public final class FabricUtil { .toLowerCase() + "/" + biomeID.getNamespace().toLowerCase(Locale.ROOT) + "/" + biomeID.getID().toLowerCase(Locale.ROOT); } - public static void registerBiomes(Registry biomeRegistry) { + public static void registerBiomes() { logger.info("Registering biomes..."); FabricEntryPoint.getPlatform().getConfigRegistry().forEach(pack -> { // Register all Terra biomes. pack.getCheckedRegistry(Biome.class) - .forEach((id, biome) -> registerBiome(biome, pack, biomeRegistry, id)); + .forEach((id, biome) -> registerBiome(biome, pack, id)); }); - logger.info("Biomes registered."); } private static final Map> @@ -78,8 +79,9 @@ public final class FabricUtil { * @param biome The Terra BiomeBuilder. * @param pack The ConfigPack this biome belongs to. */ - public static void registerBiome(Biome biome, ConfigPack pack, Registry registry, + public static void registerBiome(Biome biome, ConfigPack pack, com.dfsek.terra.api.registry.key.RegistryKey id) { + Registry registry = BuiltinRegistries.BIOME; RegistryEntry vanilla = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(registry); @@ -93,8 +95,7 @@ public final class FabricUtil { if(registry.containsId(identifier)) { ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(FabricUtil.getEntry(registry, identifier).orElseThrow()); } else { - Registry.register(registry, identifier, minecraftBiome); - ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(FabricUtil.getEntry(registry, identifier).orElseThrow()); + ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(BuiltinRegistries.add(registry, identifier, minecraftBiome)); } TERRA_BIOME_MAP.computeIfAbsent(vanilla.getKey().orElseThrow().getValue(), i -> new ArrayList<>()).add(identifier);