From 42c407698db75881746ef324fb11497faf050a7e Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 4 Jan 2022 08:24:32 -0700 Subject: [PATCH] configurable beard threshold --- .../config/PreLoadCompatibilityOptions.java | 16 ++++++++++++++++ .../terra/fabric/generation/BeardGenerator.java | 7 +++++-- .../generation/FabricChunkGeneratorWrapper.java | 10 ++++++---- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/PreLoadCompatibilityOptions.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/PreLoadCompatibilityOptions.java index 2bf789002..503e30e62 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/PreLoadCompatibilityOptions.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/PreLoadCompatibilityOptions.java @@ -35,7 +35,23 @@ public class PreLoadCompatibilityOptions implements ConfigTemplate, Properties { @Default private boolean vanillaBiomes = false; + @Value("fabric.beard.enable") + @Default + private boolean beard = true; + + @Value("fabric.beard.threshold") + @Default + private double beardThreshold = 0.5; + public boolean useVanillaBiomes() { return vanillaBiomes; } + + public boolean isBeard() { + return beard; + } + + public double getBeardThreshold() { + return beardThreshold; + } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/BeardGenerator.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/BeardGenerator.java index bb504c85d..fcd10d878 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/BeardGenerator.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/BeardGenerator.java @@ -43,8 +43,11 @@ public class BeardGenerator { private final int minY; private final int maxY; - public BeardGenerator(StructureAccessor structureAccessor, Chunk chunk) { + private final double threshold; + + public BeardGenerator(StructureAccessor structureAccessor, Chunk chunk, double threshold) { this.chunk = chunk; + this.threshold = threshold; ChunkPos chunkPos = chunk.getPos(); int i = chunkPos.getStartX(); int j = chunkPos.getStartZ(); @@ -93,7 +96,7 @@ public class BeardGenerator { for(int z = 0; z < 16; z++) { int depth = 0; for(int y = maxY; y >= minY; y--) { - if(calculateNoise(x + xi, y, z + zi) > 0.5) { + if(calculateNoise(x + xi, y, z + zi) > threshold) { chunk.setBlockState(new BlockPos(x, y, z), (BlockState) generator .getPalette(x + xi, y, z + zi, worldProperties, biomeProvider) .get(depth, x + xi, y, z + zi, worldProperties.getSeed()), false); 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 778f7abd3..9d7437e3c 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 @@ -24,6 +24,7 @@ import com.dfsek.terra.api.world.chunk.generation.ProtoChunk; import com.dfsek.terra.api.world.chunk.generation.ProtoWorld; import com.dfsek.terra.api.world.chunk.generation.stage.Chunkified; import com.dfsek.terra.api.world.chunk.generation.util.GeneratorWrapper; +import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions; import com.dfsek.terra.fabric.data.Codecs; import com.dfsek.terra.fabric.mixin.access.StructureAccessorAccessor; @@ -43,7 +44,6 @@ import net.minecraft.world.biome.source.util.MultiNoiseUtil; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.gen.GenerationStep; import net.minecraft.world.gen.StructureAccessor; -import net.minecraft.world.gen.StructureWeightSampler; import net.minecraft.world.gen.chunk.Blender; import net.minecraft.world.gen.chunk.ChunkGeneratorSettings; import net.minecraft.world.gen.chunk.StructuresConfig; @@ -159,9 +159,11 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C ProtoWorld world = (ProtoWorld) ((StructureAccessorAccessor) structureAccessor).getWorld(); BiomeProvider biomeProvider = pack.getBiomeProvider().caching(); delegate.generateChunkData((ProtoChunk) chunk, world, biomeProvider, chunk.getPos().x, chunk.getPos().z); - - new BeardGenerator(structureAccessor, chunk).generate(delegate, world, biomeProvider); - + + PreLoadCompatibilityOptions compatibilityOptions = pack.getContext().get(PreLoadCompatibilityOptions.class); + if(compatibilityOptions.isBeard()) { + new BeardGenerator(structureAccessor, chunk, compatibilityOptions.getBeardThreshold()).generate(delegate, world, biomeProvider); + } return chunk; }, executor); }