diff --git a/paper-server/patches/sources/net/minecraft/world/entity/item/ItemEntity.java.patch b/paper-server/patches/sources/net/minecraft/world/entity/item/ItemEntity.java.patch index 85422a4b93..187c2fd40f 100644 --- a/paper-server/patches/sources/net/minecraft/world/entity/item/ItemEntity.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/entity/item/ItemEntity.java.patch @@ -65,7 +65,21 @@ public ItemEntity(EntityType type, Level world) { super(type, world); -@@ -133,12 +144,15 @@ +@@ -61,7 +72,12 @@ + } + + 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 level random in entity constructors (to make them thread-safe) ++ 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 - Don't use level random in entity constructors + } + + public ItemEntity(Level world, double x, double y, double z, ItemStack stack, double velocityX, double velocityY, double velocityZ) { +@@ -133,12 +149,15 @@ @Override public void tick() { if (this.getItem().isEmpty()) { @@ -85,7 +99,7 @@ this.xo = this.getX(); this.yo = this.getY(); -@@ -162,7 +176,7 @@ +@@ -162,7 +181,7 @@ } } @@ -94,7 +108,7 @@ this.move(MoverType.SELF, this.getDeltaMovement()); this.applyEffectsFromBlocks(); float f = 0.98F; -@@ -188,9 +202,11 @@ +@@ -188,9 +207,11 @@ this.mergeWithNeighbours(); } @@ -106,7 +120,7 @@ this.hasImpulse |= this.updateInWaterStateAndDoFluidPushing(); if (!this.level().isClientSide) { -@@ -201,14 +217,42 @@ +@@ -201,14 +222,42 @@ } } @@ -151,7 +165,7 @@ public BlockPos getBlockPosBelowThatAffectsMyMovement() { return this.getOnPos(0.999999F); } -@@ -229,7 +273,10 @@ +@@ -229,7 +278,10 @@ private void mergeWithNeighbours() { if (this.isMergable()) { @@ -163,7 +177,7 @@ return entityitem != this && entityitem.isMergable(); }); Iterator iterator = list.iterator(); -@@ -238,6 +285,14 @@ +@@ -238,6 +290,14 @@ ItemEntity entityitem = (ItemEntity) iterator.next(); if (entityitem.isMergable()) { @@ -178,7 +192,7 @@ this.tryToMerge(entityitem); if (this.isRemoved()) { break; -@@ -251,7 +306,7 @@ +@@ -251,7 +311,7 @@ private boolean isMergable() { ItemStack itemstack = this.getItem(); @@ -187,7 +201,7 @@ } private void tryToMerge(ItemEntity other) { -@@ -259,7 +314,7 @@ +@@ -259,7 +319,7 @@ ItemStack itemstack1 = other.getItem(); if (Objects.equals(this.target, other.target) && ItemEntity.areMergable(itemstack, itemstack1)) { @@ -196,7 +210,7 @@ ItemEntity.merge(this, itemstack, other, itemstack1); } else { ItemEntity.merge(other, itemstack1, this, itemstack); -@@ -287,11 +342,16 @@ +@@ -287,11 +347,16 @@ } private static void merge(ItemEntity targetEntity, ItemStack targetStack, ItemEntity sourceEntity, ItemStack sourceStack) { @@ -214,7 +228,7 @@ } } -@@ -320,12 +380,17 @@ +@@ -320,12 +385,17 @@ } else if (!this.getItem().canBeHurtBy(source)) { return false; } else { @@ -233,7 +247,7 @@ } return true; -@@ -382,22 +447,86 @@ +@@ -382,22 +452,86 @@ } if (this.getItem().isEmpty()) { @@ -323,7 +337,7 @@ itemstack.setCount(i); } -@@ -438,6 +567,7 @@ +@@ -438,6 +572,7 @@ public void setItem(ItemStack stack) { this.getEntityData().set(ItemEntity.DATA_ITEM, stack); @@ -331,7 +345,7 @@ } @Override -@@ -492,7 +622,7 @@ +@@ -492,7 +627,7 @@ public void makeFakeItem() { this.setNeverPickUp(); diff --git a/paper-server/patches/sources/net/minecraft/world/entity/item/PrimedTnt.java.patch b/paper-server/patches/sources/net/minecraft/world/entity/item/PrimedTnt.java.patch index fffd1047b7..1120fe2bdf 100644 --- a/paper-server/patches/sources/net/minecraft/world/entity/item/PrimedTnt.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/entity/item/PrimedTnt.java.patch @@ -21,6 +21,15 @@ public PrimedTnt(EntityType type, Level world) { super(type, world); +@@ -61,7 +68,7 @@ + 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 level random in entity constructors + + this.setDeltaMovement(-Math.sin(d3) * 0.02D, 0.20000000298023224D, -Math.cos(d3) * 0.02D); + this.setFuse(80); @@ -94,10 +101,17 @@ @Override