Skip to content

Commit f225858

Browse files
authored
Fix firework entity not being removed when FireworkExplodeEvent is cancelled (#12268)
* Fix Firework not removed when FireworkExplodeEvent is canceled * JUnit require pass null * tweaks
1 parent 058455e commit f225858

File tree

3 files changed

+23
-20
lines changed

3 files changed

+23
-20
lines changed

paper-server/patches/features/0003-Entity-Activation-Range-2.0.patch

+8-8
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ index d95413af04121fe91ca0f3b0c70025b9808acef9..ad665c7535c615d2b03a3e7864be435f
366366
import org.slf4j.Logger;
367367

368368
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
369-
index cdb4d313eb33c049c8467fe5d31fb0d671737768..40b799fd90b0db13bdaa8834c021f5ca8f25ce10 100644
369+
index f45fb8ddb08d82ce76018b5a5c4fce5b3b319559..12f0dc36c5adcdbd9e1dad5f8512ac184da3960f 100644
370370
--- a/net/minecraft/server/level/ServerLevel.java
371371
+++ b/net/minecraft/server/level/ServerLevel.java
372372
@@ -551,6 +551,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -476,7 +476,7 @@ index 24735284fda151414d99faad401d25ba60995f9a..23b342cc31c7e72ade0e1ccad86a9ccf
476476
public void tick() {
477477
super.tick();
478478
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
479-
index 54cf80831372d102e8d2966ac104678caebdf336..d89c3949e16ff6cb0374da29ec6731d854b5f105 100644
479+
index 2facc7ad69bfe28c2f928a026ba5ab37387ab039..6256d7f8f4ee8bd4e3673b4e069af5cc0069c8f2 100644
480480
--- a/net/minecraft/world/entity/Entity.java
481481
+++ b/net/minecraft/world/entity/Entity.java
482482
@@ -381,6 +381,15 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -533,7 +533,7 @@ index 54cf80831372d102e8d2966ac104678caebdf336..d89c3949e16ff6cb0374da29ec6731d8
533533
movement = this.maybeBackOffFromEdge(movement, type);
534534
Vec3 vec3 = this.collide(movement);
535535
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
536-
index bf5fd2a6c8630ea2bb06881d4d365dda9a4e90ea..4713c29cc2add476f568163a29cb297f5d1049df 100644
536+
index e0c310d970a687945b6a771b4ecb94044128c33c..4546aca8e2e144ec207653c713fc49f849908827 100644
537537
--- a/net/minecraft/world/entity/LivingEntity.java
538538
+++ b/net/minecraft/world/entity/LivingEntity.java
539539
@@ -3103,6 +3103,14 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -552,7 +552,7 @@ index bf5fd2a6c8630ea2bb06881d4d365dda9a4e90ea..4713c29cc2add476f568163a29cb297f
552552
public void tick() {
553553
super.tick();
554554
diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java
555-
index f7d69db61d1293510428ae275e8a50571dde5ddf..1ed07fd23985a6bf8cf8300f74c92b7531a79fc6 100644
555+
index e12b47ca5eeb842bae606c0c7a8e3e4cf7d468a9..e330bf990e4874baed1b21cd8c9b44d66ec5b823 100644
556556
--- a/net/minecraft/world/entity/Mob.java
557557
+++ b/net/minecraft/world/entity/Mob.java
558558
@@ -215,6 +215,19 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
@@ -764,7 +764,7 @@ index c1e09e701757a300183b62d343ded03033e63aa7..56574f8ef879159edc0114da09300143
764764
public void tick() {
765765
super.tick();
766766
diff --git a/net/minecraft/world/entity/projectile/FireworkRocketEntity.java b/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
767-
index 7c0862c50b44555fb27ce7dc46f4ec95a3eb0022..774ca9e0b56fd175ae246051de762d0c4256ca58 100644
767+
index a3e4605a81eeaca77cc3a3ab937b75a415d83037..c7ae41b2cbc1eb85a6eb9c16813bd326fb8f49f0 100644
768768
--- a/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
769769
+++ b/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
770770
@@ -102,6 +102,21 @@ public class FireworkRocketEntity extends Projectile implements ItemSupplier {
@@ -776,11 +776,11 @@ index 7c0862c50b44555fb27ce7dc46f4ec95a3eb0022..774ca9e0b56fd175ae246051de762d0c
776776
+ public void inactiveTick() {
777777
+ this.life++;
778778
+ if (this.life > this.lifetime && this.level() instanceof ServerLevel serverLevel) {
779-
+ // CraftBukkit start
780-
+ if (!org.bukkit.craftbukkit.event.CraftEventFactory.callFireworkExplodeEvent(this).isCancelled()) {
779+
+ // Paper start - Call FireworkExplodeEvent
780+
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callFireworkExplodeEvent(this)) {
781781
+ this.explode(serverLevel);
782782
+ }
783-
+ // CraftBukkit end
783+
+ // Paper end - Call FireworkExplodeEvent
784784
+ }
785785
+ super.inactiveTick();
786786
+ }

paper-server/patches/sources/net/minecraft/world/entity/projectile/FireworkRocketEntity.java.patch

+9-9
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@
2222

2323
if (this.life > this.lifetime && this.level() instanceof ServerLevel serverLevel) {
2424
- this.explode(serverLevel);
25-
+ // CraftBukkit start
26-
+ if (!org.bukkit.craftbukkit.event.CraftEventFactory.callFireworkExplodeEvent(this).isCancelled()) {
25+
+ // Paper start - Call FireworkExplodeEvent
26+
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callFireworkExplodeEvent(this)) {
2727
+ this.explode(serverLevel);
2828
+ }
29-
+ // CraftBukkit end
29+
+ // Paper end - Call FireworkExplodeEvent
3030
}
3131
}
3232

@@ -43,11 +43,11 @@
4343
super.onHitEntity(result);
4444
if (this.level() instanceof ServerLevel serverLevel) {
4545
- this.explode(serverLevel);
46-
+ // CraftBukkit start
47-
+ if (!org.bukkit.craftbukkit.event.CraftEventFactory.callFireworkExplodeEvent(this).isCancelled()) {
46+
+ // Paper start - Call FireworkExplodeEvent
47+
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callFireworkExplodeEvent(this)) {
4848
+ this.explode(serverLevel);
4949
+ }
50-
+ // CraftBukkit end
50+
+ // Paper end - Call FireworkExplodeEvent
5151
}
5252
}
5353

@@ -56,11 +56,11 @@
5656
this.level().getBlockState(blockPos).entityInside(this.level(), blockPos, this);
5757
if (this.level() instanceof ServerLevel serverLevel && this.hasExplosion()) {
5858
- this.explode(serverLevel);
59-
+ // CraftBukkit start
60-
+ if (!org.bukkit.craftbukkit.event.CraftEventFactory.callFireworkExplodeEvent(this).isCancelled()) {
59+
+ // Paper start - Call FireworkExplodeEvent
60+
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callFireworkExplodeEvent(this)) {
6161
+ this.explode(serverLevel);
6262
+ }
63-
+ // CraftBukkit end
63+
+ // Paper end - Call FireworkExplodeEvent
6464
}
6565

6666
super.onHitBlock(result);

paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -1762,10 +1762,13 @@ public static Cancellable handleStatisticsIncrease(net.minecraft.world.entity.pl
17621762
return (Cancellable) event;
17631763
}
17641764

1765-
public static FireworkExplodeEvent callFireworkExplodeEvent(FireworkRocketEntity firework) {
1765+
public static boolean callFireworkExplodeEvent(FireworkRocketEntity firework) {
17661766
FireworkExplodeEvent event = new FireworkExplodeEvent((Firework) firework.getBukkitEntity());
1767-
firework.level().getCraftServer().getPluginManager().callEvent(event);
1768-
return event;
1767+
if (!event.callEvent()) {
1768+
firework.discard(null);
1769+
return false;
1770+
}
1771+
return true;
17691772
}
17701773

17711774
public static PrepareAnvilEvent callPrepareAnvilEvent(AnvilView view, ItemStack item) {

0 commit comments

Comments
 (0)