aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0984-Respect-randomizeData-on-more-entities-when-spawning.patch
blob: dd08dc14b0195c351a5ee7af44ac6864df9751f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
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());