mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-31 21:06:34 +00:00
Add option to use LegacyRandomSource for slime chunk
This commit is contained in:
@@ -5,7 +5,7 @@ Subject: [PATCH] Faster Natural Spawning
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/util/RandomSource.java b/src/main/java/net/minecraft/util/RandomSource.java
|
||||
index 9c6f5b55b1f1376fa75e216cd366ee47c79fafc4..7762c8186035fdf60e11d9f1844516b61f442206 100644
|
||||
index 9c6f5b55b1f1376fa75e216cd366ee47c79fafc4..67d94b649148b3165f09d75d8c9db10db4cc7874 100644
|
||||
--- a/src/main/java/net/minecraft/util/RandomSource.java
|
||||
+++ b/src/main/java/net/minecraft/util/RandomSource.java
|
||||
@@ -15,6 +15,12 @@ public interface RandomSource {
|
||||
@@ -16,7 +16,7 @@ index 9c6f5b55b1f1376fa75e216cd366ee47c79fafc4..7762c8186035fdf60e11d9f1844516b6
|
||||
+ static RandomSource createFaster() {
|
||||
+ return create(RandomSupport.generateFasterSeed());
|
||||
+ }
|
||||
+ // Leaf end
|
||||
+ // Leaf end - Generate random seed faster
|
||||
+
|
||||
@Deprecated
|
||||
static RandomSource createThreadSafe() {
|
||||
@@ -54,7 +54,7 @@ index e33b39d369386d677cc15247846790b498e37a82..cf715114f0ebba449d7bd663445baec6
|
||||
return new BlockPos(i, l, j);
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/world/level/levelgen/RandomSupport.java b/src/main/java/net/minecraft/world/level/levelgen/RandomSupport.java
|
||||
index 4327bee689e986561d126d6018d3fee7d2623176..267a28724ea0aea926c51c37e1172a2c34b47375 100644
|
||||
index 4327bee689e986561d126d6018d3fee7d2623176..82ee2aaabf6563cf3d6ae1e5b63242240a8e5521 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/levelgen/RandomSupport.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/levelgen/RandomSupport.java
|
||||
@@ -41,6 +41,12 @@ public final class RandomSupport {
|
||||
@@ -65,7 +65,7 @@ index 4327bee689e986561d126d6018d3fee7d2623176..267a28724ea0aea926c51c37e1172a2c
|
||||
+ public static long generateFasterSeed() {
|
||||
+ return SEED_UNIQUIFIER.updateAndGet((seedUniquifier) -> seedUniquifier * 1181783497276652981L)^ java.util.concurrent.ThreadLocalRandom.current().nextLong();
|
||||
+ }
|
||||
+ // Leaf end
|
||||
+ // Leaf end - Generate random seed faster
|
||||
+
|
||||
public static record Seed128bit(long seedLo, long seedHi) {
|
||||
public RandomSupport.Seed128bit xor(long seedLo, long seedHi) {
|
||||
|
||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Faster Random Generator
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/util/RandomSource.java b/src/main/java/net/minecraft/util/RandomSource.java
|
||||
index 7762c8186035fdf60e11d9f1844516b61f442206..c2f0b5933c61168cbde507f04674e95b78e2d7f3 100644
|
||||
index 67d94b649148b3165f09d75d8c9db10db4cc7874..e0fffcaff4ccb8b20a85a68fa73d3076246aad0c 100644
|
||||
--- a/src/main/java/net/minecraft/util/RandomSource.java
|
||||
+++ b/src/main/java/net/minecraft/util/RandomSource.java
|
||||
@@ -6,6 +6,7 @@ import net.minecraft.world.level.levelgen.PositionalRandomFactory;
|
||||
@@ -16,55 +16,101 @@ index 7762c8186035fdf60e11d9f1844516b61f442206..c2f0b5933c61168cbde507f04674e95b
|
||||
|
||||
public interface RandomSource {
|
||||
@Deprecated
|
||||
@@ -23,16 +24,16 @@ public interface RandomSource {
|
||||
@@ -23,16 +24,28 @@ public interface RandomSource {
|
||||
|
||||
@Deprecated
|
||||
static RandomSource createThreadSafe() {
|
||||
- return new ThreadSafeLegacyRandomSource(RandomSupport.generateUniqueSeed());
|
||||
- }
|
||||
+ return org.dreeam.leaf.config.modules.opt.FastRNG.enabled ? new TheFasterRandom(RandomSupport.generateFasterSeed()) : new ThreadSafeLegacyRandomSource(RandomSupport.generateUniqueSeed());
|
||||
+ return org.dreeam.leaf.config.modules.opt.FastRNG.enabled
|
||||
+ ? new TheFasterRandom(RandomSupport.generateFasterSeed())
|
||||
+ : new ThreadSafeLegacyRandomSource(RandomSupport.generateUniqueSeed());
|
||||
+ } // Leaf - Faster RNG
|
||||
|
||||
static RandomSource create(long seed) {
|
||||
- return new LegacyRandomSource(seed);
|
||||
- }
|
||||
+ return org.dreeam.leaf.config.modules.opt.FastRNG.enabled ? new TheFasterRandom(seed) : new LegacyRandomSource(seed);
|
||||
+ } // Leaf - Faster RNG
|
||||
+ return org.dreeam.leaf.config.modules.opt.FastRNG.enabled
|
||||
+ ? new TheFasterRandom(seed)
|
||||
+ : new LegacyRandomSource(seed);
|
||||
}
|
||||
|
||||
+ static RandomSource createForSlimeChunk(long seed) {
|
||||
+ return org.dreeam.leaf.config.modules.opt.FastRNG.enabled && !org.dreeam.leaf.config.modules.opt.FastRNG.useLegacyForSlimeChunk
|
||||
+ ? new TheFasterRandom(seed)
|
||||
+ : new LegacyRandomSource(seed);
|
||||
+ } // Leaf - Faster RNG
|
||||
+
|
||||
static RandomSource createNewThreadLocalInstance() {
|
||||
- return new SingleThreadedRandomSource(ThreadLocalRandom.current().nextLong());
|
||||
- }
|
||||
+ return org.dreeam.leaf.config.modules.opt.FastRNG.enabled ? new TheFasterRandom(RandomSupport.generateFasterSeed()) : new SingleThreadedRandomSource(ThreadLocalRandom.current().nextLong());
|
||||
+ return org.dreeam.leaf.config.modules.opt.FastRNG.enabled
|
||||
+ ? new TheFasterRandom(RandomSupport.generateFasterSeed())
|
||||
+ : new SingleThreadedRandomSource(ThreadLocalRandom.current().nextLong());
|
||||
+ } // Leaf - Faster RNG
|
||||
|
||||
RandomSource fork();
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/level/levelgen/WorldgenRandom.java b/src/main/java/net/minecraft/world/level/levelgen/WorldgenRandom.java
|
||||
index c6efe6faf68c7a7b1df344e2e527aa7e44bfacb8..fe89e7b7c4267ee2969d1505f83cba1ac17cb13e 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/levelgen/WorldgenRandom.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/levelgen/WorldgenRandom.java
|
||||
@@ -69,9 +69,9 @@ public class WorldgenRandom extends LegacyRandomSource {
|
||||
}
|
||||
|
||||
public static RandomSource seedSlimeChunk(int chunkX, int chunkZ, long worldSeed, long scrambler) {
|
||||
- return RandomSource.create(
|
||||
+ return RandomSource.createForSlimeChunk(
|
||||
worldSeed + (long)(chunkX * chunkX * 4987142) + (long)(chunkX * 5947611) + (long)(chunkZ * chunkZ) * 4392871L + (long)(chunkZ * 389711) ^ scrambler
|
||||
- );
|
||||
+ ); // Leaf - Faster RNG
|
||||
}
|
||||
|
||||
public static enum Algorithm {
|
||||
diff --git a/src/main/java/org/dreeam/leaf/config/modules/opt/FastRNG.java b/src/main/java/org/dreeam/leaf/config/modules/opt/FastRNG.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..996418c50cf005dbb850a9627c9c73f84f33f32a
|
||||
index 0000000000000000000000000000000000000000..dff4d1955d37529403ba08e41c12774e30741b28
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/org/dreeam/leaf/config/modules/opt/FastRNG.java
|
||||
@@ -0,0 +1,22 @@
|
||||
@@ -0,0 +1,41 @@
|
||||
+package org.dreeam.leaf.config.modules.opt;
|
||||
+
|
||||
+import org.dreeam.leaf.config.ConfigModules;
|
||||
+import org.dreeam.leaf.config.EnumConfigCategory;
|
||||
+import org.dreeam.leaf.config.LeafConfig;
|
||||
+
|
||||
+public class FastRNG extends ConfigModules {
|
||||
+
|
||||
+ public String getBasePath() {
|
||||
+ return EnumConfigCategory.PERF.getBaseKeyName();
|
||||
+ return EnumConfigCategory.PERF.getBaseKeyName() + ".faster-random-generator";
|
||||
+ }
|
||||
+
|
||||
+ public static boolean enabled = false;
|
||||
+ public static boolean warnForSlimeChunk = true;
|
||||
+ public static boolean useLegacyForSlimeChunk = false;
|
||||
+
|
||||
+ @Override
|
||||
+ public void onLoaded() {
|
||||
+ enabled = config.getBoolean(getBasePath() + ".use-faster-random-generator", enabled, """
|
||||
+ config.addComment(getBasePath(), """
|
||||
+ Use faster random generator? (Up to 100X faster)
|
||||
+ Requires a JVM that supports RandomGenerator and the LXM generators.
|
||||
+ Some JREs don't support this and will cause a crash.
|
||||
+ """);
|
||||
+
|
||||
+ enabled = config.getBoolean(getBasePath() + ".enabled", enabled);
|
||||
+ warnForSlimeChunk = config.getBoolean(getBasePath() + ".warn-for-slime-chunk", warnForSlimeChunk,
|
||||
+ "Warn if you are not using legacy random source for slime chunk generation.");
|
||||
+ useLegacyForSlimeChunk = config.getBoolean(getBasePath() + ".use-legacy-random-for-slime-chunk", useLegacyForSlimeChunk, """
|
||||
+ Use legacy random source for slime chunk generation,
|
||||
+ to follow vanilla behavior.""");
|
||||
+
|
||||
+ if (enabled && warnForSlimeChunk) {
|
||||
+ LeafConfig.LOGGER.warn("You enabled faster random generator, it will offset location of slime chunk");
|
||||
+ LeafConfig.LOGGER.warn("If your server has slime farms or facilities need vanilla slime chunk,");
|
||||
+ LeafConfig.LOGGER.warn("set performance.faster-random-generator.use-legacy-random-for-slime-chunk " +
|
||||
+ "to true to use LegacyRandomSource for slime chunk generation.");
|
||||
+ LeafConfig.LOGGER.warn("Set performance.faster-random-generator.warn-for-slime-chunk to false to " +
|
||||
+ "disable this warning.");
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
diff --git a/src/main/java/org/dreeam/leaf/util/math/random/TheFasterRandom.java b/src/main/java/org/dreeam/leaf/util/math/random/TheFasterRandom.java
|
||||
|
||||
Reference in New Issue
Block a user