diff --git a/core/src/main/java/com/volmit/iris/engine/mantle/components/MantleJigsawComponent.java b/core/src/main/java/com/volmit/iris/engine/mantle/components/MantleJigsawComponent.java index b7d8223b7..4f48245bf 100644 --- a/core/src/main/java/com/volmit/iris/engine/mantle/components/MantleJigsawComponent.java +++ b/core/src/main/java/com/volmit/iris/engine/mantle/components/MantleJigsawComponent.java @@ -156,7 +156,7 @@ public class MantleJigsawComponent extends IrisMantleComponent { @ChunkCoordinates private IrisJigsawStructurePlacement pick(List structures, long seed, int x, int z) { return IRare.pick(structures.stream() - .filter(p -> p.shouldPlace(jigsaw(), x, z)) + .filter(p -> p.shouldPlace(getDimension().getJigsawStructureDivisor(), jigsaw(), x, z)) .toList(), new RNG(seed).nextDouble()); } diff --git a/core/src/main/java/com/volmit/iris/engine/object/IrisDimension.java b/core/src/main/java/com/volmit/iris/engine/object/IrisDimension.java index d2aa52db2..fafeb768d 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IrisDimension.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IrisDimension.java @@ -220,6 +220,8 @@ public class IrisDimension extends IrisRegistrant { @ArrayType(min = 1, type = IrisJigsawStructurePlacement.class) @Desc("Jigsaw structures") private KList jigsawStructures = new KList<>(); + @Desc("The jigsaw structure divisor to use when generating missing jigsaw placement values") + private double jigsawStructureDivisor = 18; @Required @MinNumber(0) @MaxNumber(1024) diff --git a/core/src/main/java/com/volmit/iris/engine/object/IrisJigsawStructurePlacement.java b/core/src/main/java/com/volmit/iris/engine/object/IrisJigsawStructurePlacement.java index b65a7d2c5..40603ce85 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IrisJigsawStructurePlacement.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IrisJigsawStructurePlacement.java @@ -88,21 +88,21 @@ public class IrisJigsawStructurePlacement implements IRare { return (int) Math.ceil(blocks / 16d); } - private void calculateMissing(long seed) { + private void calculateMissing(double divisor, long seed) { seed = seed + hashCode(); if (salt == 0) { salt = new RNG(seed).nextLong(Integer.MIN_VALUE, Integer.MAX_VALUE); } if (separation == -1 || spacing == -1) { - separation = (int) Math.round(rarity / 15d); + separation = (int) Math.round(rarity / divisor); spacing = new RNG(seed).nextInt(separation, separation * 2); } } @ChunkCoordinates - public boolean shouldPlace(long seed, int x, int z) { - calculateMissing(seed); + public boolean shouldPlace(double divisor, long seed, int x, int z) { + calculateMissing(divisor, seed); if (separation > spacing) { separation = spacing; Iris.warn("JigsawStructurePlacement: separation must be less than or equal to spacing");