From afe5f426d3428fa579246f0094719185514e6f97 Mon Sep 17 00:00:00 2001 From: Almost10 <68785377+Almost10@users.noreply.github.com> Date: Sat, 31 Oct 2026 02:57:29 +0500 Subject: [PATCH 1/2] Keep creeper target as cause after the target dies --- .../bukkit/listener/EventAbstractionListener.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java index 0b274f505..832a99961 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java @@ -95,6 +95,7 @@ import org.bukkit.event.Event; import org.bukkit.event.Event.Result; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; @@ -129,6 +130,7 @@ import org.bukkit.event.entity.EntityKnockbackByEntityEvent; import org.bukkit.event.entity.EntityPickupItemEvent; import org.bukkit.event.entity.EntityTameEvent; +import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.entity.EntityUnleashEvent; import org.bukkit.event.entity.ExpBottleEvent; import org.bukkit.event.entity.LingeringPotionSplashEvent; @@ -399,6 +401,19 @@ private static void handleKnockback(T eve Events.fireToCancel(event, eventToFire); } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onEntityTarget(EntityTargetEvent event) { + if (!(event.getEntity() instanceof Creeper creeper)) { + return; + } + + if (event.getTarget() instanceof Player player) { + Cause.trackParentCause(creeper, player); + } else if (event.getReason() != EntityTargetEvent.TargetReason.TARGET_DIED) { + Cause.untrackParentCause(creeper); + } + } + @SuppressWarnings("UnstableApiUsage") @EventHandler(ignoreCancelled = true) public void onEntityExplode(EntityExplodeEvent event) { From f383f1c117ee8dff189b5ab54dca3187b9d673c3 Mon Sep 17 00:00:00 2001 From: Almost10 <68785377+Almost10@users.noreply.github.com> Date: Mon, 2 Nov 2026 09:37:54 +0500 Subject: [PATCH 2/2] Track creeper target on explosion prime instead of target event Move the tracking to an ExplosionPrimeEvent handler in WorldGuardEntityListener, as requested in review. The existing creeper cleanup in onEntityExplode clears it. --- .../bukkit/listener/EventAbstractionListener.java | 15 --------------- .../bukkit/listener/WorldGuardEntityListener.java | 7 +++++++ 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java index 832a99961..0b274f505 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java @@ -95,7 +95,6 @@ import org.bukkit.event.Event; import org.bukkit.event.Event.Result; import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; @@ -130,7 +129,6 @@ import org.bukkit.event.entity.EntityKnockbackByEntityEvent; import org.bukkit.event.entity.EntityPickupItemEvent; import org.bukkit.event.entity.EntityTameEvent; -import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.entity.EntityUnleashEvent; import org.bukkit.event.entity.ExpBottleEvent; import org.bukkit.event.entity.LingeringPotionSplashEvent; @@ -401,19 +399,6 @@ private static void handleKnockback(T eve Events.fireToCancel(event, eventToFire); } - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onEntityTarget(EntityTargetEvent event) { - if (!(event.getEntity() instanceof Creeper creeper)) { - return; - } - - if (event.getTarget() instanceof Player player) { - Cause.trackParentCause(creeper, player); - } else if (event.getReason() != EntityTargetEvent.TargetReason.TARGET_DIED) { - Cause.untrackParentCause(creeper); - } - } - @SuppressWarnings("UnstableApiUsage") @EventHandler(ignoreCancelled = true) public void onEntityExplode(EntityExplodeEvent event) { diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java index b6d981a7c..64f8f44b5 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java @@ -631,6 +631,13 @@ public void onExplosionPrime(ExplosionPrimeEvent event) { } } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onCreeperPrime(ExplosionPrimeEvent event) { + if (event.getEntity() instanceof Creeper creeper && creeper.getTarget() instanceof Player player) { + Cause.trackParentCause(creeper, player); + } + } + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) public void onCreatureSpawn(CreatureSpawnEvent event) { ConfigurationManager cfg = getConfig();