Skip to content

Commit 4952c04

Browse files
Don't use level random in entity constructors (#8122)
1 parent 0193a9d commit 4952c04

File tree

3 files changed

+63
-0
lines changed

3 files changed

+63
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2+
From: Jake Potrebic <jake.m.potrebic@gmail.com>
3+
Date: Sun, 10 Jul 2022 14:13:22 -0700
4+
Subject: [PATCH] Don't use level random in entity constructors
5+
6+
Paper makes the entity random thread-safe
7+
and constructing an entity off the main thread
8+
should be supported. Some entities (for whatever
9+
reason) use the level's random in some places.
10+
11+
diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java
12+
index e5de2c1d11e5de88420caba35bf75c8bbd799db5..a9cdf9034ad269f7a71358443acc053288cfbe6d 100644
13+
--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java
14+
+++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java
15+
@@ -1028,7 +1028,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
16+
17+
BeeGoToHiveGoal() {
18+
super();
19+
- this.travellingTicks = Bee.this.level.random.nextInt(10);
20+
+ this.travellingTicks = Bee.this./* level. */random.nextInt(10); // Paper - use entity random
21+
this.blacklistedTargets = Lists.newArrayList();
22+
this.setFlags(EnumSet.of(Goal.Flag.MOVE));
23+
}
24+
@@ -1145,7 +1145,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
25+
26+
BeeGoToKnownFlowerGoal() {
27+
super();
28+
- this.travellingTicks = Bee.this.level.random.nextInt(10);
29+
+ this.travellingTicks = Bee.this./* level. */random.nextInt(10); // Paper - use entity random
30+
this.setFlags(EnumSet.of(Goal.Flag.MOVE));
31+
}
32+
33+
diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
34+
index 08f15739dd7e2ab80718ab8d983b483a46309deb..c58c296bbb0fbd1930dba38bcab7ec3103917ba5 100644
35+
--- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
36+
+++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
37+
@@ -64,7 +64,12 @@ public class ItemEntity extends Entity {
38+
}
39+
40+
public ItemEntity(Level world, double x, double y, double z, ItemStack stack) {
41+
- this(world, x, y, z, stack, world.random.nextDouble() * 0.2D - 0.1D, 0.2D, world.random.nextDouble() * 0.2D - 0.1D);
42+
+ // Paper start - don't use world random in entity constructor
43+
+ this(EntityType.ITEM, world);
44+
+ this.setPos(x, y, z);
45+
+ this.setDeltaMovement(this.random.nextDouble() * 0.2D - 0.1D, 0.2D, this.random.nextDouble() * 0.2D - 0.1D);
46+
+ this.setItem(stack);
47+
+ // Paper end
48+
}
49+
50+
public ItemEntity(Level world, double x, double y, double z, ItemStack stack, double velocityX, double velocityY, double velocityZ) {
51+
diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java
52+
index 8101f358975b35b5a2dafbade3d14a910e408fa2..e09271450cae84f6206a20d6622918fe37380d59 100644
53+
--- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java
54+
+++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java
55+
@@ -35,7 +35,7 @@ public class PrimedTnt extends Entity {
56+
public PrimedTnt(Level world, double x, double y, double z, @Nullable LivingEntity igniter) {
57+
this(EntityType.TNT, world);
58+
this.setPos(x, y, z);
59+
- double d3 = world.random.nextDouble() * 6.2831854820251465D;
60+
+ double d3 = this.random.nextDouble() * 6.2831854820251465D; // Paper - don't use world random in entity constructor
61+
62+
this.setDeltaMovement(-Math.sin(d3) * 0.02D, 0.20000000298023224D, -Math.cos(d3) * 0.02D);
63+
this.setFuse(80);

0 commit comments

Comments
 (0)