aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0850-Don-t-use-level-random-in-entity-constructors.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0850-Don-t-use-level-random-in-entity-constructors.patch')
-rw-r--r--patches/server/0850-Don-t-use-level-random-in-entity-constructors.patch63
1 files changed, 63 insertions, 0 deletions
diff --git a/patches/server/0850-Don-t-use-level-random-in-entity-constructors.patch b/patches/server/0850-Don-t-use-level-random-in-entity-constructors.patch
new file mode 100644
index 0000000000..c3f35be4a5
--- /dev/null
+++ b/patches/server/0850-Don-t-use-level-random-in-entity-constructors.patch
@@ -0,0 +1,63 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic <[email protected]>
+Date: Sun, 10 Jul 2022 14:13:22 -0700
+Subject: [PATCH] Don't use level random in entity constructors
+
+Paper makes the entity random thread-safe
+and constructing an entity off the main thread
+should be supported. Some entities (for whatever
+reason) use the level's random in some places.
+
+diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java
+index ea4ca82388f1526fc5af01f6cc406306d79b7499..f6062bf8c888baeb7b421150a2c64bf1af1a312b 100644
+--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java
++++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java
+@@ -1025,7 +1025,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
+
+ BeeGoToHiveGoal() {
+ super();
+- this.travellingTicks = Bee.this.level().random.nextInt(10);
++ this.travellingTicks = Bee.this./* level(). */random.nextInt(10); // Paper - use entity random
+ this.blacklistedTargets = Lists.newArrayList();
+ this.setFlags(EnumSet.of(Goal.Flag.MOVE));
+ }
+@@ -1142,7 +1142,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
+
+ BeeGoToKnownFlowerGoal() {
+ super();
+- this.travellingTicks = Bee.this.level().random.nextInt(10);
++ this.travellingTicks = Bee.this./* level(). */random.nextInt(10); // Paper - use entity random
+ this.setFlags(EnumSet.of(Goal.Flag.MOVE));
+ }
+
+diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
+index b1ae4702d7165794600b257fe8563a4ac48d922c..00ecef0ba7530ff2533fa9d5eaa8489da8796ead 100644
+--- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
++++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
+@@ -63,7 +63,12 @@ public class ItemEntity extends Entity implements TraceableEntity {
+ }
+
+ public ItemEntity(Level world, double x, double y, double z, ItemStack stack) {
+- this(world, x, y, z, stack, world.random.nextDouble() * 0.2D - 0.1D, 0.2D, world.random.nextDouble() * 0.2D - 0.1D);
++ // Paper start - don't use world random in entity constructor
++ this(EntityType.ITEM, world);
++ this.setPos(x, y, z);
++ this.setDeltaMovement(this.random.nextDouble() * 0.2D - 0.1D, 0.2D, this.random.nextDouble() * 0.2D - 0.1D);
++ this.setItem(stack);
++ // Paper end
+ }
+
+ public ItemEntity(Level world, double x, double y, double z, ItemStack stack, double velocityX, double velocityY, double velocityZ) {
+diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java
+index 1251c704e3b83888133b83757e7773c3e3664e6e..bf3301eb1341ba9d482e10873447c42bd670f5ed 100644
+--- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java
++++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java
+@@ -33,7 +33,7 @@ public class PrimedTnt extends Entity implements TraceableEntity {
+ public PrimedTnt(Level world, double x, double y, double z, @Nullable LivingEntity igniter) {
+ this(EntityType.TNT, world);
+ this.setPos(x, y, z);
+- double d3 = world.random.nextDouble() * 6.2831854820251465D;
++ double d3 = this.random.nextDouble() * 6.2831854820251465D; // Paper - don't use world random in entity constructor
+
+ this.setDeltaMovement(-Math.sin(d3) * 0.02D, 0.20000000298023224D, -Math.cos(d3) * 0.02D);
+ this.setFuse(80);