Files
MiraiMC/patches/server/0024-Don-t-create-new-random-instance.patch
2021-12-09 17:12:20 +01:00

112 lines
7.4 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Etil <81570777+etil2jz@users.noreply.github.com>
Date: Thu, 9 Dec 2021 17:06:40 +0100
Subject: [PATCH] Don't create new random instance
Original code by PatinaMC, licensed under GNU General Public License v3.0
You can find the original code on https://github.com/PatinaMC/Patina
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 1fe78da9a07bb2cadcd18ad4d30f9b101c696c36..a16c569cf0c8dba0b2bc61dedf5394a941696d56 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -650,7 +650,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<Runnab
if (worlddimension == null) {
dimensionmanager = (DimensionType) this.registryHolder.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY).getOrThrow(DimensionType.OVERWORLD_LOCATION);
- chunkgenerator = WorldGenSettings.makeDefaultOverworld(this.registryHolder, (new org.yatopiamc.yatopia.server.util.FastRandom()).nextLong());
+ chunkgenerator = WorldGenSettings.makeDefaultOverworld(this.registryHolder, java.util.concurrent.ThreadLocalRandom.current().nextLong()); // Patina - don't create new random instance
} else {
dimensionmanager = worlddimension.type();
chunkgenerator = worlddimension.generator();
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index ab06dd398bdf52656123eecdfe4daebe2a3b07e6..0011192cdba6dcb7ca125ae4a49ca89a93cc40f2 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -368,7 +368,7 @@ public class ServerPlayer extends Player {
long l = k * k;
int i1 = l > 2147483647L ? Integer.MAX_VALUE : (int) l;
int j1 = this.getCoprime(i1);
- int k1 = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(i1);
+ int k1 = worldserver.random.nextInt(i1); // Patina - don't create new random instance
for (int l1 = 0; l1 < i1; ++l1) {
int i2 = (k1 + j1 * l1) % i1;
@@ -405,7 +405,7 @@ public class ServerPlayer extends Player {
long l = k * k;
int i1 = l > 2147483647L ? Integer.MAX_VALUE : (int) l;
int j1 = this.getCoprime(i1);
- int k1 = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(i1);
+ int k1 = world.random.nextInt(i1); // Patina - don't create new random instance
for (int l1 = 0; l1 < i1; ++l1) {
int i2 = (k1 + j1 * l1) % i1;
diff --git a/src/main/java/net/minecraft/server/rcon/thread/QueryThreadGs4.java b/src/main/java/net/minecraft/server/rcon/thread/QueryThreadGs4.java
index b0cbe7d42eef1865e84211844b351027a26a5956..711d5dc2a8b3a5f2a2a35cab59b5ecfdeb152141 100644
--- a/src/main/java/net/minecraft/server/rcon/thread/QueryThreadGs4.java
+++ b/src/main/java/net/minecraft/server/rcon/thread/QueryThreadGs4.java
@@ -348,7 +348,7 @@ public class QueryThreadGs4 extends GenericThread {
this.identBytes[2] = bs[5];
this.identBytes[3] = bs[6];
this.ident = new String(this.identBytes, StandardCharsets.UTF_8);
- this.challenge = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(16777216);
+ this.challenge = java.util.concurrent.ThreadLocalRandom.current().nextInt(16777216); // Patina - don't create new random instance
this.challengeBytes = String.format("\t%s%d\u0000", this.ident, this.challenge).getBytes(StandardCharsets.UTF_8);
}
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index 21e478f81401649a170bfd20505f8094aa97b591..30ed4649ba827b27784cdc6278e6760e2b5acef3 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -124,13 +124,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
public final Thread thread;
private final boolean isDebug;
private int skyDarken;
- protected int randValue = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt();
+ //protected int randValue = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextInt(); // Patina - moved down
protected final int addend = 1013904223;
protected float oRainLevel;
public float rainLevel;
protected float oThunderLevel;
public float thunderLevel;
public final Random random = new org.yatopiamc.yatopia.server.util.FastRandom();
+ protected int randValue = random.nextInt(); // Patina - don't create new random instance
private final DimensionType dimensionType;
public final WritableLevelData levelData;
private final Supplier<ProfilerFiller> profiler;
diff --git a/src/main/java/net/minecraft/world/level/levelgen/WorldGenSettings.java b/src/main/java/net/minecraft/world/level/levelgen/WorldGenSettings.java
index e3a2919e214c63aa8cc2334d30dade3daf39b92d..a580c191a0450c1088c32344b30a3f452913ac5e 100644
--- a/src/main/java/net/minecraft/world/level/levelgen/WorldGenSettings.java
+++ b/src/main/java/net/minecraft/world/level/levelgen/WorldGenSettings.java
@@ -86,7 +86,7 @@ public class WorldGenSettings {
}
public static WorldGenSettings makeDefault(RegistryAccess registryManager) {
- long i = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextLong();
+ long i = java.util.concurrent.ThreadLocalRandom.current().nextLong(); // Patina - don't create new random instance
return new WorldGenSettings(i, true, false, WorldGenSettings.withOverworld(registryManager.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY), DimensionType.defaultDimensions(registryManager, i), WorldGenSettings.makeDefaultOverworld(registryManager, i)));
}
@@ -215,7 +215,7 @@ public class WorldGenSettings {
}).orElse("default");
properties.put("level-type", s4);
- long i = (new org.yatopiamc.yatopia.server.util.FastRandom()).nextLong();
+ long i = java.util.concurrent.ThreadLocalRandom.current().nextLong(); // Patina - don't create new random instance
if (!s1.isEmpty()) {
try {
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 5ac260b44c97e82f4cd0436750fb5ff19d32a128..0291d6fca982c967e2d3ff31ea042d22b7e234d1 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -1216,7 +1216,7 @@ public final class CraftServer implements Server {
if (worlddimension == null) {
dimensionmanager = (DimensionType) console.registryHolder.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY).getOrThrow(DimensionType.OVERWORLD_LOCATION);
- chunkgenerator = WorldGenSettings.makeDefaultOverworld(console.registryHolder, (new org.yatopiamc.yatopia.server.util.FastRandom()).nextLong());
+ chunkgenerator = WorldGenSettings.makeDefaultOverworld(console.registryHolder, java.util.concurrent.ThreadLocalRandom.current().nextLong()); // Patina - don't create new random instance
} else {
dimensionmanager = worlddimension.type();
chunkgenerator = worlddimension.generator();