aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0080-Use-a-Shared-Random-for-Entities.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0080-Use-a-Shared-Random-for-Entities.patch')
-rw-r--r--patches/server/0080-Use-a-Shared-Random-for-Entities.patch113
1 files changed, 113 insertions, 0 deletions
diff --git a/patches/server/0080-Use-a-Shared-Random-for-Entities.patch b/patches/server/0080-Use-a-Shared-Random-for-Entities.patch
new file mode 100644
index 0000000000..8be701d5d4
--- /dev/null
+++ b/patches/server/0080-Use-a-Shared-Random-for-Entities.patch
@@ -0,0 +1,113 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Aikar <[email protected]>
+Date: Tue, 22 Mar 2016 00:33:47 -0400
+Subject: [PATCH] Use a Shared Random for Entities
+
+Reduces memory usage and provides ensures more randomness, Especially since a lot of garbage entity objects get created.
+
+diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
+index 1cd40266418a3805f05b09c554d561e2e83822e5..bc098b6a9c0e3b19b9154ab3727949232bddb20a 100644
+--- a/src/main/java/net/minecraft/world/entity/Entity.java
++++ b/src/main/java/net/minecraft/world/entity/Entity.java
+@@ -169,6 +169,79 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+ return tag.contains("Bukkit.updateLevel") && tag.getInt("Bukkit.updateLevel") >= level;
+ }
+
++ // Paper start - Share random for entities to make them more random
++ public static RandomSource SHARED_RANDOM = new RandomRandomSource();
++ private static final class RandomRandomSource extends java.util.Random implements net.minecraft.world.level.levelgen.BitRandomSource {
++ private boolean locked = false;
++
++ @Override
++ public synchronized void setSeed(long seed) {
++ if (locked) {
++ LOGGER.error("Ignoring setSeed on Entity.SHARED_RANDOM", new Throwable());
++ } else {
++ super.setSeed(seed);
++ locked = true;
++ }
++ }
++
++ @Override
++ public RandomSource fork() {
++ return new net.minecraft.world.level.levelgen.LegacyRandomSource(this.nextLong());
++ }
++
++ @Override
++ public net.minecraft.world.level.levelgen.PositionalRandomFactory forkPositional() {
++ return new net.minecraft.world.level.levelgen.LegacyRandomSource.LegacyPositionalRandomFactory(this.nextLong());
++ }
++
++ // these below are added to fix reobf issues that I don't wanna deal with right now
++ @Override
++ public int next(int bits) {
++ return super.next(bits);
++ }
++
++ @Override
++ public int nextInt(int origin, int bound) {
++ return net.minecraft.world.level.levelgen.BitRandomSource.super.nextInt(origin, bound);
++ }
++
++ @Override
++ public long nextLong() {
++ return net.minecraft.world.level.levelgen.BitRandomSource.super.nextLong();
++ }
++
++ @Override
++ public int nextInt() {
++ return net.minecraft.world.level.levelgen.BitRandomSource.super.nextInt();
++ }
++
++ @Override
++ public int nextInt(int bound) {
++ return net.minecraft.world.level.levelgen.BitRandomSource.super.nextInt(bound);
++ }
++
++ @Override
++ public boolean nextBoolean() {
++ return net.minecraft.world.level.levelgen.BitRandomSource.super.nextBoolean();
++ }
++
++ @Override
++ public float nextFloat() {
++ return net.minecraft.world.level.levelgen.BitRandomSource.super.nextFloat();
++ }
++
++ @Override
++ public double nextDouble() {
++ return net.minecraft.world.level.levelgen.BitRandomSource.super.nextDouble();
++ }
++
++ @Override
++ public double nextGaussian() {
++ return super.nextGaussian();
++ }
++ }
++ // Paper end - Share random for entities to make them more random
++
+ private CraftEntity bukkitEntity;
+
+ public CraftEntity getBukkitEntity() {
+@@ -364,7 +437,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
+ this.bb = Entity.INITIAL_AABB;
+ this.stuckSpeedMultiplier = Vec3.ZERO;
+ this.nextStep = 1.0F;
+- this.random = RandomSource.create();
++ this.random = SHARED_RANDOM; // Paper - Share random for entities to make them more random
+ this.remainingFireTicks = -this.getFireImmuneTicks();
+ this.fluidHeight = new Object2DoubleArrayMap(2);
+ this.fluidOnEyes = new HashSet();
+diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java
+index a98c7d9bf8dbaf9df51551fe66f7927798e9670f..43b4ea96c5c4a6234e5b83d41db9b85c1fe27b8f 100644
+--- a/src/main/java/net/minecraft/world/entity/animal/Squid.java
++++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java
+@@ -42,7 +42,7 @@ public class Squid extends WaterAnimal {
+
+ public Squid(EntityType<? extends Squid> type, Level world) {
+ super(type, world);
+- this.random.setSeed((long)this.getId());
++ //this.random.setSeed((long)this.getId()); // Paper - Share random for entities to make them more random
+ this.tentacleSpeed = 1.0F / (this.random.nextFloat() + 1.0F) * 0.2F;
+ }
+