From 99edfc58322138136d604ec41715ca1b11fd56b1 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Tue, 8 Aug 2023 16:07:59 -0700 Subject: [PATCH] Respect randomizeData on more entities when spawning (#9483) --- ...Item-entities-with-World.spawnEntity.patch | 2 +- ...eData-on-more-entities-when-spawning.patch | 61 +++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 patches/server/Respect-randomizeData-on-more-entities-when-spawning.patch diff --git a/patches/server/Allow-spawning-Item-entities-with-World.spawnEntity.patch b/patches/server/Allow-spawning-Item-entities-with-World.spawnEntity.patch index eb79642a9..2cbc6f8e4 100644 --- a/patches/server/Allow-spawning-Item-entities-with-World.spawnEntity.patch +++ b/patches/server/Allow-spawning-Item-entities-with-World.spawnEntity.patch @@ -17,7 +17,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 entity.moveTo(x, y, z, yaw, pitch); + // Paper start + } 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.Item.byBlock(net.minecraft.world.level.block.Blocks.DIRT))); ++ 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 } else if (FallingBlock.class.isAssignableFrom(clazz)) { BlockPos pos = BlockPos.containing(x, y, z); diff --git a/patches/server/Respect-randomizeData-on-more-entities-when-spawning.patch b/patches/server/Respect-randomizeData-on-more-entities-when-spawning.patch new file mode 100644 index 000000000..aafe30274 --- /dev/null +++ b/patches/server/Respect-randomizeData-on-more-entities-when-spawning.patch @@ -0,0 +1,61 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jake Potrebic +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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java ++++ b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java +@@ -0,0 +0,0 @@ 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 +@@ -0,0 +0,0 @@ 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)) { +@@ -0,0 +0,0 @@ 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());