aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0982-Respect-randomizeData-on-more-entities-when-spawning.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0982-Respect-randomizeData-on-more-entities-when-spawning.patch')
-rw-r--r--patches/server/0982-Respect-randomizeData-on-more-entities-when-spawning.patch61
1 files changed, 61 insertions, 0 deletions
diff --git a/patches/server/0982-Respect-randomizeData-on-more-entities-when-spawning.patch b/patches/server/0982-Respect-randomizeData-on-more-entities-when-spawning.patch
new file mode 100644
index 0000000000..dd08dc14b0
--- /dev/null
+++ b/patches/server/0982-Respect-randomizeData-on-more-entities-when-spawning.patch
@@ -0,0 +1,61 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic <[email protected]>
+Date: Thu, 13 Jul 2023 16:10:07 -0700
+Subject: [PATCH] Respect randomizeData on more entities when spawning
+
+* ItemEntity
+* PrimedTNT
+* FireworkRocketEntity
+* ExperienceOrb
+
+diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java
+index 7673e6c8a16455366d46a64df00c97663089c2ce..1a17875426468b287c8ea3f559ea516d0218f7a0 100644
+--- a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java
++++ b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java
+@@ -604,6 +604,11 @@ public abstract class CraftRegionAccessor implements RegionAccessor {
+ } else if (org.bukkit.entity.Item.class.isAssignableFrom(clazz)) {
+ entity = new net.minecraft.world.entity.item.ItemEntity(world, x, y, z, new net.minecraft.world.item.ItemStack(net.minecraft.world.item.Items.DIRT));
+ // Paper end
++ // Paper start - respect randomizeData
++ if (!randomizeData) {
++ entity.setDeltaMovement(net.minecraft.world.phys.Vec3.ZERO);
++ }
++ // Paper end - respect randomizeData
+ } else if (FallingBlock.class.isAssignableFrom(clazz)) {
+ BlockPos pos = BlockPos.containing(x, y, z);
+ entity = new FallingBlockEntity(world, x, y, z, this.getHandle().getBlockState(pos)); // Paper
+@@ -659,6 +664,14 @@ public abstract class CraftRegionAccessor implements RegionAccessor {
+ entity.moveTo(x, y, z, yaw, pitch);
+ } else if (Firework.class.isAssignableFrom(clazz)) {
+ entity = new FireworkRocketEntity(world, x, y, z, net.minecraft.world.item.ItemStack.EMPTY);
++ // Paper start - respect randomizeData
++ if (!randomizeData) {
++ // logic below was taken from FireworkRocketEntity constructor
++ entity.setDeltaMovement(0, 0.05, 0);
++ //noinspection PointlessArithmeticExpression
++ ((FireworkRocketEntity) entity).lifetime = 10 * 1 + 6;
++ }
++ // Paper end - respect randomizeData
+ }
+ } else if (Minecart.class.isAssignableFrom(clazz)) {
+ if (PoweredMinecart.class.isAssignableFrom(clazz)) {
+@@ -960,8 +973,19 @@ public abstract class CraftRegionAccessor implements RegionAccessor {
+ }
+ } else if (TNTPrimed.class.isAssignableFrom(clazz)) {
+ entity = new PrimedTnt(world, x, y, z, null);
++ // Paper start - respect randomizeData
++ if (!randomizeData) {
++ entity.setDeltaMovement(net.minecraft.world.phys.Vec3.ZERO);
++ }
++ // Paper end - respect randomizeData
+ } else if (ExperienceOrb.class.isAssignableFrom(clazz)) {
+ entity = new net.minecraft.world.entity.ExperienceOrb(world, x, y, z, 0, org.bukkit.entity.ExperienceOrb.SpawnReason.CUSTOM, null, null); // Paper
++ // Paper start - respect randomizeData
++ if (!randomizeData) {
++ entity.setDeltaMovement(net.minecraft.world.phys.Vec3.ZERO);
++ entity.setYRot(0);
++ }
++ // Paper end - respect randomizeData
+ } else if (LightningStrike.class.isAssignableFrom(clazz)) {
+ entity = net.minecraft.world.entity.EntityType.LIGHTNING_BOLT.create(world);
+ entity.moveTo(location.getX(), location.getY(), location.getZ());