From 901ec1cda3aa23066beb01727dab3a6fe22c887b Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 17 Oct 2021 12:16:33 -0700 Subject: [PATCH] fix /te reload --- .../java/com/dfsek/terra/fabric/PlatformImpl.java | 6 ++++++ .../generation/FabricChunkGeneratorWrapper.java | 11 +++++++++-- .../terra/fabric/generation/TerraBiomeSource.java | 12 +++++++----- 3 files changed, 22 insertions(+), 7 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 0271ce1f5..ceaa0eea5 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 @@ -3,6 +3,7 @@ package com.dfsek.terra.fabric; import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.loading.TypeRegistry; +import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper; import com.dfsek.terra.fabric.util.FabricUtil; import net.fabricmc.loader.api.FabricLoader; @@ -50,6 +51,11 @@ public class PlatformImpl extends AbstractPlatform { LangUtil.load(getTerraConfig().getLanguage(), this); // Load language. boolean succeed = getRawConfigRegistry().loadAll(this); + worlds.forEach(world -> { + FabricChunkGeneratorWrapper chunkGeneratorWrapper = ((FabricChunkGeneratorWrapper) world.getChunkManager().getChunkGenerator()); + chunkGeneratorWrapper.setPack(getConfigRegistry().get(chunkGeneratorWrapper.getPack().getID())); + }); + return succeed; } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java index ab5db3047..ebae50251 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java @@ -60,10 +60,10 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C ); private final long seed; - private final ChunkGenerator delegate; + private ChunkGenerator delegate; private final TerraBiomeSource biomeSource; - private final ConfigPack pack; + private ConfigPack pack; private ServerWorld world; public FabricChunkGeneratorWrapper(TerraBiomeSource biomeSource, long seed, ConfigPack configPack) { @@ -77,6 +77,13 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C this.seed = seed; } + public void setPack(ConfigPack pack) { + this.pack = pack; + this.delegate = pack.getGeneratorProvider().newInstance(pack); + biomeSource.setPack(pack); + + delegate.getPlatform().logger().info("Loading world with config pack " + pack.getID()); + } @Override protected Codec getCodec() { 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 6ea7b0de9..0ca50b7d0 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 @@ -34,8 +34,11 @@ public class TerraBiomeSource extends BiomeSource { private final Registry biomeRegistry; private final long seed; - private final BiomeProvider provider; - private final ConfigPack pack; + private ConfigPack pack; + + public void setPack(ConfigPack pack) { + this.pack = pack; + } public TerraBiomeSource(Registry biomes, long seed, ConfigPack pack) { super(biomes.stream() @@ -45,7 +48,6 @@ public class TerraBiomeSource extends BiomeSource { .collect(Collectors.toList())); this.biomeRegistry = biomes; this.seed = seed; - this.provider = pack.getBiomeProviderBuilder(); this.pack = pack; } @@ -61,11 +63,11 @@ public class TerraBiomeSource extends BiomeSource { @Override public Biome getBiomeForNoiseGen(int biomeX, int biomeY, int biomeZ) { - TerraBiome biome = provider.getBiome(biomeX << 2, biomeZ << 2, seed); + TerraBiome biome = pack.getBiomeProviderBuilder().getBiome(biomeX << 2, biomeZ << 2, seed); return biomeRegistry.get(new Identifier("terra", FabricUtil.createBiomeID(pack, biome.getID()))); } public BiomeProvider getProvider() { - return provider; + return pack.getBiomeProviderBuilder(); } }