forked from LogBlock/LogBlock
@ -6,7 +6,9 @@ import org.bukkit.block.BlockFace;
|
|||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
import org.bukkit.entity.ArmorStand;
|
import org.bukkit.entity.ArmorStand;
|
||||||
import org.bukkit.entity.Bee;
|
import org.bukkit.entity.Bee;
|
||||||
|
import org.bukkit.entity.EnderCrystal;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Hanging;
|
import org.bukkit.entity.Hanging;
|
||||||
import org.bukkit.entity.IronGolem;
|
import org.bukkit.entity.IronGolem;
|
||||||
import org.bukkit.entity.ItemFrame;
|
import org.bukkit.entity.ItemFrame;
|
||||||
@ -23,6 +25,7 @@ import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
|||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
import org.bukkit.event.entity.EntityDeathEvent;
|
import org.bukkit.event.entity.EntityDeathEvent;
|
||||||
|
import org.bukkit.event.entity.EntityPlaceEvent;
|
||||||
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
||||||
import org.bukkit.event.hanging.HangingBreakEvent;
|
import org.bukkit.event.hanging.HangingBreakEvent;
|
||||||
import org.bukkit.event.hanging.HangingPlaceEvent;
|
import org.bukkit.event.hanging.HangingPlaceEvent;
|
||||||
@ -52,6 +55,7 @@ public class AdvancedEntityLogging extends LoggingListener {
|
|||||||
// serialize them before the death event
|
// serialize them before the death event
|
||||||
private UUID lastEntityDamagedForDeathUUID;
|
private UUID lastEntityDamagedForDeathUUID;
|
||||||
private byte[] lastEntityDamagedForDeathSerialized;
|
private byte[] lastEntityDamagedForDeathSerialized;
|
||||||
|
private Entity lastEntityDamagedForDeathDamager;
|
||||||
|
|
||||||
public AdvancedEntityLogging(LogBlock lb) {
|
public AdvancedEntityLogging(LogBlock lb) {
|
||||||
super(lb);
|
super(lb);
|
||||||
@ -69,6 +73,7 @@ public class AdvancedEntityLogging extends LoggingListener {
|
|||||||
lastSpawnerEgg = false;
|
lastSpawnerEgg = false;
|
||||||
lastEntityDamagedForDeathUUID = null;
|
lastEntityDamagedForDeathUUID = null;
|
||||||
lastEntityDamagedForDeathSerialized = null;
|
lastEntityDamagedForDeathSerialized = null;
|
||||||
|
lastEntityDamagedForDeathDamager = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setLastSpawner(Player player, Class<? extends Entity> spawning, boolean spawnEgg) {
|
private void setLastSpawner(Player player, Class<? extends Entity> spawning, boolean spawnEgg) {
|
||||||
@ -139,6 +144,10 @@ public class AdvancedEntityLogging extends LoggingListener {
|
|||||||
if (event.getSpawnReason() == SpawnReason.CUSTOM || event.getSpawnReason() == SpawnReason.BEEHIVE) {
|
if (event.getSpawnReason() == SpawnReason.CUSTOM || event.getSpawnReason() == SpawnReason.BEEHIVE) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (event.getEntityType() == EntityType.ARMOR_STAND) {
|
||||||
|
resetOnTick();
|
||||||
|
return; // logged in the method below
|
||||||
|
}
|
||||||
LivingEntity entity = event.getEntity();
|
LivingEntity entity = event.getEntity();
|
||||||
if (Config.isLogging(entity.getWorld(), EntityLogging.SPAWN, entity)) {
|
if (Config.isLogging(entity.getWorld(), EntityLogging.SPAWN, entity)) {
|
||||||
Actor actor = null;
|
Actor actor = null;
|
||||||
@ -158,6 +167,23 @@ public class AdvancedEntityLogging extends LoggingListener {
|
|||||||
resetOnTick();
|
resetOnTick();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
|
public void onEntityPlace(EntityPlaceEvent event) {
|
||||||
|
if (!event.isCancelled()) {
|
||||||
|
Entity entity = event.getEntity();
|
||||||
|
if (Config.isLogging(entity.getWorld(), EntityLogging.SPAWN, entity)) {
|
||||||
|
Actor actor = null;
|
||||||
|
if (event.getPlayer() != null) {
|
||||||
|
actor = Actor.actorFromEntity(event.getPlayer());
|
||||||
|
}
|
||||||
|
if (actor == null) {
|
||||||
|
actor = new Actor("UNKNOWN");
|
||||||
|
}
|
||||||
|
queueEntitySpawnOrKill(entity, actor, EntityChange.EntityChangeType.CREATE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onEntityDeath(EntityDeathEvent event) {
|
public void onEntityDeath(EntityDeathEvent event) {
|
||||||
LivingEntity entity = event.getEntity();
|
LivingEntity entity = event.getEntity();
|
||||||
@ -228,6 +254,18 @@ public class AdvancedEntityLogging extends LoggingListener {
|
|||||||
lastEntityDamagedForDeathUUID = entity.getUniqueId();
|
lastEntityDamagedForDeathUUID = entity.getUniqueId();
|
||||||
lastEntityDamagedForDeathSerialized = WorldEditHelper.serializeEntity(entity);
|
lastEntityDamagedForDeathSerialized = WorldEditHelper.serializeEntity(entity);
|
||||||
}
|
}
|
||||||
|
if (entity instanceof EnderCrystal) {
|
||||||
|
if (Config.isLogging(entity.getWorld(), EntityLogging.DESTROY, entity)) {
|
||||||
|
if (event instanceof EntityDamageByEntityEvent) {
|
||||||
|
Entity damager = LoggingUtil.getRealDamager(((EntityDamageByEntityEvent) event).getDamager());
|
||||||
|
if (lastEntityDamagedForDeathDamager == null || !(damager instanceof EnderCrystal)) {
|
||||||
|
lastEntityDamagedForDeathDamager = damager;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Actor actor = lastEntityDamagedForDeathDamager != null ? Actor.actorFromEntity(lastEntityDamagedForDeathDamager) : new Actor(event.getCause().toString());
|
||||||
|
queueEntitySpawnOrKill(entity, actor, EntityChange.EntityChangeType.KILL);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
|
Reference in New Issue
Block a user