From b3e2685564819db55f1012d4059ac32fd0f23728 Mon Sep 17 00:00:00 2001 From: dfsek Date: Fri, 18 Jun 2021 12:18:08 -0700 Subject: [PATCH] init biomes on server --- .../fabric/generation/TerraGeneratorType.java | 3 +++ .../fabric/mixin/GeneratorOptionsMixin.java | 26 +++++++++++++------ .../dfsek/terra/fabric/util/FabricUtil.java | 2 +- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraGeneratorType.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraGeneratorType.java index cfecda8a2..065d8e7c0 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraGeneratorType.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/TerraGeneratorType.java @@ -3,6 +3,8 @@ package com.dfsek.terra.fabric.generation; import com.dfsek.terra.config.pack.ConfigPack; import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.fabric.util.FabricUtil; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.client.world.GeneratorType; import net.minecraft.util.Identifier; import net.minecraft.util.registry.DynamicRegistryManager; @@ -12,6 +14,7 @@ import net.minecraft.world.gen.GeneratorOptions; import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.chunk.ChunkGeneratorSettings; +@Environment(EnvType.CLIENT) public class TerraGeneratorType extends GeneratorType { private final ConfigPack pack; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorOptionsMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorOptionsMixin.java index 1738ebe11..6b012002c 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorOptionsMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/GeneratorOptionsMixin.java @@ -4,7 +4,9 @@ import com.dfsek.terra.config.pack.ConfigPack; import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.fabric.generation.TerraBiomeSource; import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; +import com.dfsek.terra.fabric.util.FabricUtil; import com.google.common.base.MoreObjects; +import net.minecraft.util.Identifier; import net.minecraft.util.registry.DynamicRegistryManager; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.SimpleRegistry; @@ -24,11 +26,13 @@ import java.util.Random; @Mixin(GeneratorOptions.class) public abstract class GeneratorOptionsMixin { @Inject(method = "fromProperties(Lnet/minecraft/util/registry/DynamicRegistryManager;Ljava/util/Properties;)Lnet/minecraft/world/gen/GeneratorOptions;", at = @At("HEAD"), cancellable = true) - private static void fromProperties(DynamicRegistryManager dynamicRegistryManager, Properties properties, CallbackInfoReturnable cir) { + private static void fromProperties(DynamicRegistryManager registryManager, Properties properties, CallbackInfoReturnable cir) { if(properties.get("level-type") == null) { return; } + TerraFabricPlugin main = TerraFabricPlugin.getInstance(); + String prop = properties.get("level-type").toString().trim(); if(prop.startsWith("Terra")) { String seed = (String) MoreObjects.firstNonNull(properties.get("level-seed"), ""); @@ -46,18 +50,24 @@ public abstract class GeneratorOptionsMixin { String generate_structures = (String) properties.get("generate-structures"); boolean generateStructures = generate_structures == null || Boolean.parseBoolean(generate_structures); - Registry dimensionTypes = dynamicRegistryManager.get(Registry.DIMENSION_TYPE_KEY); - Registry biomes = dynamicRegistryManager.get(Registry.BIOME_KEY); - Registry chunkGeneratorSettings = dynamicRegistryManager.get(Registry.CHUNK_GENERATOR_SETTINGS_KEY); - SimpleRegistry dimensionOptions = DimensionType.createDefaultDimensionOptions(dimensionTypes, biomes, chunkGeneratorSettings, l); + Registry dimensionTypes = registryManager.get(Registry.DIMENSION_TYPE_KEY); + Registry biomeRegistry = registryManager.get(Registry.BIOME_KEY); + Registry chunkGeneratorSettings = registryManager.get(Registry.CHUNK_GENERATOR_SETTINGS_KEY); + SimpleRegistry dimensionOptions = DimensionType.createDefaultDimensionOptions(dimensionTypes, biomeRegistry, chunkGeneratorSettings, l); prop = prop.substring(prop.indexOf(":") + 1); - ConfigPack pack = TerraFabricPlugin.getInstance().getConfigRegistry().get(prop); + ConfigPack config = main.getConfigRegistry().get(prop); - if(pack == null) throw new IllegalArgumentException("No such pack " + prop); + if(config == null) throw new IllegalArgumentException("No such pack " + prop); - cir.setReturnValue(new GeneratorOptions(l, generateStructures, false, GeneratorOptions.getRegistryWithReplacedOverworldGenerator(dimensionTypes, dimensionOptions, new FabricChunkGeneratorWrapper(new TerraBiomeSource(biomes, l, pack), l, pack)))); + + main.logger().info("Registering biomes..."); + main.getConfigRegistry().forEach(pack -> pack.getBiomeRegistry().forEach((id, biome) -> Registry.register(biomeRegistry, new Identifier("terra", FabricUtil.createBiomeID(pack, id)), FabricUtil.createBiome(main.getFabricAddon(), biome, pack, registryManager)))); // Register all Terra biomes. + main.logger().info("Biomes registered."); + + + cir.setReturnValue(new GeneratorOptions(l, generateStructures, false, GeneratorOptions.getRegistryWithReplacedOverworldGenerator(dimensionTypes, dimensionOptions, new FabricChunkGeneratorWrapper(new TerraBiomeSource(biomeRegistry, l, config), l, config)))); } } } 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 0f5edafcd..97d0cd74a 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 @@ -38,7 +38,7 @@ public final class FabricUtil { * @param pack The ConfigPack this biome belongs to. * @return The Minecraft delegate biome. */ - public static Biome createBiome(TerraFabricPlugin.FabricAddon fabricAddon, BiomeBuilder biome, ConfigPack pack, DynamicRegistryManager.Impl registryManager) { + public static Biome createBiome(TerraFabricPlugin.FabricAddon fabricAddon, BiomeBuilder biome, ConfigPack pack, DynamicRegistryManager registryManager) { BiomeTemplate template = biome.getTemplate(); Map colors = template.getColors();