From f6968269b41a76f27898f9585d7150818c6d8d98 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Sat, 6 Sep 2025 14:35:25 +0200 Subject: [PATCH] add toggle to offset noise types fixing seeds --- .../com/volmit/iris/core/IrisSettings.java | 1 + .../iris/util/noise/NoiseGenerator.java | 4 ++ .../com/volmit/iris/util/noise/NoiseType.java | 4 +- .../iris/util/noise/OffsetNoiseGenerator.java | 48 +++++++++++++++++++ 4 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 core/src/main/java/com/volmit/iris/util/noise/OffsetNoiseGenerator.java diff --git a/core/src/main/java/com/volmit/iris/core/IrisSettings.java b/core/src/main/java/com/volmit/iris/core/IrisSettings.java index dcab2aa18..65991a686 100644 --- a/core/src/main/java/com/volmit/iris/core/IrisSettings.java +++ b/core/src/main/java/com/volmit/iris/core/IrisSettings.java @@ -243,6 +243,7 @@ public class IrisSettings { public int maxBiomeChildDepth = 4; public boolean preventLeafDecay = true; public boolean useMulticore = false; + public boolean offsetNoiseTypes = false; } @Data diff --git a/core/src/main/java/com/volmit/iris/util/noise/NoiseGenerator.java b/core/src/main/java/com/volmit/iris/util/noise/NoiseGenerator.java index 6ad166239..4574e9eb1 100644 --- a/core/src/main/java/com/volmit/iris/util/noise/NoiseGenerator.java +++ b/core/src/main/java/com/volmit/iris/util/noise/NoiseGenerator.java @@ -39,4 +39,8 @@ public interface NoiseGenerator { default ProceduralStream stream() { return ProceduralStream.of(this::noise, this::noise, Interpolated.DOUBLE); } + + default OffsetNoiseGenerator offset(long seed) { + return new OffsetNoiseGenerator(this, seed); + } } diff --git a/core/src/main/java/com/volmit/iris/util/noise/NoiseType.java b/core/src/main/java/com/volmit/iris/util/noise/NoiseType.java index b2d26b2c8..20f89ca8b 100644 --- a/core/src/main/java/com/volmit/iris/util/noise/NoiseType.java +++ b/core/src/main/java/com/volmit/iris/util/noise/NoiseType.java @@ -18,6 +18,7 @@ package com.volmit.iris.util.noise; +import com.volmit.iris.core.IrisSettings; import com.volmit.iris.util.interpolation.InterpolationMethod; public enum NoiseType { @@ -77,6 +78,7 @@ public enum NoiseType { } public NoiseGenerator create(long seed) { - return f.create(seed); + if (IrisSettings.get().getGenerator().offsetNoiseTypes) return f.create(seed).offset(seed); + else return f.create(seed); } } diff --git a/core/src/main/java/com/volmit/iris/util/noise/OffsetNoiseGenerator.java b/core/src/main/java/com/volmit/iris/util/noise/OffsetNoiseGenerator.java new file mode 100644 index 000000000..97e3088c0 --- /dev/null +++ b/core/src/main/java/com/volmit/iris/util/noise/OffsetNoiseGenerator.java @@ -0,0 +1,48 @@ +package com.volmit.iris.util.noise; + + +import com.volmit.iris.util.math.RNG; +import org.jetbrains.annotations.NotNull; + + +public class OffsetNoiseGenerator implements NoiseGenerator { + private final NoiseGenerator base; + private final double ox, oz; + + public OffsetNoiseGenerator(NoiseGenerator base, long seed) { + this.base = base; + RNG rng = new RNG(seed); + ox = rng.nextInt(Short.MIN_VALUE, Short.MAX_VALUE); + oz = rng.nextInt(Short.MIN_VALUE, Short.MAX_VALUE); + } + + @Override + public double noise(double x) { + return base.noise(x + ox); + } + + @Override + public double noise(double x, double z) { + return base.noise(x + ox, z + oz); + } + + @Override + public double noise(double x, double y, double z) { + return base.noise(x + ox, y, z + oz); + } + + @Override + public boolean isNoScale() { + return base.isNoScale(); + } + + @Override + public boolean isStatic() { + return base.isStatic(); + } + + @NotNull + public NoiseGenerator getBase() { + return base; + } +} \ No newline at end of file