From 60a771224becb7e87c7135236f0bd08a3cd675f6 Mon Sep 17 00:00:00 2001 From: Brokkonaut Date: Sun, 1 Dec 2019 05:14:10 +0100 Subject: [PATCH] improve logging of entitiy damaged by projectiles or tnt --- .../listeners/AdvancedEntityLogging.java | 9 ++++++--- src/main/java/de/diddiz/util/LoggingUtil.java | 20 +++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/diddiz/LogBlock/listeners/AdvancedEntityLogging.java b/src/main/java/de/diddiz/LogBlock/listeners/AdvancedEntityLogging.java index baa1cb4..684d3a8 100644 --- a/src/main/java/de/diddiz/LogBlock/listeners/AdvancedEntityLogging.java +++ b/src/main/java/de/diddiz/LogBlock/listeners/AdvancedEntityLogging.java @@ -38,6 +38,7 @@ import de.diddiz.LogBlock.EntityChange.EntityChangeType; import de.diddiz.LogBlock.LogBlock; import de.diddiz.LogBlock.config.Config; import de.diddiz.LogBlock.config.EntityLogging; +import de.diddiz.util.LoggingUtil; import de.diddiz.worldedit.WorldEditHelper; import java.util.UUID; @@ -163,7 +164,7 @@ public class AdvancedEntityLogging extends LoggingListener { Actor actor = null; EntityDamageEvent lastDamage = entity.getLastDamageCause(); if (lastDamage instanceof EntityDamageByEntityEvent) { - Entity damager = ((EntityDamageByEntityEvent) lastDamage).getDamager(); + Entity damager = LoggingUtil.getRealDamager(((EntityDamageByEntityEvent) lastDamage).getDamager()); if (damager != null) { actor = Actor.actorFromEntity(damager); } @@ -190,7 +191,8 @@ public class AdvancedEntityLogging extends LoggingListener { if (Config.isLogging(entity.getWorld(), EntityLogging.DESTROY, entity)) { Actor actor; if (event instanceof HangingBreakByEntityEvent) { - actor = Actor.actorFromEntity(((HangingBreakByEntityEvent) event).getRemover()); + Entity damager = LoggingUtil.getRealDamager(((HangingBreakByEntityEvent) event).getRemover()); + actor = Actor.actorFromEntity(damager); } else { actor = new Actor(event.getCause().toString()); } @@ -207,7 +209,8 @@ public class AdvancedEntityLogging extends LoggingListener { if (Config.isLogging(entity.getWorld(), EntityLogging.MODIFY, entity)) { Actor actor; if (event instanceof EntityDamageByEntityEvent) { - actor = Actor.actorFromEntity(((EntityDamageByEntityEvent) event).getDamager()); + Entity damager = LoggingUtil.getRealDamager(((EntityDamageByEntityEvent) event).getDamager()); + actor = Actor.actorFromEntity(damager); } else { actor = new Actor(event.getCause().toString()); } diff --git a/src/main/java/de/diddiz/util/LoggingUtil.java b/src/main/java/de/diddiz/util/LoggingUtil.java index 477a484..a78f02c 100644 --- a/src/main/java/de/diddiz/util/LoggingUtil.java +++ b/src/main/java/de/diddiz/util/LoggingUtil.java @@ -14,6 +14,10 @@ import org.bukkit.block.data.Directional; import org.bukkit.block.data.type.Bell; import org.bukkit.block.data.type.Bell.Attachment; import org.bukkit.block.data.type.Lantern; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Projectile; +import org.bukkit.entity.TNTPrimed; +import org.bukkit.projectiles.ProjectileSource; import java.util.List; import static de.diddiz.LogBlock.config.Config.getWorldConfig; @@ -238,4 +242,20 @@ public class LoggingUtil { } return text.replaceAll("[^\\u0000-\\uFFFF]", "?"); } + + public static Entity getRealDamager(Entity damager) { + if (damager instanceof Projectile) { + ProjectileSource realDamager = ((Projectile) damager).getShooter(); + if (realDamager instanceof Entity) { + damager = (Entity) realDamager; + } + } + if (damager instanceof TNTPrimed) { + Entity realRemover = ((TNTPrimed) damager).getSource(); + if (realRemover != null) { + damager = realRemover; + } + } + return damager; + } }