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) {