aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0009-MC-Utils.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0009-MC-Utils.patch')
-rw-r--r--patches/server/0009-MC-Utils.patch179
1 files changed, 166 insertions, 13 deletions
diff --git a/patches/server/0009-MC-Utils.patch b/patches/server/0009-MC-Utils.patch
index 1912c615e2..e857714e6c 100644
--- a/patches/server/0009-MC-Utils.patch
+++ b/patches/server/0009-MC-Utils.patch
@@ -4037,36 +4037,41 @@ index 0000000000000000000000000000000000000000..559c959aff3c9deef867b9e425fba3e2
+ private MoonriseConstants() {}
+
+}
-diff --git a/src/main/java/ca/spottedleaf/moonrise/common/util/SimpleRandom.java b/src/main/java/ca/spottedleaf/moonrise/common/util/SimpleRandom.java
+diff --git a/src/main/java/ca/spottedleaf/moonrise/common/util/SimpleThreadUnsafeRandom.java b/src/main/java/ca/spottedleaf/moonrise/common/util/SimpleThreadUnsafeRandom.java
new file mode 100644
-index 0000000000000000000000000000000000000000..a9ff1c1a70faf4b7a64b265932f07a8b8f00c1ff
+index 0000000000000000000000000000000000000000..8d57b9c141fbe049aea248faa547dc97ba24cba5
--- /dev/null
-+++ b/src/main/java/ca/spottedleaf/moonrise/common/util/SimpleRandom.java
-@@ -0,0 +1,52 @@
++++ b/src/main/java/ca/spottedleaf/moonrise/common/util/SimpleThreadUnsafeRandom.java
+@@ -0,0 +1,105 @@
+package ca.spottedleaf.moonrise.common.util;
+
-+import net.minecraft.world.level.levelgen.LegacyRandomSource;
++import net.minecraft.util.Mth;
++import net.minecraft.util.RandomSource;
++import net.minecraft.world.level.levelgen.BitRandomSource;
++import net.minecraft.world.level.levelgen.MarsagliaPolarGaussian;
++import net.minecraft.world.level.levelgen.PositionalRandomFactory;
+
+/**
-+ * Avoid costly CAS of superclass
++ * Avoid costly CAS of superclass + division in nextInt
+ */
-+public final class SimpleRandom extends LegacyRandomSource {
++public final class SimpleThreadUnsafeRandom implements BitRandomSource {
+
+ private static final long MULTIPLIER = 25214903917L;
+ private static final long ADDEND = 11L;
+ private static final int BITS = 48;
-+ private static final long MASK = (1L << BITS) - 1;
++ private static final long MASK = (1L << BITS) - 1L;
+
+ private long value;
++ private final MarsagliaPolarGaussian gaussianSource = new MarsagliaPolarGaussian(this);
+
-+ public SimpleRandom(final long seed) {
-+ super(0L);
-+ this.value = seed;
++ public SimpleThreadUnsafeRandom(final long seed) {
++ this.setSeed(seed);
+ }
+
+ @Override
+ public void setSeed(final long seed) {
+ this.value = (seed ^ MULTIPLIER) & MASK;
++ this.gaussianSource.reset();
+ }
+
+ private long advanceSeed() {
@@ -4094,6 +4099,154 @@ index 0000000000000000000000000000000000000000..a9ff1c1a70faf4b7a64b265932f07a8b
+ final long value = this.advanceSeed() >>> (BITS - Integer.SIZE);
+ return (int)((value * (long)bound) >>> Integer.SIZE);
+ }
++
++ @Override
++ public double nextGaussian() {
++ return this.gaussianSource.nextGaussian();
++ }
++
++ @Override
++ public RandomSource fork() {
++ return new SimpleThreadUnsafeRandom(this.nextLong());
++ }
++
++ @Override
++ public PositionalRandomFactory forkPositional() {
++ return new SimpleRandomPositionalFactory(this.nextLong());
++ }
++
++ public static final class SimpleRandomPositionalFactory implements PositionalRandomFactory {
++
++ private final long seed;
++
++ public SimpleRandomPositionalFactory(final long seed) {
++ this.seed = seed;
++ }
++
++ public long getSeed() {
++ return this.seed;
++ }
++
++ @Override
++ public RandomSource fromHashOf(final String string) {
++ return new SimpleThreadUnsafeRandom((long)string.hashCode() ^ this.seed);
++ }
++
++ @Override
++ public RandomSource fromSeed(final long seed) {
++ return new SimpleThreadUnsafeRandom(seed);
++ }
++
++ @Override
++ public RandomSource at(final int x, final int y, final int z) {
++ return new SimpleThreadUnsafeRandom(Mth.getSeed(x, y, z) ^ this.seed);
++ }
++
++ @Override
++ public void parityConfigString(final StringBuilder stringBuilder) {
++ stringBuilder.append("SimpleRandomPositionalFactory{").append(this.seed).append('}');
++ }
++ }
++}
+diff --git a/src/main/java/ca/spottedleaf/moonrise/common/util/ThreadUnsafeRandom.java b/src/main/java/ca/spottedleaf/moonrise/common/util/ThreadUnsafeRandom.java
+new file mode 100644
+index 0000000000000000000000000000000000000000..12eb3add0931a4d77acdf6e875c42dda9c313dc3
+--- /dev/null
++++ b/src/main/java/ca/spottedleaf/moonrise/common/util/ThreadUnsafeRandom.java
+@@ -0,0 +1,94 @@
++package ca.spottedleaf.moonrise.common.util;
++
++import net.minecraft.util.Mth;
++import net.minecraft.util.RandomSource;
++import net.minecraft.world.level.levelgen.BitRandomSource;
++import net.minecraft.world.level.levelgen.MarsagliaPolarGaussian;
++import net.minecraft.world.level.levelgen.PositionalRandomFactory;
++
++/**
++ * Avoid costly CAS of superclass
++ */
++public final class ThreadUnsafeRandom implements BitRandomSource {
++
++ private static final long MULTIPLIER = 25214903917L;
++ private static final long ADDEND = 11L;
++ private static final int BITS = 48;
++ private static final long MASK = (1L << BITS) - 1L;
++
++ private long value;
++ private final MarsagliaPolarGaussian gaussianSource = new MarsagliaPolarGaussian(this);
++
++ public ThreadUnsafeRandom(final long seed) {
++ this.setSeed(seed);
++ }
++
++ @Override
++ public void setSeed(final long seed) {
++ this.value = (seed ^ MULTIPLIER) & MASK;
++ this.gaussianSource.reset();
++ }
++
++ private long advanceSeed() {
++ return this.value = ((this.value * MULTIPLIER) + ADDEND) & MASK;
++ }
++
++ @Override
++ public int next(final int bits) {
++ return (int)(this.advanceSeed() >>> (BITS - bits));
++ }
++
++ @Override
++ public int nextInt() {
++ final long seed = this.advanceSeed();
++ return (int)(seed >>> (BITS - Integer.SIZE));
++ }
++
++ @Override
++ public double nextGaussian() {
++ return this.gaussianSource.nextGaussian();
++ }
++
++ @Override
++ public RandomSource fork() {
++ return new ThreadUnsafeRandom(this.nextLong());
++ }
++
++ @Override
++ public PositionalRandomFactory forkPositional() {
++ return new ThreadUnsafeRandomPositionalFactory(this.nextLong());
++ }
++
++ public static final class ThreadUnsafeRandomPositionalFactory implements PositionalRandomFactory {
++
++ private final long seed;
++
++ public ThreadUnsafeRandomPositionalFactory(final long seed) {
++ this.seed = seed;
++ }
++
++ public long getSeed() {
++ return this.seed;
++ }
++
++ @Override
++ public RandomSource fromHashOf(final String string) {
++ return new ThreadUnsafeRandom((long)string.hashCode() ^ this.seed);
++ }
++
++ @Override
++ public RandomSource fromSeed(final long seed) {
++ return new ThreadUnsafeRandom(seed);
++ }
++
++ @Override
++ public RandomSource at(final int x, final int y, final int z) {
++ return new ThreadUnsafeRandom(Mth.getSeed(x, y, z) ^ this.seed);
++ }
++
++ @Override
++ public void parityConfigString(final StringBuilder stringBuilder) {
++ stringBuilder.append("ThreadUnsafeRandomPositionalFactory{").append(this.seed).append('}');
++ }
++ }
+}
diff --git a/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java b/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java
new file mode 100644
@@ -4542,7 +4695,7 @@ index 46cab7a8c7b87ab01b26074b04f5a02b3907cfc4..49019b4a9bc4e634d54a9b0acaf9229a
+ // Paper end
}
diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
-index f0d470d7770e119f734b9e72021c806d0ea8ecbd..c3fe4481dd35f80815716e48beeeb07b1f51e30b 100644
+index 0ea9eba1367858dfa5284524a8dd2f79daf6fc69..18b64c00fa73e233bf41f519db54a1d43c2a8b1f 100644
--- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
+++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
@@ -217,7 +217,7 @@ public class GlobalConfiguration extends ConfigurationPart {
@@ -5553,7 +5706,7 @@ index f6a3606b972064c4ec78487374e6197c0c447e27..8978fa74ceae06bef6aad3b74d654498
public ServerLevel(MinecraftServer minecraftserver, Executor executor, LevelStorageSource.LevelStorageAccess convertable_conversionsession, PrimaryLevelData iworlddataserver, ResourceKey<Level> resourcekey, LevelStem worlddimension, ChunkProgressListener worldloadlistener, boolean flag, long i, List<CustomSpawner> list, boolean flag1, @Nullable RandomSequences randomsequences, org.bukkit.World.Environment env, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider) {
super(iworlddataserver, resourcekey, minecraftserver.registryAccess(), worlddimension.type(), false, flag, i, minecraftserver.getMaxChainedNeighborUpdates(), gen, biomeProvider, env, spigotConfig -> minecraftserver.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess(), iworlddataserver.getGameRules()))); // Paper - create paper world configs
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
-index fd97a0e54ad8487b0c6f242fcb626f0b76f88274..785c7e11f92610be58b624d252d1858658496af7 100644
+index 2819ee5726c759e524ba558155bcc516f1b70606..c60e7f27ea4060e455a18feb6f6a7919e80a8fc8 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -309,6 +309,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player {