improve logging of entitiy damaged by projectiles or tnt

This commit is contained in:
Brokkonaut
2019-12-01 05:14:10 +01:00
parent 3135fe8696
commit 60a771224b
2 changed files with 26 additions and 3 deletions

View File

@ -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());
}

View File

@ -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;
}
}