diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index 9023eb5dc..c516c20a1 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -10,7 +10,7 @@ object Versions { const val tectonic = "4.3.1" const val paralithic = "2.0.1" const val strata = "1.3.2" - const val seismic = "2.5.2" + const val seismic = "2.5.4" const val cloud = "2.0.0" diff --git a/common/addons/config-distributors/src/main/java/com/dfsek/terra/addons/feature/distributor/distributors/PaddedGridDistributor.java b/common/addons/config-distributors/src/main/java/com/dfsek/terra/addons/feature/distributor/distributors/PaddedGridDistributor.java index 48d67b3da..027297622 100644 --- a/common/addons/config-distributors/src/main/java/com/dfsek/terra/addons/feature/distributor/distributors/PaddedGridDistributor.java +++ b/common/addons/config-distributors/src/main/java/com/dfsek/terra/addons/feature/distributor/distributors/PaddedGridDistributor.java @@ -2,18 +2,11 @@ package com.dfsek.terra.addons.feature.distributor.distributors; import com.dfsek.seismic.algorithms.hashing.HashingFunctions; import com.dfsek.seismic.math.integer.IntegerFunctions; - -import java.util.random.RandomGenerator; -import java.util.random.RandomGeneratorFactory; - import com.dfsek.terra.api.structure.feature.Distributor; - public class PaddedGridDistributor implements Distributor { private final int width; - private final int cellWidth; - private final int salt; public PaddedGridDistributor(int width, int padding, int salt) { @@ -27,12 +20,26 @@ public class PaddedGridDistributor implements Distributor { int cellX = Math.floorDiv(x, cellWidth); int cellZ = Math.floorDiv(z, cellWidth); - RandomGenerator random = RandomGeneratorFactory.of("Xoroshiro128PlusPlus").create( - (HashingFunctions.murmur64(IntegerFunctions.squash(cellX, cellZ)) ^ seed) + salt); + int localX = x - (cellX * cellWidth); + int localZ = z - (cellZ * cellWidth); - int pointX = random.nextInt(width) + cellX * cellWidth; - int pointZ = random.nextInt(width) + cellZ * cellWidth; + if (localX >= width || localZ >= width) { + return false; + } - return x == pointX && z == pointZ; + long hash = HashingFunctions.murmur64(IntegerFunctions.squash(cellX, cellZ)) ^ seed; + hash += salt; + + hash = HashingFunctions.splitMix64(hash); + int targetX = (int) ((hash & 0x7FFFFFFFFFFFFFFFL) % width); + + if (localX != targetX) { + return false; + } + + hash = HashingFunctions.splitMix64(hash); + int targetZ = (int) ((hash & 0x7FFFFFFFFFFFFFFFL) % width); + + return localZ == targetZ; } }