From 8db15979a097c8aaa66c63d60da62c43cde80ed1 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 9 Dec 2021 00:12:13 +0100 Subject: [PATCH] Ported old noise generator for double-block biomes --- .../ru/bclib/api/biomes/BCLBiomeBuilder.java | 3 +- .../DoubleBlockSurfaceNoiseCondition.java | 34 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ru/bclib/world/surface/DoubleBlockSurfaceNoiseCondition.java diff --git a/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java b/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java index 4e504863..a513c992 100644 --- a/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java +++ b/src/main/java/ru/bclib/api/biomes/BCLBiomeBuilder.java @@ -39,6 +39,7 @@ import ru.bclib.util.ColorUtil; import ru.bclib.world.biomes.BCLBiome; import ru.bclib.world.features.BCLFeature; import ru.bclib.world.structures.BCLStructureFeature; +import ru.bclib.world.surface.DoubleBlockSurfaceNoiseCondition; public class BCLBiomeBuilder { private static final BCLBiomeBuilder INSTANCE = new BCLBiomeBuilder(); @@ -538,7 +539,7 @@ public class BCLBiomeBuilder { SurfaceRules.sequence( SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.sequence( - SurfaceRules.ifTrue(SurfaceRules.noiseCondition(Noises.SURFACE, -0.1818, 0.1818), surfaceBlockA), + SurfaceRules.ifTrue(DoubleBlockSurfaceNoiseCondition.CONDITION, surfaceBlockA), surfaceBlockB ) ), diff --git a/src/main/java/ru/bclib/world/surface/DoubleBlockSurfaceNoiseCondition.java b/src/main/java/ru/bclib/world/surface/DoubleBlockSurfaceNoiseCondition.java new file mode 100644 index 00000000..e6f01c13 --- /dev/null +++ b/src/main/java/ru/bclib/world/surface/DoubleBlockSurfaceNoiseCondition.java @@ -0,0 +1,34 @@ +package ru.bclib.world.surface; + +import ru.bclib.api.biomes.SurfaceNoiseCondition; +import ru.bclib.mixin.common.SurfaceRulesContextAccessor; +import ru.bclib.noise.OpenSimplexNoise; +import ru.bclib.util.MHelper; + +public class DoubleBlockSurfaceNoiseCondition extends SurfaceNoiseCondition { + public static final DoubleBlockSurfaceNoiseCondition CONDITION = new DoubleBlockSurfaceNoiseCondition(0); + private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(4141); + + private final double threshold; + public DoubleBlockSurfaceNoiseCondition(double threshold){ + this.threshold = threshold; + } + + private static int lastX = Integer.MIN_VALUE; + private static int lastZ = Integer.MIN_VALUE; + private static double lastValue = 0; + + @Override + public boolean test(SurfaceRulesContextAccessor context) { + final int x = context.getBlockX(); + final int z = context.getBlockZ(); + if (lastX==x && lastZ==z) return lastValue > threshold; + + double value = NOISE.eval(x * 0.1, z * 0.1) + MHelper.randRange(-0.4, 0.4, MHelper.RANDOM); + + lastX=x; + lastZ=z; + lastValue=value; + return value > threshold; + } +}