From b998ff535a866e56c9d264a2bf2f1bd7933edc4a Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 07:27:56 +0200 Subject: [PATCH 01/25] chore: - Extracted entry id hashing to hashOfId Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../generation/terrain/IrisDimensionCarvingEntry.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java b/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java index 6c7ff23e5..94b396eaf 100644 --- a/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java +++ b/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java @@ -81,8 +81,7 @@ public class IrisDimensionCarvingEntry { } public CNG getChildrenGenerator(long seed, IrisData data) { - String entryId = getId(); - long idHash = entryId == null ? 0L : entryId.trim().hashCode(); + long idHash = hashOfId(); long generatorSeed = seed ^ (idHash << 32) ^ 2137L; return childGenerators.computeIfAbsent(generatorSeed, key -> { double scale = Math.max(0.0001D, getChildShrinkFactor()); @@ -90,4 +89,9 @@ public class IrisDimensionCarvingEntry { return getChildStyle().create(random.nextParallelRNG(2137), data).bake().scale(scale).bake(); }); } + + private long hashOfId() { + String entryId = getId(); + return entryId == null ? 0L : entryId.trim().hashCode(); + } } From 658c6b0fdec59e96963688f6c91e26858c532310 Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 07:28:29 +0200 Subject: [PATCH 02/25] chore: - Extracted children generator seed derivation to deriveChildrenGeneratorSeed Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../generation/terrain/IrisDimensionCarvingEntry.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java b/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java index 94b396eaf..f60072c5a 100644 --- a/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java +++ b/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java @@ -81,15 +81,17 @@ public class IrisDimensionCarvingEntry { } public CNG getChildrenGenerator(long seed, IrisData data) { - long idHash = hashOfId(); - long generatorSeed = seed ^ (idHash << 32) ^ 2137L; - return childGenerators.computeIfAbsent(generatorSeed, key -> { + return childGenerators.computeIfAbsent(deriveChildrenGeneratorSeed(seed), key -> { double scale = Math.max(0.0001D, getChildShrinkFactor()); RNG random = new RNG(key); return getChildStyle().create(random.nextParallelRNG(2137), data).bake().scale(scale).bake(); }); } + long deriveChildrenGeneratorSeed(long worldSeed) { + return worldSeed ^ (hashOfId() << 32) ^ 2137L; + } + private long hashOfId() { String entryId = getId(); return entryId == null ? 0L : entryId.trim().hashCode(); From 53172c38ad9e36dc1ae902c7c66ae31523da9af2 Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 07:29:21 +0200 Subject: [PATCH 03/25] chore: - Extracted child style seed derivation to deriveChildStyleSeed Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../iris/generation/terrain/IrisDimensionCarvingEntry.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java b/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java index f60072c5a..e7e94db73 100644 --- a/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java +++ b/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java @@ -83,8 +83,7 @@ public class IrisDimensionCarvingEntry { public CNG getChildrenGenerator(long seed, IrisData data) { return childGenerators.computeIfAbsent(deriveChildrenGeneratorSeed(seed), key -> { double scale = Math.max(0.0001D, getChildShrinkFactor()); - RNG random = new RNG(key); - return getChildStyle().create(random.nextParallelRNG(2137), data).bake().scale(scale).bake(); + return getChildStyle().create(deriveChildStyleSeed(key), data).bake().scale(scale).bake(); }); } @@ -92,6 +91,10 @@ public class IrisDimensionCarvingEntry { return worldSeed ^ (hashOfId() << 32) ^ 2137L; } + static RNG deriveChildStyleSeed(long childrenGeneratorSeed) { + return new RNG(childrenGeneratorSeed).nextParallelRNG(2137); + } + private long hashOfId() { String entryId = getId(); return entryId == null ? 0L : entryId.trim().hashCode(); From 9e07009f1d9d7e41d5f4881054ede5f5e19402c2 Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 07:29:53 +0200 Subject: [PATCH 04/25] chore: - Extracted child shrink scaling to scaleByShrinkFactor Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../iris/generation/terrain/IrisDimensionCarvingEntry.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java b/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java index e7e94db73..41ca897ce 100644 --- a/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java +++ b/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java @@ -82,8 +82,7 @@ public class IrisDimensionCarvingEntry { public CNG getChildrenGenerator(long seed, IrisData data) { return childGenerators.computeIfAbsent(deriveChildrenGeneratorSeed(seed), key -> { - double scale = Math.max(0.0001D, getChildShrinkFactor()); - return getChildStyle().create(deriveChildStyleSeed(key), data).bake().scale(scale).bake(); + return scaleByShrinkFactor(getChildStyle().create(deriveChildStyleSeed(key), data)); }); } @@ -95,6 +94,10 @@ public class IrisDimensionCarvingEntry { return new RNG(childrenGeneratorSeed).nextParallelRNG(2137); } + private CNG scaleByShrinkFactor(CNG generator) { + return generator.bake().scale(Math.max(0.0001D, getChildShrinkFactor())).bake(); + } + private long hashOfId() { String entryId = getId(); return entryId == null ? 0L : entryId.trim().hashCode(); From ff74a6f811063f637c3836da9345d4c6bb4b0c75 Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 07:30:25 +0200 Subject: [PATCH 05/25] chore: - Extracted children generator construction to createChildrenGenerator Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../generation/terrain/IrisDimensionCarvingEntry.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java b/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java index 41ca897ce..52fbc2aff 100644 --- a/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java +++ b/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java @@ -81,9 +81,11 @@ public class IrisDimensionCarvingEntry { } public CNG getChildrenGenerator(long seed, IrisData data) { - return childGenerators.computeIfAbsent(deriveChildrenGeneratorSeed(seed), key -> { - return scaleByShrinkFactor(getChildStyle().create(deriveChildStyleSeed(key), data)); - }); + return childGenerators.computeIfAbsent(deriveChildrenGeneratorSeed(seed), key -> createChildrenGenerator(key, data)); + } + + private CNG createChildrenGenerator(long childrenGeneratorSeed, IrisData data) { + return scaleByShrinkFactor(getChildStyle().create(deriveChildStyleSeed(childrenGeneratorSeed), data)); } long deriveChildrenGeneratorSeed(long worldSeed) { From 1e25c07eac1b4573353114b3ed6a97277cfeb57e Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 07:31:17 +0200 Subject: [PATCH 06/25] test: - Added carving entry shared child style test, expected to fail until the fix Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../IrisDimensionCarvingEntryTest.java | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 core/src/test/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntryTest.java diff --git a/core/src/test/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntryTest.java b/core/src/test/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntryTest.java new file mode 100644 index 000000000..11f4afebb --- /dev/null +++ b/core/src/test/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntryTest.java @@ -0,0 +1,83 @@ +package art.arcane.iris.generation.terrain; + +import art.arcane.iris.generation.noise.IrisGeneratorStyle; +import art.arcane.iris.generation.noise.NoiseStyle; +import art.arcane.iris.generation.runtime.Engine; +import art.arcane.iris.pack.loading.IrisData; +import art.arcane.iris.testsupport.ExpectedToFailUntilFixed; +import art.arcane.iris.testsupport.ExpectedToFailUntilFixedRule; +import art.arcane.volmlib.util.math.RNG; +import art.arcane.volmlib.util.noise.CNG; +import org.junit.Rule; +import org.junit.Test; + +import java.util.Arrays; + +import static org.junit.Assert.assertArrayEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class IrisDimensionCarvingEntryTest { + private static final String SHARED_CHILD_STYLE_GENERATOR_BUG = + "IrisDimensionCarvingEntry scales the shared child style generator instead of its own. " + + "Ref.: https://github.com/VolmitSoftware/Iris/issues/1251"; + private static final long WORLD_SEED = 7L; + private static final String CARVING_ENTRY_ID = "deep-caves"; + private static final double CHILD_SHRINK_FACTOR = 4D; + private static final double[][] SAMPLE_BLOCKS = {{1000D, -2000D}, {12.5D, -7.25D}, {-517D, 333D}}; + + private final IrisData packData = createPackDataThatBelongsToOneRunningEngine(); + private final IrisDimensionCarvingEntry carvingEntry = createCarvingEntry(); + + @Rule + public final ExpectedToFailUntilFixedRule expectedFailures = new ExpectedToFailUntilFixedRule(); + + @ExpectedToFailUntilFixed(SHARED_CHILD_STYLE_GENERATOR_BUG) + @Test + public void doesBuildingTheChildrenGeneratorLeaveTheSharedChildStyleGeneratorUnscaled() { + assertArrayEquals(sampleUntouchedSharedChildStyleGenerator(), sampleSharedChildStyleGeneratorAfterChildrenGeneratorBuilt(), 0D); + } + + private double[] sampleSharedChildStyleGeneratorAfterChildrenGeneratorBuilt() { + carvingEntry.getChildrenGenerator(WORLD_SEED, packData); + return sampleSharedChildStyleGenerator(carvingEntry.getChildStyle()); + } + + private double[] sampleUntouchedSharedChildStyleGenerator() { + return sampleSharedChildStyleGenerator(createSimplexStyle()); + } + + private double[] sampleSharedChildStyleGenerator(IrisGeneratorStyle childStyle) { + return sampleAtBlocks(childStyle.create(deriveSharedChildStyleSeed(), packData)); + } + + private RNG deriveSharedChildStyleSeed() { + return IrisDimensionCarvingEntry.deriveChildStyleSeed(carvingEntry.deriveChildrenGeneratorSeed(WORLD_SEED)); + } + + private static double[] sampleAtBlocks(CNG generator) { + return Arrays.stream(SAMPLE_BLOCKS).mapToDouble(block -> generator.noise(block[0], block[1])).toArray(); + } + + private static IrisDimensionCarvingEntry createCarvingEntry() { + return withShrinkingSimplexChildStyle(new IrisDimensionCarvingEntry().setId(CARVING_ENTRY_ID)); + } + + private static IrisDimensionCarvingEntry withShrinkingSimplexChildStyle(IrisDimensionCarvingEntry carvingEntry) { + return carvingEntry.setChildStyle(createSimplexStyle()).setChildShrinkFactor(CHILD_SHRINK_FACTOR); + } + + private static IrisGeneratorStyle createSimplexStyle() { + return new IrisGeneratorStyle(NoiseStyle.SIMPLEX); + } + + private static IrisData createPackDataThatBelongsToOneRunningEngine() { + IrisData newPackData = mock(IrisData.class); + bindToNewRunningEngine(newPackData); + return newPackData; + } + + private static void bindToNewRunningEngine(IrisData packData) { + when(packData.getEngine()).thenReturn(mock(Engine.class)); + } +} From 5b5c1975c63d094785d890dea84ad02d321f0001 Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 12:06:49 +0200 Subject: [PATCH 07/25] chore: - Extracted generator sampling and running engine pack data to testsupport Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../terrain/ContinentGeneratorTest.java | 26 +++---------------- .../IrisDimensionCarvingEntryTest.java | 26 +++---------------- .../iris/testsupport/GeneratorSampling.java | 18 +++++++++++++ .../testsupport/RunningEnginePackData.java | 18 +++++++++++++ 4 files changed, 43 insertions(+), 45 deletions(-) create mode 100644 core/src/test/java/art/arcane/iris/testsupport/GeneratorSampling.java create mode 100644 core/src/test/java/art/arcane/iris/testsupport/RunningEnginePackData.java diff --git a/core/src/test/java/art/arcane/iris/generation/terrain/ContinentGeneratorTest.java b/core/src/test/java/art/arcane/iris/generation/terrain/ContinentGeneratorTest.java index 5b98f12c4..9ae188ef5 100644 --- a/core/src/test/java/art/arcane/iris/generation/terrain/ContinentGeneratorTest.java +++ b/core/src/test/java/art/arcane/iris/generation/terrain/ContinentGeneratorTest.java @@ -2,17 +2,15 @@ package art.arcane.iris.generation.terrain; import art.arcane.iris.generation.noise.IrisGeneratorStyle; import art.arcane.iris.generation.noise.NoiseStyle; -import art.arcane.iris.generation.runtime.Engine; import art.arcane.iris.pack.loading.IrisData; +import art.arcane.iris.testsupport.RunningEnginePackData; import art.arcane.volmlib.util.math.RNG; -import art.arcane.volmlib.util.noise.CNG; import org.junit.Test; import java.util.Arrays; +import static art.arcane.iris.testsupport.GeneratorSampling.sampleAtBlocks; import static org.junit.Assert.assertArrayEquals; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; public class ContinentGeneratorTest { private static final long WORLD_SEED = 7L; @@ -24,7 +22,7 @@ public class ContinentGeneratorTest { private static final double[] CONTINENT_MAP_OF_EXISTING_WORLDS = {0.21889892332042843D, 0.6984934456740721D, 0.2708759584352327D}; - private final IrisData packData = createPackDataThatBelongsToOneRunningEngine(); + private final IrisData packData = RunningEnginePackData.create(); private final IrisDimension baseZoomDimension = createDimensionWithContinentZoom(POWER_OF_TWO_CONTINENT_ZOOM); private final IrisDimension squaredZoomDimension = createDimensionWithContinentZoom(SQUARED_CONTINENT_ZOOM); private final IrisDimension overworldStyleDimension = createDimensionWithOverworldContinentalStyle(); @@ -99,14 +97,6 @@ public class ContinentGeneratorTest { return sampleAtBlocks(ContinentGenerator.create(dimension, new RNG(WORLD_SEED), packData), blocks); } - private static double[] sampleAtBlocks(CNG continentGenerator, double[][] blocks) { - return Arrays.stream(blocks).mapToDouble(block -> sampleAt(continentGenerator, block)).toArray(); - } - - private static double sampleAt(CNG continentGenerator, double[] block) { - return continentGenerator.noise(block[0], block[1]); - } - private static double[][] shrinkByContinentZoom(double[][] blocks) { return Arrays.stream(blocks).map(block -> shrinkByContinentZoom(block)).toArray(double[][]::new); } @@ -134,14 +124,4 @@ public class ContinentGeneratorTest { private static IrisGeneratorStyle createSmokeFracture() { return new IrisGeneratorStyle(NoiseStyle.FRACTAL_SMOKE).setFracture(new IrisGeneratorStyle(NoiseStyle.STATIC)); } - - private static IrisData createPackDataThatBelongsToOneRunningEngine() { - IrisData newPackData = mock(IrisData.class); - bindToNewRunningEngine(newPackData); - return newPackData; - } - - private static void bindToNewRunningEngine(IrisData packData) { - when(packData.getEngine()).thenReturn(mock(Engine.class)); - } } diff --git a/core/src/test/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntryTest.java b/core/src/test/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntryTest.java index 11f4afebb..fc51f6ab9 100644 --- a/core/src/test/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntryTest.java +++ b/core/src/test/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntryTest.java @@ -2,20 +2,16 @@ package art.arcane.iris.generation.terrain; import art.arcane.iris.generation.noise.IrisGeneratorStyle; import art.arcane.iris.generation.noise.NoiseStyle; -import art.arcane.iris.generation.runtime.Engine; import art.arcane.iris.pack.loading.IrisData; import art.arcane.iris.testsupport.ExpectedToFailUntilFixed; import art.arcane.iris.testsupport.ExpectedToFailUntilFixedRule; +import art.arcane.iris.testsupport.RunningEnginePackData; import art.arcane.volmlib.util.math.RNG; -import art.arcane.volmlib.util.noise.CNG; import org.junit.Rule; import org.junit.Test; -import java.util.Arrays; - +import static art.arcane.iris.testsupport.GeneratorSampling.sampleAtBlocks; import static org.junit.Assert.assertArrayEquals; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; public class IrisDimensionCarvingEntryTest { private static final String SHARED_CHILD_STYLE_GENERATOR_BUG = @@ -26,7 +22,7 @@ public class IrisDimensionCarvingEntryTest { private static final double CHILD_SHRINK_FACTOR = 4D; private static final double[][] SAMPLE_BLOCKS = {{1000D, -2000D}, {12.5D, -7.25D}, {-517D, 333D}}; - private final IrisData packData = createPackDataThatBelongsToOneRunningEngine(); + private final IrisData packData = RunningEnginePackData.create(); private final IrisDimensionCarvingEntry carvingEntry = createCarvingEntry(); @Rule @@ -48,17 +44,13 @@ public class IrisDimensionCarvingEntryTest { } private double[] sampleSharedChildStyleGenerator(IrisGeneratorStyle childStyle) { - return sampleAtBlocks(childStyle.create(deriveSharedChildStyleSeed(), packData)); + return sampleAtBlocks(childStyle.create(deriveSharedChildStyleSeed(), packData), SAMPLE_BLOCKS); } private RNG deriveSharedChildStyleSeed() { return IrisDimensionCarvingEntry.deriveChildStyleSeed(carvingEntry.deriveChildrenGeneratorSeed(WORLD_SEED)); } - private static double[] sampleAtBlocks(CNG generator) { - return Arrays.stream(SAMPLE_BLOCKS).mapToDouble(block -> generator.noise(block[0], block[1])).toArray(); - } - private static IrisDimensionCarvingEntry createCarvingEntry() { return withShrinkingSimplexChildStyle(new IrisDimensionCarvingEntry().setId(CARVING_ENTRY_ID)); } @@ -70,14 +62,4 @@ public class IrisDimensionCarvingEntryTest { private static IrisGeneratorStyle createSimplexStyle() { return new IrisGeneratorStyle(NoiseStyle.SIMPLEX); } - - private static IrisData createPackDataThatBelongsToOneRunningEngine() { - IrisData newPackData = mock(IrisData.class); - bindToNewRunningEngine(newPackData); - return newPackData; - } - - private static void bindToNewRunningEngine(IrisData packData) { - when(packData.getEngine()).thenReturn(mock(Engine.class)); - } } diff --git a/core/src/test/java/art/arcane/iris/testsupport/GeneratorSampling.java b/core/src/test/java/art/arcane/iris/testsupport/GeneratorSampling.java new file mode 100644 index 000000000..d83bf5585 --- /dev/null +++ b/core/src/test/java/art/arcane/iris/testsupport/GeneratorSampling.java @@ -0,0 +1,18 @@ +package art.arcane.iris.testsupport; + +import art.arcane.volmlib.util.noise.CNG; + +import java.util.Arrays; + +public final class GeneratorSampling { + private GeneratorSampling() { + } + + public static double[] sampleAtBlocks(CNG generator, double[][] blocks) { + return Arrays.stream(blocks).mapToDouble(block -> sampleAt(generator, block)).toArray(); + } + + private static double sampleAt(CNG generator, double[] block) { + return generator.noise(block[0], block[1]); + } +} diff --git a/core/src/test/java/art/arcane/iris/testsupport/RunningEnginePackData.java b/core/src/test/java/art/arcane/iris/testsupport/RunningEnginePackData.java new file mode 100644 index 000000000..e6bbefd8e --- /dev/null +++ b/core/src/test/java/art/arcane/iris/testsupport/RunningEnginePackData.java @@ -0,0 +1,18 @@ +package art.arcane.iris.testsupport; + +import art.arcane.iris.generation.runtime.Engine; +import art.arcane.iris.pack.loading.IrisData; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public final class RunningEnginePackData { + private RunningEnginePackData() { + } + + public static IrisData create() { + IrisData packData = mock(IrisData.class); + when(packData.getEngine()).thenReturn(mock(Engine.class)); + return packData; + } +} From ffc409a4ace1d4117c71bbf67dbe0a6cf302a04f Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 12:08:07 +0200 Subject: [PATCH 08/25] chore: - Extracted magic value 2137 to CHILDREN_SEED_SALT Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../iris/generation/terrain/IrisDimensionCarvingEntry.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java b/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java index 52fbc2aff..d2c1472ee 100644 --- a/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java +++ b/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java @@ -31,6 +31,7 @@ import java.util.concurrent.ConcurrentHashMap; @Description("Dimension-level cave biome override with absolute world Y bounds.") @Data public class IrisDimensionCarvingEntry { + private static final int CHILDREN_SEED_SALT = 2137; private final transient AtomicCache realBiome = new AtomicCache<>(true); private final transient Map childGenerators = new ConcurrentHashMap<>(); @@ -89,11 +90,11 @@ public class IrisDimensionCarvingEntry { } long deriveChildrenGeneratorSeed(long worldSeed) { - return worldSeed ^ (hashOfId() << 32) ^ 2137L; + return worldSeed ^ (hashOfId() << 32) ^ CHILDREN_SEED_SALT; } static RNG deriveChildStyleSeed(long childrenGeneratorSeed) { - return new RNG(childrenGeneratorSeed).nextParallelRNG(2137); + return new RNG(childrenGeneratorSeed).nextParallelRNG(CHILDREN_SEED_SALT); } private CNG scaleByShrinkFactor(CNG generator) { From 8f8a3b2355c7a0a7da8e9894a101d23d709d649a Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 12:08:42 +0200 Subject: [PATCH 09/25] chore: - Extracted magic value 0.0001 to MINIMUM_CHILD_SHRINK_FACTOR Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../iris/generation/terrain/IrisDimensionCarvingEntry.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java b/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java index d2c1472ee..cee7da319 100644 --- a/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java +++ b/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java @@ -32,6 +32,7 @@ import java.util.concurrent.ConcurrentHashMap; @Data public class IrisDimensionCarvingEntry { private static final int CHILDREN_SEED_SALT = 2137; + private static final double MINIMUM_CHILD_SHRINK_FACTOR = 0.0001D; private final transient AtomicCache realBiome = new AtomicCache<>(true); private final transient Map childGenerators = new ConcurrentHashMap<>(); @@ -98,7 +99,7 @@ public class IrisDimensionCarvingEntry { } private CNG scaleByShrinkFactor(CNG generator) { - return generator.bake().scale(Math.max(0.0001D, getChildShrinkFactor())).bake(); + return generator.bake().scale(Math.max(MINIMUM_CHILD_SHRINK_FACTOR, getChildShrinkFactor())).bake(); } private long hashOfId() { From cf7ebcece11cf1d198fa0936884fdbac4daad6d3 Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 12:09:35 +0200 Subject: [PATCH 10/25] chore: - Extracted child style seed derivation to deriveChildStyleSeed Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../java/art/arcane/iris/generation/biome/IrisBiome.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/art/arcane/iris/generation/biome/IrisBiome.java b/core/src/main/java/art/arcane/iris/generation/biome/IrisBiome.java index b1b448b9a..5acf20bc6 100644 --- a/core/src/main/java/art/arcane/iris/generation/biome/IrisBiome.java +++ b/core/src/main/java/art/arcane/iris/generation/biome/IrisBiome.java @@ -511,7 +511,11 @@ public class IrisBiome extends IrisRegistrant implements Rarity { } public CNG getChildrenGenerator(RNG random, int sig, double scale) { - return childrenCell.aquire(() -> getChildStyle().create(random.nextParallelRNG(sig * 2137), getLoader()).bake().scale(scale).bake()); + return childrenCell.aquire(() -> getChildStyle().create(deriveChildStyleSeed(random, sig), getLoader()).bake().scale(scale).bake()); + } + + static RNG deriveChildStyleSeed(RNG random, int signature) { + return random.nextParallelRNG(signature * 2137); } public KList generateLayers(IrisDimension dim, double wx, double wz, RNG random, int maxDepth, int height, IrisData rdata, IrisComplex complex) { From 0d16f8e57f86104075d38d382da43f1f33090ff3 Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 12:10:10 +0200 Subject: [PATCH 11/25] chore: - Extracted magic value 2137 to CHILDREN_SEED_SALT Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../main/java/art/arcane/iris/generation/biome/IrisBiome.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/art/arcane/iris/generation/biome/IrisBiome.java b/core/src/main/java/art/arcane/iris/generation/biome/IrisBiome.java index 5acf20bc6..c320e175e 100644 --- a/core/src/main/java/art/arcane/iris/generation/biome/IrisBiome.java +++ b/core/src/main/java/art/arcane/iris/generation/biome/IrisBiome.java @@ -93,6 +93,7 @@ import java.util.Objects; @EqualsAndHashCode(callSuper = false) public class IrisBiome extends IrisRegistrant implements Rarity { private static final int BIOME_GENERATOR_CACHE_SIZE = 8; + private static final int CHILDREN_SEED_SALT = 2137; private final transient AtomicCache> genCache = new AtomicCache<>(); private final transient AtomicCache> genCacheMax = new AtomicCache<>(); @@ -515,7 +516,7 @@ public class IrisBiome extends IrisRegistrant implements Rarity { } static RNG deriveChildStyleSeed(RNG random, int signature) { - return random.nextParallelRNG(signature * 2137); + return random.nextParallelRNG(signature * CHILDREN_SEED_SALT); } public KList generateLayers(IrisDimension dim, double wx, double wz, RNG random, int maxDepth, int height, IrisData rdata, IrisComplex complex) { From 5c4f7bb5217903bea331138fb2695a364b33d118 Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 12:10:44 +0200 Subject: [PATCH 12/25] chore: - Extracted children generator construction to createChildrenGenerator Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../java/art/arcane/iris/generation/biome/IrisBiome.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/art/arcane/iris/generation/biome/IrisBiome.java b/core/src/main/java/art/arcane/iris/generation/biome/IrisBiome.java index c320e175e..33565e95e 100644 --- a/core/src/main/java/art/arcane/iris/generation/biome/IrisBiome.java +++ b/core/src/main/java/art/arcane/iris/generation/biome/IrisBiome.java @@ -512,7 +512,11 @@ public class IrisBiome extends IrisRegistrant implements Rarity { } public CNG getChildrenGenerator(RNG random, int sig, double scale) { - return childrenCell.aquire(() -> getChildStyle().create(deriveChildStyleSeed(random, sig), getLoader()).bake().scale(scale).bake()); + return childrenCell.aquire(() -> createChildrenGenerator(random, sig, scale)); + } + + private CNG createChildrenGenerator(RNG random, int sig, double scale) { + return getChildStyle().create(deriveChildStyleSeed(random, sig), getLoader()).bake().scale(scale).bake(); } static RNG deriveChildStyleSeed(RNG random, int signature) { From 7981fa3ce5039605ab6e6f38aa7f8b7ee16df30f Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 12:11:17 +0200 Subject: [PATCH 13/25] test: - Added biome shared child style test, expected to fail until the fix Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../biome/IrisBiomeChildrenGeneratorTest.java | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 core/src/test/java/art/arcane/iris/generation/biome/IrisBiomeChildrenGeneratorTest.java diff --git a/core/src/test/java/art/arcane/iris/generation/biome/IrisBiomeChildrenGeneratorTest.java b/core/src/test/java/art/arcane/iris/generation/biome/IrisBiomeChildrenGeneratorTest.java new file mode 100644 index 000000000..68dc8b086 --- /dev/null +++ b/core/src/test/java/art/arcane/iris/generation/biome/IrisBiomeChildrenGeneratorTest.java @@ -0,0 +1,67 @@ +package art.arcane.iris.generation.biome; + +import art.arcane.iris.generation.noise.IrisGeneratorStyle; +import art.arcane.iris.generation.noise.NoiseStyle; +import art.arcane.iris.pack.loading.IrisData; +import art.arcane.iris.testsupport.ExpectedToFailUntilFixed; +import art.arcane.iris.testsupport.ExpectedToFailUntilFixedRule; +import art.arcane.iris.testsupport.RunningEnginePackData; +import art.arcane.volmlib.util.math.RNG; +import org.junit.Rule; +import org.junit.Test; + +import static art.arcane.iris.testsupport.GeneratorSampling.sampleAtBlocks; +import static org.junit.Assert.assertArrayEquals; + +public class IrisBiomeChildrenGeneratorTest { + private static final String SHARED_CHILD_STYLE_GENERATOR_BUG = + "IrisBiome scales the shared child style generator instead of its own. " + + "Ref.: https://github.com/VolmitSoftware/Iris/issues/1251"; + private static final long WORLD_SEED = 7L; + private static final int CHILDREN_SIGNATURE = 123; + private static final double CHILD_SHRINK_FACTOR = 4D; + private static final double[][] SAMPLE_BLOCKS = {{1000D, -2000D}, {12.5D, -7.25D}, {-517D, 333D}}; + + private final IrisData packData = RunningEnginePackData.create(); + private final IrisBiome biome = createBiomeWithSimplexChildStyle(packData); + + @Rule + public final ExpectedToFailUntilFixedRule expectedFailures = new ExpectedToFailUntilFixedRule(); + + @ExpectedToFailUntilFixed(SHARED_CHILD_STYLE_GENERATOR_BUG) + @Test + public void doesBuildingTheChildrenGeneratorLeaveTheSharedChildStyleGeneratorUnscaled() { + assertArrayEquals(sampleUntouchedSharedChildStyleGenerator(), sampleSharedChildStyleGeneratorAfterChildrenGeneratorBuilt(), 0D); + } + + private double[] sampleSharedChildStyleGeneratorAfterChildrenGeneratorBuilt() { + buildChildrenGenerator(); + return sampleSharedChildStyleGenerator(biome.getChildStyle()); + } + + private void buildChildrenGenerator() { + biome.getChildrenGenerator(new RNG(WORLD_SEED), CHILDREN_SIGNATURE, CHILD_SHRINK_FACTOR); + } + + private double[] sampleUntouchedSharedChildStyleGenerator() { + return sampleSharedChildStyleGenerator(createSimplexStyle()); + } + + private double[] sampleSharedChildStyleGenerator(IrisGeneratorStyle childStyle) { + return sampleAtBlocks(childStyle.create(deriveSharedChildStyleSeed(), packData), SAMPLE_BLOCKS); + } + + private static RNG deriveSharedChildStyleSeed() { + return IrisBiome.deriveChildStyleSeed(new RNG(WORLD_SEED), CHILDREN_SIGNATURE); + } + + private static IrisBiome createBiomeWithSimplexChildStyle(IrisData packData) { + IrisBiome biome = new IrisBiome().setChildStyle(createSimplexStyle()); + biome.setLoader(packData); + return biome; + } + + private static IrisGeneratorStyle createSimplexStyle() { + return new IrisGeneratorStyle(NoiseStyle.SIMPLEX); + } +} From 077b48f47f3c02cc4d5bada2cdaced5d4888f687 Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 12:13:48 +0200 Subject: [PATCH 14/25] chore: - Extracted variance seed derivation to deriveVarianceSeed Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../arcane/iris/generation/decoration/IrisDecorator.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/art/arcane/iris/generation/decoration/IrisDecorator.java b/core/src/main/java/art/arcane/iris/generation/decoration/IrisDecorator.java index 3cfdfac5a..cadcc10ed 100644 --- a/core/src/main/java/art/arcane/iris/generation/decoration/IrisDecorator.java +++ b/core/src/main/java/art/arcane/iris/generation/decoration/IrisDecorator.java @@ -158,10 +158,14 @@ public class IrisDecorator { return varianceGenerator.aquire(() -> variance.create( - rng.nextParallelRNG(getBlockData(data).size()), data) + deriveVarianceSeed(rng, data), data) .scale(1D / variance.getZoom())); } + RNG deriveVarianceSeed(RNG rng, IrisData data) { + return rng.nextParallelRNG(getBlockData(data).size()); + } + public KList add(String b) { palette.add(new IrisBlockData(b)); return palette; From 2078bece40bec0884594903a7ff1b24a7b8ee19d Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 12:14:23 +0200 Subject: [PATCH 15/25] chore: - Extracted variance generator construction to createVarianceGenerator Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../arcane/iris/generation/decoration/IrisDecorator.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/art/arcane/iris/generation/decoration/IrisDecorator.java b/core/src/main/java/art/arcane/iris/generation/decoration/IrisDecorator.java index cadcc10ed..2cec00d97 100644 --- a/core/src/main/java/art/arcane/iris/generation/decoration/IrisDecorator.java +++ b/core/src/main/java/art/arcane/iris/generation/decoration/IrisDecorator.java @@ -156,10 +156,11 @@ public class IrisDecorator { return cached; } - return varianceGenerator.aquire(() -> - variance.create( - deriveVarianceSeed(rng, data), data) - .scale(1D / variance.getZoom())); + return varianceGenerator.aquire(() -> createVarianceGenerator(rng, data)); + } + + private CNG createVarianceGenerator(RNG rng, IrisData data) { + return variance.create(deriveVarianceSeed(rng, data), data).scale(1D / variance.getZoom()); } RNG deriveVarianceSeed(RNG rng, IrisData data) { From 5fa6d82b79550ef4d971d3f610cd4d5a853e4511 Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 12:14:58 +0200 Subject: [PATCH 16/25] chore: - Extracted first variance generator build to buildVarianceGeneratorOnce Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../arcane/iris/generation/decoration/IrisDecorator.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/art/arcane/iris/generation/decoration/IrisDecorator.java b/core/src/main/java/art/arcane/iris/generation/decoration/IrisDecorator.java index 2cec00d97..32fa759ca 100644 --- a/core/src/main/java/art/arcane/iris/generation/decoration/IrisDecorator.java +++ b/core/src/main/java/art/arcane/iris/generation/decoration/IrisDecorator.java @@ -151,11 +151,10 @@ public class IrisDecorator { public CNG getVarianceGenerator(RNG rng, IrisData data) { CNG cached = varianceGenerator.getIfPresent(); + return cached != null ? cached : buildVarianceGeneratorOnce(rng, data); + } - if (cached != null) { - return cached; - } - + private CNG buildVarianceGeneratorOnce(RNG rng, IrisData data) { return varianceGenerator.aquire(() -> createVarianceGenerator(rng, data)); } From 92310ef839374288d0d9fd2464c4a3a2f5d4b1e5 Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 12:15:33 +0200 Subject: [PATCH 17/25] test: - Added decorator shared variance style test, expected to fail until the fix Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../IrisDecoratorVarianceGeneratorTest.java | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 core/src/test/java/art/arcane/iris/generation/decoration/IrisDecoratorVarianceGeneratorTest.java diff --git a/core/src/test/java/art/arcane/iris/generation/decoration/IrisDecoratorVarianceGeneratorTest.java b/core/src/test/java/art/arcane/iris/generation/decoration/IrisDecoratorVarianceGeneratorTest.java new file mode 100644 index 000000000..64654aa0f --- /dev/null +++ b/core/src/test/java/art/arcane/iris/generation/decoration/IrisDecoratorVarianceGeneratorTest.java @@ -0,0 +1,58 @@ +package art.arcane.iris.generation.decoration; + +import art.arcane.iris.generation.block.IrisBlockData; +import art.arcane.iris.generation.noise.IrisGeneratorStyle; +import art.arcane.iris.generation.noise.NoiseStyle; +import art.arcane.iris.pack.loading.IrisData; +import art.arcane.iris.testsupport.ExpectedToFailUntilFixed; +import art.arcane.iris.testsupport.ExpectedToFailUntilFixedRule; +import art.arcane.iris.testsupport.RunningEnginePackData; +import art.arcane.volmlib.util.collection.KList; +import art.arcane.volmlib.util.math.RNG; +import org.junit.Rule; +import org.junit.Test; + +import static art.arcane.iris.testsupport.GeneratorSampling.sampleAtBlocks; +import static org.junit.Assert.assertArrayEquals; + +public class IrisDecoratorVarianceGeneratorTest { + private static final String SHARED_VARIANCE_STYLE_GENERATOR_BUG = + "IrisDecorator scales the shared variance style generator instead of its own. " + + "Ref.: https://github.com/VolmitSoftware/Iris/issues/1251"; + private static final long WORLD_SEED = 7L; + private static final double VARIANCE_ZOOM = 4D; + private static final double[][] SAMPLE_BLOCKS = {{1000D, -2000D}, {12.5D, -7.25D}, {-517D, 333D}}; + + private final IrisData packData = RunningEnginePackData.create(); + private final IrisDecorator decorator = createDecoratorWithZoomedSimplexVariance(); + + @Rule + public final ExpectedToFailUntilFixedRule expectedFailures = new ExpectedToFailUntilFixedRule(); + + @ExpectedToFailUntilFixed(SHARED_VARIANCE_STYLE_GENERATOR_BUG) + @Test + public void doesBuildingTheVarianceGeneratorLeaveTheSharedVarianceStyleGeneratorUnscaled() { + assertArrayEquals(sampleUntouchedSharedVarianceStyleGenerator(), sampleSharedVarianceStyleGeneratorAfterVarianceBuilt(), 0D); + } + + private double[] sampleSharedVarianceStyleGeneratorAfterVarianceBuilt() { + decorator.getVarianceGenerator(new RNG(WORLD_SEED), packData); + return sampleSharedVarianceStyleGenerator(decorator.getVariance()); + } + + private double[] sampleUntouchedSharedVarianceStyleGenerator() { + return sampleSharedVarianceStyleGenerator(createZoomedSimplexStyle()); + } + + private double[] sampleSharedVarianceStyleGenerator(IrisGeneratorStyle varianceStyle) { + return sampleAtBlocks(varianceStyle.create(decorator.deriveVarianceSeed(new RNG(WORLD_SEED), packData), packData), SAMPLE_BLOCKS); + } + + private static IrisDecorator createDecoratorWithZoomedSimplexVariance() { + return new IrisDecorator().setPalette(new KList()).setVariance(createZoomedSimplexStyle()); + } + + private static IrisGeneratorStyle createZoomedSimplexStyle() { + return new IrisGeneratorStyle(NoiseStyle.SIMPLEX).setZoom(VARIANCE_ZOOM); + } +} From 0faae930490233c928b38030881089fc6e10a10d Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 12:16:41 +0200 Subject: [PATCH 18/25] fix: - Replaced IrisGeneratorStyle.create with createNoCache in IrisDimensionCarvingEntry - Removed @ExpectedToFailUntilFixed from the IrisDimensionCarvingEntry test Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../generation/terrain/IrisDimensionCarvingEntry.java | 2 +- .../terrain/IrisDimensionCarvingEntryTest.java | 10 ---------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java b/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java index cee7da319..782cba9d5 100644 --- a/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java +++ b/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java @@ -87,7 +87,7 @@ public class IrisDimensionCarvingEntry { } private CNG createChildrenGenerator(long childrenGeneratorSeed, IrisData data) { - return scaleByShrinkFactor(getChildStyle().create(deriveChildStyleSeed(childrenGeneratorSeed), data)); + return scaleByShrinkFactor(getChildStyle().createNoCache(deriveChildStyleSeed(childrenGeneratorSeed), data)); } long deriveChildrenGeneratorSeed(long worldSeed) { diff --git a/core/src/test/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntryTest.java b/core/src/test/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntryTest.java index fc51f6ab9..079ef46c4 100644 --- a/core/src/test/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntryTest.java +++ b/core/src/test/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntryTest.java @@ -3,20 +3,14 @@ package art.arcane.iris.generation.terrain; import art.arcane.iris.generation.noise.IrisGeneratorStyle; import art.arcane.iris.generation.noise.NoiseStyle; import art.arcane.iris.pack.loading.IrisData; -import art.arcane.iris.testsupport.ExpectedToFailUntilFixed; -import art.arcane.iris.testsupport.ExpectedToFailUntilFixedRule; import art.arcane.iris.testsupport.RunningEnginePackData; import art.arcane.volmlib.util.math.RNG; -import org.junit.Rule; import org.junit.Test; import static art.arcane.iris.testsupport.GeneratorSampling.sampleAtBlocks; import static org.junit.Assert.assertArrayEquals; public class IrisDimensionCarvingEntryTest { - private static final String SHARED_CHILD_STYLE_GENERATOR_BUG = - "IrisDimensionCarvingEntry scales the shared child style generator instead of its own. " - + "Ref.: https://github.com/VolmitSoftware/Iris/issues/1251"; private static final long WORLD_SEED = 7L; private static final String CARVING_ENTRY_ID = "deep-caves"; private static final double CHILD_SHRINK_FACTOR = 4D; @@ -25,10 +19,6 @@ public class IrisDimensionCarvingEntryTest { private final IrisData packData = RunningEnginePackData.create(); private final IrisDimensionCarvingEntry carvingEntry = createCarvingEntry(); - @Rule - public final ExpectedToFailUntilFixedRule expectedFailures = new ExpectedToFailUntilFixedRule(); - - @ExpectedToFailUntilFixed(SHARED_CHILD_STYLE_GENERATOR_BUG) @Test public void doesBuildingTheChildrenGeneratorLeaveTheSharedChildStyleGeneratorUnscaled() { assertArrayEquals(sampleUntouchedSharedChildStyleGenerator(), sampleSharedChildStyleGeneratorAfterChildrenGeneratorBuilt(), 0D); From 700dc535599638c6f383802eabfff454c999a814 Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 12:17:19 +0200 Subject: [PATCH 19/25] fix: - Replaced IrisGeneratorStyle.create with createNoCache in IrisBiome - Removed @ExpectedToFailUntilFixed from the IrisBiome test Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../art/arcane/iris/generation/biome/IrisBiome.java | 2 +- .../biome/IrisBiomeChildrenGeneratorTest.java | 10 ---------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/core/src/main/java/art/arcane/iris/generation/biome/IrisBiome.java b/core/src/main/java/art/arcane/iris/generation/biome/IrisBiome.java index 33565e95e..5783ab4e4 100644 --- a/core/src/main/java/art/arcane/iris/generation/biome/IrisBiome.java +++ b/core/src/main/java/art/arcane/iris/generation/biome/IrisBiome.java @@ -516,7 +516,7 @@ public class IrisBiome extends IrisRegistrant implements Rarity { } private CNG createChildrenGenerator(RNG random, int sig, double scale) { - return getChildStyle().create(deriveChildStyleSeed(random, sig), getLoader()).bake().scale(scale).bake(); + return getChildStyle().createNoCache(deriveChildStyleSeed(random, sig), getLoader()).bake().scale(scale).bake(); } static RNG deriveChildStyleSeed(RNG random, int signature) { diff --git a/core/src/test/java/art/arcane/iris/generation/biome/IrisBiomeChildrenGeneratorTest.java b/core/src/test/java/art/arcane/iris/generation/biome/IrisBiomeChildrenGeneratorTest.java index 68dc8b086..f7f1202fd 100644 --- a/core/src/test/java/art/arcane/iris/generation/biome/IrisBiomeChildrenGeneratorTest.java +++ b/core/src/test/java/art/arcane/iris/generation/biome/IrisBiomeChildrenGeneratorTest.java @@ -3,20 +3,14 @@ package art.arcane.iris.generation.biome; import art.arcane.iris.generation.noise.IrisGeneratorStyle; import art.arcane.iris.generation.noise.NoiseStyle; import art.arcane.iris.pack.loading.IrisData; -import art.arcane.iris.testsupport.ExpectedToFailUntilFixed; -import art.arcane.iris.testsupport.ExpectedToFailUntilFixedRule; import art.arcane.iris.testsupport.RunningEnginePackData; import art.arcane.volmlib.util.math.RNG; -import org.junit.Rule; import org.junit.Test; import static art.arcane.iris.testsupport.GeneratorSampling.sampleAtBlocks; import static org.junit.Assert.assertArrayEquals; public class IrisBiomeChildrenGeneratorTest { - private static final String SHARED_CHILD_STYLE_GENERATOR_BUG = - "IrisBiome scales the shared child style generator instead of its own. " - + "Ref.: https://github.com/VolmitSoftware/Iris/issues/1251"; private static final long WORLD_SEED = 7L; private static final int CHILDREN_SIGNATURE = 123; private static final double CHILD_SHRINK_FACTOR = 4D; @@ -25,10 +19,6 @@ public class IrisBiomeChildrenGeneratorTest { private final IrisData packData = RunningEnginePackData.create(); private final IrisBiome biome = createBiomeWithSimplexChildStyle(packData); - @Rule - public final ExpectedToFailUntilFixedRule expectedFailures = new ExpectedToFailUntilFixedRule(); - - @ExpectedToFailUntilFixed(SHARED_CHILD_STYLE_GENERATOR_BUG) @Test public void doesBuildingTheChildrenGeneratorLeaveTheSharedChildStyleGeneratorUnscaled() { assertArrayEquals(sampleUntouchedSharedChildStyleGenerator(), sampleSharedChildStyleGeneratorAfterChildrenGeneratorBuilt(), 0D); From 00601678d9d7094b7dfcd0cf50f573aa2b3ce121 Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 12:17:57 +0200 Subject: [PATCH 20/25] fix: - Replaced IrisGeneratorStyle.create with createNoCache in IrisDecorator - Removed @ExpectedToFailUntilFixed from the IrisDecorator test Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../iris/generation/decoration/IrisDecorator.java | 2 +- .../decoration/IrisDecoratorVarianceGeneratorTest.java | 10 ---------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/core/src/main/java/art/arcane/iris/generation/decoration/IrisDecorator.java b/core/src/main/java/art/arcane/iris/generation/decoration/IrisDecorator.java index 32fa759ca..a0e8fc629 100644 --- a/core/src/main/java/art/arcane/iris/generation/decoration/IrisDecorator.java +++ b/core/src/main/java/art/arcane/iris/generation/decoration/IrisDecorator.java @@ -159,7 +159,7 @@ public class IrisDecorator { } private CNG createVarianceGenerator(RNG rng, IrisData data) { - return variance.create(deriveVarianceSeed(rng, data), data).scale(1D / variance.getZoom()); + return variance.createNoCache(deriveVarianceSeed(rng, data), data).scale(1D / variance.getZoom()); } RNG deriveVarianceSeed(RNG rng, IrisData data) { diff --git a/core/src/test/java/art/arcane/iris/generation/decoration/IrisDecoratorVarianceGeneratorTest.java b/core/src/test/java/art/arcane/iris/generation/decoration/IrisDecoratorVarianceGeneratorTest.java index 64654aa0f..dd09c3544 100644 --- a/core/src/test/java/art/arcane/iris/generation/decoration/IrisDecoratorVarianceGeneratorTest.java +++ b/core/src/test/java/art/arcane/iris/generation/decoration/IrisDecoratorVarianceGeneratorTest.java @@ -4,21 +4,15 @@ import art.arcane.iris.generation.block.IrisBlockData; import art.arcane.iris.generation.noise.IrisGeneratorStyle; import art.arcane.iris.generation.noise.NoiseStyle; import art.arcane.iris.pack.loading.IrisData; -import art.arcane.iris.testsupport.ExpectedToFailUntilFixed; -import art.arcane.iris.testsupport.ExpectedToFailUntilFixedRule; import art.arcane.iris.testsupport.RunningEnginePackData; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.math.RNG; -import org.junit.Rule; import org.junit.Test; import static art.arcane.iris.testsupport.GeneratorSampling.sampleAtBlocks; import static org.junit.Assert.assertArrayEquals; public class IrisDecoratorVarianceGeneratorTest { - private static final String SHARED_VARIANCE_STYLE_GENERATOR_BUG = - "IrisDecorator scales the shared variance style generator instead of its own. " - + "Ref.: https://github.com/VolmitSoftware/Iris/issues/1251"; private static final long WORLD_SEED = 7L; private static final double VARIANCE_ZOOM = 4D; private static final double[][] SAMPLE_BLOCKS = {{1000D, -2000D}, {12.5D, -7.25D}, {-517D, 333D}}; @@ -26,10 +20,6 @@ public class IrisDecoratorVarianceGeneratorTest { private final IrisData packData = RunningEnginePackData.create(); private final IrisDecorator decorator = createDecoratorWithZoomedSimplexVariance(); - @Rule - public final ExpectedToFailUntilFixedRule expectedFailures = new ExpectedToFailUntilFixedRule(); - - @ExpectedToFailUntilFixed(SHARED_VARIANCE_STYLE_GENERATOR_BUG) @Test public void doesBuildingTheVarianceGeneratorLeaveTheSharedVarianceStyleGeneratorUnscaled() { assertArrayEquals(sampleUntouchedSharedVarianceStyleGenerator(), sampleSharedVarianceStyleGeneratorAfterVarianceBuilt(), 0D); From 1544c34f442b568bd94771349713c0b4d513c470 Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 12:33:17 +0200 Subject: [PATCH 21/25] chore: - Moved continent zoom scaling to IrisGeneratorStyle.createScaledGenerator Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../iris/generation/noise/IrisGeneratorStyle.java | 4 ++++ .../iris/generation/terrain/ContinentGenerator.java | 10 +++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/art/arcane/iris/generation/noise/IrisGeneratorStyle.java b/core/src/main/java/art/arcane/iris/generation/noise/IrisGeneratorStyle.java index ac3ad0426..7ae67270a 100644 --- a/core/src/main/java/art/arcane/iris/generation/noise/IrisGeneratorStyle.java +++ b/core/src/main/java/art/arcane/iris/generation/noise/IrisGeneratorStyle.java @@ -102,6 +102,10 @@ public class IrisGeneratorStyle { return createNoCache(rng, data, 1, 0, false, resolveEngine(data)); } + public CNG createScaledGenerator(RNG rng, IrisData data, double scaleFactor) { + return createNoCache(rng, data).bake().scale(scaleFactor).bake(); + } + public CNG createForLayer(RNG rng, IrisData data, int octaveMultiplier) { return createNoCache(rng, data, Math.clamp(octaveMultiplier, 1, 16), 0, false, resolveEngine(data)); } diff --git a/core/src/main/java/art/arcane/iris/generation/terrain/ContinentGenerator.java b/core/src/main/java/art/arcane/iris/generation/terrain/ContinentGenerator.java index 4423d81b9..0d95de5ea 100644 --- a/core/src/main/java/art/arcane/iris/generation/terrain/ContinentGenerator.java +++ b/core/src/main/java/art/arcane/iris/generation/terrain/ContinentGenerator.java @@ -11,18 +11,18 @@ public final class ContinentGenerator { } public static CNG create(IrisDimension dimension, RNG parentSeedSource, IrisData packData) { - return scaleByContinentZoom(createContinentalStyleGenerator(dimension, parentSeedSource, packData), dimension); + return createScaledContinentalStyleGenerator(dimension, deriveContinentSeed(parentSeedSource), packData); } - private static CNG createContinentalStyleGenerator(IrisDimension dimension, RNG parentSeedSource, IrisData packData) { - return dimension.getContinentalStyle().createNoCache(deriveContinentSeed(parentSeedSource), packData); + private static CNG createScaledContinentalStyleGenerator(IrisDimension dimension, RNG continentSeed, IrisData packData) { + return dimension.getContinentalStyle().createScaledGenerator(continentSeed, packData, inverseContinentZoom(dimension)); } static RNG deriveContinentSeed(RNG parentSeedSource) { return parentSeedSource.nextParallelRNG(CONTINENT_SEED_SALT); } - private static CNG scaleByContinentZoom(CNG generator, IrisDimension dimension) { - return generator.bake().scale(1D / dimension.getContinentZoom()).bake(); + private static double inverseContinentZoom(IrisDimension dimension) { + return 1D / dimension.getContinentZoom(); } } From 76d71f8344fc307ea2f03cab21063a3a3b156485 Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 12:34:21 +0200 Subject: [PATCH 22/25] chore: - Replaced IrisDimensionCarvingEntry shrink scaling with createScaledGenerator Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../iris/generation/terrain/IrisDimensionCarvingEntry.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java b/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java index 782cba9d5..6fa49dbfc 100644 --- a/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java +++ b/core/src/main/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntry.java @@ -87,7 +87,7 @@ public class IrisDimensionCarvingEntry { } private CNG createChildrenGenerator(long childrenGeneratorSeed, IrisData data) { - return scaleByShrinkFactor(getChildStyle().createNoCache(deriveChildStyleSeed(childrenGeneratorSeed), data)); + return getChildStyle().createScaledGenerator(deriveChildStyleSeed(childrenGeneratorSeed), data, childShrinkFactor()); } long deriveChildrenGeneratorSeed(long worldSeed) { @@ -98,8 +98,8 @@ public class IrisDimensionCarvingEntry { return new RNG(childrenGeneratorSeed).nextParallelRNG(CHILDREN_SEED_SALT); } - private CNG scaleByShrinkFactor(CNG generator) { - return generator.bake().scale(Math.max(MINIMUM_CHILD_SHRINK_FACTOR, getChildShrinkFactor())).bake(); + private double childShrinkFactor() { + return Math.max(MINIMUM_CHILD_SHRINK_FACTOR, getChildShrinkFactor()); } private long hashOfId() { From 99cc2383d618eeb10e43a7de617972f0dccb8b07 Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 12:35:22 +0200 Subject: [PATCH 23/25] chore: - Replaced IrisBiome children generator scaling with createScaledGenerator Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../main/java/art/arcane/iris/generation/biome/IrisBiome.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/art/arcane/iris/generation/biome/IrisBiome.java b/core/src/main/java/art/arcane/iris/generation/biome/IrisBiome.java index 5783ab4e4..9a5e69c05 100644 --- a/core/src/main/java/art/arcane/iris/generation/biome/IrisBiome.java +++ b/core/src/main/java/art/arcane/iris/generation/biome/IrisBiome.java @@ -516,7 +516,7 @@ public class IrisBiome extends IrisRegistrant implements Rarity { } private CNG createChildrenGenerator(RNG random, int sig, double scale) { - return getChildStyle().createNoCache(deriveChildStyleSeed(random, sig), getLoader()).bake().scale(scale).bake(); + return getChildStyle().createScaledGenerator(deriveChildStyleSeed(random, sig), getLoader(), scale); } static RNG deriveChildStyleSeed(RNG random, int signature) { From 357f14e9007e20e5d4b997dd167c99cee87edbc9 Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 12:36:55 +0200 Subject: [PATCH 24/25] chore: - Extracted shared SAMPLE_BLOCKS to GeneratorSampling Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../iris/generation/biome/IrisBiomeChildrenGeneratorTest.java | 2 +- .../decoration/IrisDecoratorVarianceGeneratorTest.java | 2 +- .../arcane/iris/generation/terrain/ContinentGeneratorTest.java | 2 +- .../iris/generation/terrain/IrisDimensionCarvingEntryTest.java | 2 +- .../java/art/arcane/iris/testsupport/GeneratorSampling.java | 2 ++ 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/core/src/test/java/art/arcane/iris/generation/biome/IrisBiomeChildrenGeneratorTest.java b/core/src/test/java/art/arcane/iris/generation/biome/IrisBiomeChildrenGeneratorTest.java index f7f1202fd..b4acbb55f 100644 --- a/core/src/test/java/art/arcane/iris/generation/biome/IrisBiomeChildrenGeneratorTest.java +++ b/core/src/test/java/art/arcane/iris/generation/biome/IrisBiomeChildrenGeneratorTest.java @@ -7,6 +7,7 @@ import art.arcane.iris.testsupport.RunningEnginePackData; import art.arcane.volmlib.util.math.RNG; import org.junit.Test; +import static art.arcane.iris.testsupport.GeneratorSampling.SAMPLE_BLOCKS; import static art.arcane.iris.testsupport.GeneratorSampling.sampleAtBlocks; import static org.junit.Assert.assertArrayEquals; @@ -14,7 +15,6 @@ public class IrisBiomeChildrenGeneratorTest { private static final long WORLD_SEED = 7L; private static final int CHILDREN_SIGNATURE = 123; private static final double CHILD_SHRINK_FACTOR = 4D; - private static final double[][] SAMPLE_BLOCKS = {{1000D, -2000D}, {12.5D, -7.25D}, {-517D, 333D}}; private final IrisData packData = RunningEnginePackData.create(); private final IrisBiome biome = createBiomeWithSimplexChildStyle(packData); diff --git a/core/src/test/java/art/arcane/iris/generation/decoration/IrisDecoratorVarianceGeneratorTest.java b/core/src/test/java/art/arcane/iris/generation/decoration/IrisDecoratorVarianceGeneratorTest.java index dd09c3544..892a764d6 100644 --- a/core/src/test/java/art/arcane/iris/generation/decoration/IrisDecoratorVarianceGeneratorTest.java +++ b/core/src/test/java/art/arcane/iris/generation/decoration/IrisDecoratorVarianceGeneratorTest.java @@ -9,13 +9,13 @@ import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.math.RNG; import org.junit.Test; +import static art.arcane.iris.testsupport.GeneratorSampling.SAMPLE_BLOCKS; import static art.arcane.iris.testsupport.GeneratorSampling.sampleAtBlocks; import static org.junit.Assert.assertArrayEquals; public class IrisDecoratorVarianceGeneratorTest { private static final long WORLD_SEED = 7L; private static final double VARIANCE_ZOOM = 4D; - private static final double[][] SAMPLE_BLOCKS = {{1000D, -2000D}, {12.5D, -7.25D}, {-517D, 333D}}; private final IrisData packData = RunningEnginePackData.create(); private final IrisDecorator decorator = createDecoratorWithZoomedSimplexVariance(); diff --git a/core/src/test/java/art/arcane/iris/generation/terrain/ContinentGeneratorTest.java b/core/src/test/java/art/arcane/iris/generation/terrain/ContinentGeneratorTest.java index 9ae188ef5..127311eeb 100644 --- a/core/src/test/java/art/arcane/iris/generation/terrain/ContinentGeneratorTest.java +++ b/core/src/test/java/art/arcane/iris/generation/terrain/ContinentGeneratorTest.java @@ -9,6 +9,7 @@ import org.junit.Test; import java.util.Arrays; +import static art.arcane.iris.testsupport.GeneratorSampling.SAMPLE_BLOCKS; import static art.arcane.iris.testsupport.GeneratorSampling.sampleAtBlocks; import static org.junit.Assert.assertArrayEquals; @@ -17,7 +18,6 @@ public class ContinentGeneratorTest { private static final double POWER_OF_TWO_CONTINENT_ZOOM = 4D; private static final double SQUARED_CONTINENT_ZOOM = POWER_OF_TWO_CONTINENT_ZOOM * POWER_OF_TWO_CONTINENT_ZOOM; private static final double OVERWORLD_STYLE_ZOOM = 6D; - private static final double[][] SAMPLE_BLOCKS = {{1000D, -2000D}, {12.5D, -7.25D}, {-517D, 333D}}; private static final double[][] BLOCKS_SHRUNK_BY_CONTINENT_ZOOM = shrinkByContinentZoom(SAMPLE_BLOCKS); private static final double[] CONTINENT_MAP_OF_EXISTING_WORLDS = {0.21889892332042843D, 0.6984934456740721D, 0.2708759584352327D}; diff --git a/core/src/test/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntryTest.java b/core/src/test/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntryTest.java index 079ef46c4..71f152b42 100644 --- a/core/src/test/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntryTest.java +++ b/core/src/test/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntryTest.java @@ -7,6 +7,7 @@ import art.arcane.iris.testsupport.RunningEnginePackData; import art.arcane.volmlib.util.math.RNG; import org.junit.Test; +import static art.arcane.iris.testsupport.GeneratorSampling.SAMPLE_BLOCKS; import static art.arcane.iris.testsupport.GeneratorSampling.sampleAtBlocks; import static org.junit.Assert.assertArrayEquals; @@ -14,7 +15,6 @@ public class IrisDimensionCarvingEntryTest { private static final long WORLD_SEED = 7L; private static final String CARVING_ENTRY_ID = "deep-caves"; private static final double CHILD_SHRINK_FACTOR = 4D; - private static final double[][] SAMPLE_BLOCKS = {{1000D, -2000D}, {12.5D, -7.25D}, {-517D, 333D}}; private final IrisData packData = RunningEnginePackData.create(); private final IrisDimensionCarvingEntry carvingEntry = createCarvingEntry(); diff --git a/core/src/test/java/art/arcane/iris/testsupport/GeneratorSampling.java b/core/src/test/java/art/arcane/iris/testsupport/GeneratorSampling.java index d83bf5585..218994e0b 100644 --- a/core/src/test/java/art/arcane/iris/testsupport/GeneratorSampling.java +++ b/core/src/test/java/art/arcane/iris/testsupport/GeneratorSampling.java @@ -5,6 +5,8 @@ import art.arcane.volmlib.util.noise.CNG; import java.util.Arrays; public final class GeneratorSampling { + public static final double[][] SAMPLE_BLOCKS = {{1000D, -2000D}, {12.5D, -7.25D}, {-517D, 333D}}; + private GeneratorSampling() { } From 318c1e100bd7beb7180e53aa6125b3e4f8f6c928 Mon Sep 17 00:00:00 2001 From: CeeVeeR Date: Fri, 2 Oct 2026 12:37:51 +0200 Subject: [PATCH 25/25] chore: - Extracted shared style generator sampling to GeneratorSampling.sampleSharedGenerator Ref.: https://github.com/VolmitSoftware/Iris/issues/1251 --- .../generation/biome/IrisBiomeChildrenGeneratorTest.java | 4 ++-- .../decoration/IrisDecoratorVarianceGeneratorTest.java | 4 ++-- .../iris/generation/terrain/ContinentGeneratorTest.java | 3 ++- .../generation/terrain/IrisDimensionCarvingEntryTest.java | 4 ++-- .../art/arcane/iris/testsupport/GeneratorSampling.java | 7 +++++++ 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/core/src/test/java/art/arcane/iris/generation/biome/IrisBiomeChildrenGeneratorTest.java b/core/src/test/java/art/arcane/iris/generation/biome/IrisBiomeChildrenGeneratorTest.java index b4acbb55f..f556b2278 100644 --- a/core/src/test/java/art/arcane/iris/generation/biome/IrisBiomeChildrenGeneratorTest.java +++ b/core/src/test/java/art/arcane/iris/generation/biome/IrisBiomeChildrenGeneratorTest.java @@ -8,7 +8,7 @@ import art.arcane.volmlib.util.math.RNG; import org.junit.Test; import static art.arcane.iris.testsupport.GeneratorSampling.SAMPLE_BLOCKS; -import static art.arcane.iris.testsupport.GeneratorSampling.sampleAtBlocks; +import static art.arcane.iris.testsupport.GeneratorSampling.sampleSharedGenerator; import static org.junit.Assert.assertArrayEquals; public class IrisBiomeChildrenGeneratorTest { @@ -38,7 +38,7 @@ public class IrisBiomeChildrenGeneratorTest { } private double[] sampleSharedChildStyleGenerator(IrisGeneratorStyle childStyle) { - return sampleAtBlocks(childStyle.create(deriveSharedChildStyleSeed(), packData), SAMPLE_BLOCKS); + return sampleSharedGenerator(childStyle, deriveSharedChildStyleSeed(), packData); } private static RNG deriveSharedChildStyleSeed() { diff --git a/core/src/test/java/art/arcane/iris/generation/decoration/IrisDecoratorVarianceGeneratorTest.java b/core/src/test/java/art/arcane/iris/generation/decoration/IrisDecoratorVarianceGeneratorTest.java index 892a764d6..a5cb2be26 100644 --- a/core/src/test/java/art/arcane/iris/generation/decoration/IrisDecoratorVarianceGeneratorTest.java +++ b/core/src/test/java/art/arcane/iris/generation/decoration/IrisDecoratorVarianceGeneratorTest.java @@ -10,7 +10,7 @@ import art.arcane.volmlib.util.math.RNG; import org.junit.Test; import static art.arcane.iris.testsupport.GeneratorSampling.SAMPLE_BLOCKS; -import static art.arcane.iris.testsupport.GeneratorSampling.sampleAtBlocks; +import static art.arcane.iris.testsupport.GeneratorSampling.sampleSharedGenerator; import static org.junit.Assert.assertArrayEquals; public class IrisDecoratorVarianceGeneratorTest { @@ -35,7 +35,7 @@ public class IrisDecoratorVarianceGeneratorTest { } private double[] sampleSharedVarianceStyleGenerator(IrisGeneratorStyle varianceStyle) { - return sampleAtBlocks(varianceStyle.create(decorator.deriveVarianceSeed(new RNG(WORLD_SEED), packData), packData), SAMPLE_BLOCKS); + return sampleSharedGenerator(varianceStyle, decorator.deriveVarianceSeed(new RNG(WORLD_SEED), packData), packData); } private static IrisDecorator createDecoratorWithZoomedSimplexVariance() { diff --git a/core/src/test/java/art/arcane/iris/generation/terrain/ContinentGeneratorTest.java b/core/src/test/java/art/arcane/iris/generation/terrain/ContinentGeneratorTest.java index 127311eeb..de74d930d 100644 --- a/core/src/test/java/art/arcane/iris/generation/terrain/ContinentGeneratorTest.java +++ b/core/src/test/java/art/arcane/iris/generation/terrain/ContinentGeneratorTest.java @@ -11,6 +11,7 @@ import java.util.Arrays; import static art.arcane.iris.testsupport.GeneratorSampling.SAMPLE_BLOCKS; import static art.arcane.iris.testsupport.GeneratorSampling.sampleAtBlocks; +import static art.arcane.iris.testsupport.GeneratorSampling.sampleSharedGenerator; import static org.junit.Assert.assertArrayEquals; public class ContinentGeneratorTest { @@ -90,7 +91,7 @@ public class ContinentGeneratorTest { } private double[] sampleSharedStyleGenerator(IrisGeneratorStyle style) { - return sampleAtBlocks(style.create(ContinentGenerator.deriveContinentSeed(new RNG(WORLD_SEED)), packData), SAMPLE_BLOCKS); + return sampleSharedGenerator(style, ContinentGenerator.deriveContinentSeed(new RNG(WORLD_SEED)), packData); } private double[] sampleContinentMap(IrisDimension dimension, double[][] blocks) { diff --git a/core/src/test/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntryTest.java b/core/src/test/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntryTest.java index 71f152b42..0cd2b7977 100644 --- a/core/src/test/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntryTest.java +++ b/core/src/test/java/art/arcane/iris/generation/terrain/IrisDimensionCarvingEntryTest.java @@ -8,7 +8,7 @@ import art.arcane.volmlib.util.math.RNG; import org.junit.Test; import static art.arcane.iris.testsupport.GeneratorSampling.SAMPLE_BLOCKS; -import static art.arcane.iris.testsupport.GeneratorSampling.sampleAtBlocks; +import static art.arcane.iris.testsupport.GeneratorSampling.sampleSharedGenerator; import static org.junit.Assert.assertArrayEquals; public class IrisDimensionCarvingEntryTest { @@ -34,7 +34,7 @@ public class IrisDimensionCarvingEntryTest { } private double[] sampleSharedChildStyleGenerator(IrisGeneratorStyle childStyle) { - return sampleAtBlocks(childStyle.create(deriveSharedChildStyleSeed(), packData), SAMPLE_BLOCKS); + return sampleSharedGenerator(childStyle, deriveSharedChildStyleSeed(), packData); } private RNG deriveSharedChildStyleSeed() { diff --git a/core/src/test/java/art/arcane/iris/testsupport/GeneratorSampling.java b/core/src/test/java/art/arcane/iris/testsupport/GeneratorSampling.java index 218994e0b..79370d729 100644 --- a/core/src/test/java/art/arcane/iris/testsupport/GeneratorSampling.java +++ b/core/src/test/java/art/arcane/iris/testsupport/GeneratorSampling.java @@ -1,5 +1,8 @@ package art.arcane.iris.testsupport; +import art.arcane.iris.generation.noise.IrisGeneratorStyle; +import art.arcane.iris.pack.loading.IrisData; +import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.noise.CNG; import java.util.Arrays; @@ -10,6 +13,10 @@ public final class GeneratorSampling { private GeneratorSampling() { } + public static double[] sampleSharedGenerator(IrisGeneratorStyle style, RNG seed, IrisData packData) { + return sampleAtBlocks(style.create(seed, packData), SAMPLE_BLOCKS); + } + public static double[] sampleAtBlocks(CNG generator, double[][] blocks) { return Arrays.stream(blocks).mapToDouble(block -> sampleAt(generator, block)).toArray(); }