Skip to content

Commit 52f73bc

Browse files
authored
Update Faster random generator patch (#206)
1 parent faeb901 commit 52f73bc

File tree

2 files changed

+728
-6
lines changed

2 files changed

+728
-6
lines changed

leaf-server/minecraft-patches/features/0051-Faster-Random-Generator.patch

Lines changed: 64 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,48 @@ Subject: [PATCH] Faster Random Generator
66
This patch replaces LegacyRandomSource with FasterRandomSource by default,
77
which is faster in general.
88

9-
Benchmark results (10,000,000 iterations) (GraalVM 21)
10-
SimpleRandom (Moonrise): 80ms
11-
FasterRandomSource (Leaf) (Backed by Xoroshiro128PlusPlus): 35ms
12-
LegacyRandomSource (Vanilla): 200ms
13-
XoroshiroRandomSource (Vanilla): 47ms
9+
Benchmark results (10,000,000 iterations) (Azul Zulu 23.0.1)
1410

11+
FasterRandomSource (Leaf) (Backed by Xoroshiro128PlusPlus): 51,633,700 ns
12+
LegacyRandomSource (Vanilla): 254,857,500 ns
13+
ThreadUnsafeRandom (Moonrise): 102,265,100 ns
14+
SimpleThreadUnsafeRandom (Moonrise): 97,054,600 ns
15+
16+
diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java
17+
index 6f14f321d2fa83abab0aa1b262ff873b208a67be..5d9c3054e32636b051cc6b210c71bb722c1de1c8 100644
18+
--- a/net/minecraft/server/level/ServerChunkCache.java
19+
+++ b/net/minecraft/server/level/ServerChunkCache.java
20+
@@ -150,7 +150,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
21+
}
22+
// Paper end - rewrite chunk system
23+
// Paper start - chunk tick iteration optimisations
24+
- private final ca.spottedleaf.moonrise.common.util.SimpleThreadUnsafeRandom shuffleRandom = new ca.spottedleaf.moonrise.common.util.SimpleThreadUnsafeRandom(0L);
25+
+ private final net.minecraft.world.level.levelgen.BitRandomSource shuffleRandom = org.dreeam.leaf.config.modules.opt.FastRNG.enabled ? new org.dreeam.leaf.util.math.random.FasterRandomSource(0L) : new ca.spottedleaf.moonrise.common.util.SimpleThreadUnsafeRandom(0L); // Leaf - Faster random generator
26+
private boolean isChunkNearPlayer(final ChunkMap chunkMap, final ChunkPos chunkPos, final LevelChunk levelChunk) {
27+
final ca.spottedleaf.moonrise.patches.chunk_system.level.chunk.ChunkData chunkData = ((ca.spottedleaf.moonrise.patches.chunk_system.level.chunk.ChunkSystemChunkHolder)((ca.spottedleaf.moonrise.patches.chunk_system.level.chunk.ChunkSystemLevelChunk)levelChunk).moonrise$getChunkAndHolder().holder())
28+
.moonrise$getRealChunkHolder().holderData;
29+
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
30+
index b3c388f6108360708baf275121af18f46622494f..84d3df4008e56d8ceba2b422f42c34295c5e0a83 100644
31+
--- a/net/minecraft/server/level/ServerLevel.java
32+
+++ b/net/minecraft/server/level/ServerLevel.java
33+
@@ -902,7 +902,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
34+
private void optimiseRandomTick(final LevelChunk chunk, final int tickSpeed) {
35+
final LevelChunkSection[] sections = chunk.getSections();
36+
final int minSection = ca.spottedleaf.moonrise.common.util.WorldUtil.getMinSection((ServerLevel)(Object)this);
37+
- final ca.spottedleaf.moonrise.common.util.SimpleThreadUnsafeRandom simpleRandom = this.simpleRandom;
38+
+ final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = this.simpleRandom; // Leaf - Faster random generator - upcasting
39+
final boolean doubleTickFluids = !ca.spottedleaf.moonrise.common.PlatformHooks.get().configFixMC224294();
40+
41+
final ChunkPos cpos = chunk.getPos();
42+
@@ -951,7 +951,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
43+
private int currentIceAndSnowTick = 0; protected void resetIceAndSnowTick() { this.currentIceAndSnowTick = this.simpleRandom.nextInt(16); } // Gale - Airplane - optimize random calls in chunk ticking
44+
45+
public void tickChunk(LevelChunk chunk, int randomTickSpeed) {
46+
- final ca.spottedleaf.moonrise.common.util.SimpleThreadUnsafeRandom simpleRandom = this.simpleRandom; // Paper - optimise random ticking
47+
+ final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = this.simpleRandom; // Paper - optimise random ticking // Leaf - Faster random generator - upcasting
48+
ChunkPos pos = chunk.getPos();
49+
boolean isRaining = this.isRaining();
50+
int minBlockX = pos.getMinBlockX();
1551
diff --git a/net/minecraft/util/RandomSource.java b/net/minecraft/util/RandomSource.java
1652
index 98a54bc4de251014342cda6d0951b7fea79ce553..6d56134cc9ed9d73104ae77b1a0baa5a0a45759c 100644
1753
--- a/net/minecraft/util/RandomSource.java
@@ -53,7 +89,7 @@ index 98a54bc4de251014342cda6d0951b7fea79ce553..6d56134cc9ed9d73104ae77b1a0baa5a
5389
RandomSource fork();
5490

5591
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
56-
index 3e1a5ef63d97e2ad43d98c5736a185ade7afb4bd..f7f330758dce7c38e0e0e8ba420df4d83f765cf1 100644
92+
index 539cd1fe6ff15a4ebcbd65f41d8711d1f4ce5b97..034e10e912ab9b4b5435ad88c0cd4183c8b5c1a1 100644
5793
--- a/net/minecraft/world/entity/Entity.java
5894
+++ b/net/minecraft/world/entity/Entity.java
5995
@@ -143,7 +143,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -65,6 +101,28 @@ index 3e1a5ef63d97e2ad43d98c5736a185ade7afb4bd..f7f330758dce7c38e0e0e8ba420df4d8
65101
// Paper start - replace random
66102
private static final class RandomRandomSource extends ca.spottedleaf.moonrise.common.util.ThreadUnsafeRandom {
67103
public RandomRandomSource() {
104+
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
105+
index 13edbcdabc159e3694e7dbe824ccb5bb447fe788..367ba07f63917dc75883d5fd3dde93dc9ffc144a 100644
106+
--- a/net/minecraft/world/level/Level.java
107+
+++ b/net/minecraft/world/level/Level.java
108+
@@ -126,7 +126,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
109+
public float rainLevel;
110+
protected float oThunderLevel;
111+
public float thunderLevel;
112+
- public final RandomSource random = new ca.spottedleaf.moonrise.common.util.ThreadUnsafeRandom(net.minecraft.world.level.levelgen.RandomSupport.generateUniqueSeed()); // Paper - replace random
113+
+ public final RandomSource random = org.dreeam.leaf.config.modules.opt.FastRNG.enabled ? new org.dreeam.leaf.util.math.random.FasterRandomSource(net.minecraft.world.level.levelgen.RandomSupport.generateUniqueSeed()) : new ca.spottedleaf.moonrise.common.util.ThreadUnsafeRandom(net.minecraft.world.level.levelgen.RandomSupport.generateUniqueSeed()); // Paper - replace random // Leaf - Faster random generator
114+
@Deprecated
115+
private final RandomSource threadSafeRandom = RandomSource.createThreadSafe();
116+
private final Holder<DimensionType> dimensionTypeRegistration;
117+
@@ -182,7 +182,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
118+
public final Map<ServerExplosion.CacheKey, Float> explosionDensityCache = new HashMap<>(); // Paper - Optimize explosions
119+
public java.util.ArrayDeque<net.minecraft.world.level.block.RedstoneTorchBlock.Toggle> redstoneUpdateInfos; // Paper - Faster redstone torch rapid clock removal; Move from Map in BlockRedstoneTorch to here
120+
121+
- public final ca.spottedleaf.moonrise.common.util.SimpleThreadUnsafeRandom simpleRandom = new ca.spottedleaf.moonrise.common.util.SimpleThreadUnsafeRandom(net.minecraft.world.level.levelgen.RandomSupport.generateUniqueSeed()); // Gale - Pufferfish - move random tick random
122+
+ public final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = org.dreeam.leaf.config.modules.opt.FastRNG.enabled ? new org.dreeam.leaf.util.math.random.FasterRandomSource(net.minecraft.world.level.levelgen.RandomSupport.generateUniqueSeed()) : new ca.spottedleaf.moonrise.common.util.SimpleThreadUnsafeRandom(net.minecraft.world.level.levelgen.RandomSupport.generateUniqueSeed()); // Gale - Pufferfish - move random tick random // Leaf - Faster random generator
123+
124+
// Purpur start - Add adjustable breeding cooldown to config
125+
private com.google.common.cache.Cache<BreedingCooldownPair, Object> playerBreedingCooldowns;
68126
diff --git a/net/minecraft/world/level/biome/Biome.java b/net/minecraft/world/level/biome/Biome.java
69127
index f44461f92a10cbfdb8fcdbc3a2442e526b9d3d33..b4c5eea26e87ee6f466c53a6dd0867909df7e848 100644
70128
--- a/net/minecraft/world/level/biome/Biome.java

0 commit comments

Comments
 (0)