From 767452338a872f45287c0a1e40a9616077dfbb96 Mon Sep 17 00:00:00 2001 From: tom lee Date: Sat, 5 Feb 2022 19:11:40 +0800 Subject: [PATCH] Changed how Features step works for mod compat with CaveBiomesApi --- .../mimicObject/LightedWorldGenRegion.java | 12 +++++- .../worldGeneration/step/StepFeatures.java | 38 +++---------------- 2 files changed, 16 insertions(+), 34 deletions(-) diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/mimicObject/LightedWorldGenRegion.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/mimicObject/LightedWorldGenRegion.java index 089f71e64..5d5d80c3e 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/mimicObject/LightedWorldGenRegion.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/mimicObject/LightedWorldGenRegion.java @@ -5,7 +5,6 @@ import java.util.stream.Stream; import org.jetbrains.annotations.Nullable; -import com.seibel.lod.common.wrappers.worldGeneration.BatchGenerationEnvironment; import com.seibel.lod.common.wrappers.worldGeneration.BatchGenerationEnvironment.EmptyChunkGenerator; import com.seibel.lod.core.api.ClientApi; import com.seibel.lod.core.enums.config.LightGenerationMode; @@ -42,6 +41,17 @@ public class LightedWorldGenRegion extends WorldGenRegion { private final List cache; private final StructureFeatureManager structFeat; Long2ObjectOpenHashMap chunkMap = new Long2ObjectOpenHashMap(); + private ChunkPos overrideCenterPos = null; + + public void setOverrideCenter(ChunkPos pos) {overrideCenterPos = pos;} + @Override + public int getCenterX() { + return overrideCenterPos==null ? super.getCenterX() : overrideCenterPos.x; + } + @Override + public int getCenterZ() { + return overrideCenterPos==null ? super.getCenterZ() : overrideCenterPos.z; + } public LightedWorldGenRegion(ServerLevel serverLevel, WorldGenLevelLightEngine lightEngine, StructureFeatureManager structFeat, List list, ChunkStatus chunkStatus, int i, diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepFeatures.java b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepFeatures.java index 24f571d7d..0383c3b21 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepFeatures.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/worldGeneration/step/StepFeatures.java @@ -3,20 +3,14 @@ package com.seibel.lod.common.wrappers.worldGeneration.step; import java.util.ArrayList; import com.seibel.lod.common.wrappers.worldGeneration.ThreadedParameters; +import com.seibel.lod.common.wrappers.worldGeneration.mimicObject.LightedWorldGenRegion; import com.seibel.lod.common.wrappers.worldGeneration.BatchGenerationEnvironment; import com.seibel.lod.core.util.GridList; -import net.minecraft.CrashReport; import net.minecraft.ReportedException; -import net.minecraft.core.BlockPos; -import net.minecraft.server.level.WorldGenRegion; -import net.minecraft.world.level.StructureFeatureManager; -import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.chunk.ChunkStatus; import net.minecraft.world.level.chunk.ProtoChunk; -import net.minecraft.world.level.levelgen.WorldgenRandom; public final class StepFeatures { /** @@ -33,31 +27,7 @@ public final class StepFeatures { public final ChunkStatus STATUS = ChunkStatus.FEATURES; - public void applyBiomeDecoration(ChunkGenerator generator, WorldGenRegion worldGenRegion, - StructureFeatureManager structureFeatureManager, ChunkAccess chunk) { - int i = chunk.getPos().x; - int j = chunk.getPos().z; - int k = i * 16; - int l = j * 16; - BlockPos blockPos = new BlockPos(k, 0, l); - Biome biome = generator.biomeSource.getNoiseBiome((i << 2) + 2, 2, (j << 2) + 2); - WorldgenRandom worldgenRandom = new WorldgenRandom(); - long m = worldgenRandom.setDecorationSeed(worldGenRegion.getSeed(), k, l); - try { - synchronized (generator) { - biome.generate(structureFeatureManager, generator, worldGenRegion, m, worldgenRandom, blockPos); - } - } catch (Exception exception) { - CrashReport crashReport = CrashReport.forThrowable(exception, "Biome decoration"); - crashReport.addCategory("Generation") - - .setDetail("CenterX", Integer.valueOf(i)).setDetail("CenterZ", Integer.valueOf(j)) - .setDetail("Seed", Long.valueOf(m)).setDetail("Biome", biome); - throw new ReportedException(crashReport); - } - } - - public void generateGroup(ThreadedParameters tParams, WorldGenRegion worldGenRegion, GridList chunks) { + public void generateGroup(ThreadedParameters tParams, LightedWorldGenRegion worldGenRegion, GridList chunks) { ArrayList chunksToDo = new ArrayList(); for (ChunkAccess chunk : chunks) { @@ -69,10 +39,12 @@ public final class StepFeatures { for (ChunkAccess chunk : chunksToDo) { try { - applyBiomeDecoration(envionment.params.generator, worldGenRegion, tParams.structFeat, chunk); + worldGenRegion.setOverrideCenter(chunk.getPos()); + envionment.params.generator.applyBiomeDecoration(worldGenRegion, tParams.structFeat); } catch (ReportedException e) { e.printStackTrace(); } } + worldGenRegion.setOverrideCenter(null); } } \ No newline at end of file