From 610f3edcab370770dbb56b61169ebcc7a5c3cd2f Mon Sep 17 00:00:00 2001 From: Brokkonaut Date: Thu, 26 Aug 2021 20:54:55 +0200 Subject: [PATCH] Add EntityChangePreLogEvent --- .../java/de/diddiz/LogBlock/Consumer.java | 26 ++++++++- .../events/EntityChangePreLogEvent.java | 54 +++++++++++++++++++ .../listeners/AdvancedEntityLogging.java | 12 ++--- 3 files changed, 84 insertions(+), 8 deletions(-) create mode 100644 src/main/java/de/diddiz/LogBlock/events/EntityChangePreLogEvent.java diff --git a/src/main/java/de/diddiz/LogBlock/Consumer.java b/src/main/java/de/diddiz/LogBlock/Consumer.java index 474a549..d530f0a 100644 --- a/src/main/java/de/diddiz/LogBlock/Consumer.java +++ b/src/main/java/de/diddiz/LogBlock/Consumer.java @@ -53,6 +53,7 @@ import de.diddiz.LogBlock.blockstate.BlockStateCodecSign; import de.diddiz.LogBlock.blockstate.BlockStateCodecs; import de.diddiz.LogBlock.config.Config; import de.diddiz.LogBlock.events.BlockChangePreLogEvent; +import de.diddiz.LogBlock.events.EntityChangePreLogEvent; import de.diddiz.util.BukkitUtils; import de.diddiz.util.Utils; @@ -731,10 +732,31 @@ public class Consumer extends Thread { addQueueLast(new BlockRow(loc, actor, replacedMaterialId, replacedStateId, Utils.serializeYamlConfiguration(stateBefore), typeMaterialId, typeStateId, Utils.serializeYamlConfiguration(stateAfter), ca)); } - public void queueEntityModification(Actor actor, UUID entityId, EntityType entityType, Location loc, EntityChangeType changeType, YamlConfiguration data) { - if (actor == null || loc == null || changeType == null || entityId == null || entityType == null || hiddenPlayers.contains(actor.getName().toLowerCase()) || !isLogged(loc.getWorld())) { + public void queueEntityModification(Actor actor, Entity entity, EntityChangeType changeType, YamlConfiguration data) { + if (actor == null || changeType == null || entity == null || hiddenPlayers.contains(actor.getName().toLowerCase()) || !isLogged(entity.getWorld())) { return; } + UUID entityId = entity.getUniqueId(); + EntityType entityType = entity.getType(); + Location loc = entity.getLocation(); + + if (EntityChangePreLogEvent.getHandlerList().getRegisteredListeners().length > 0) { + // Create and call the event + EntityChangePreLogEvent event = new EntityChangePreLogEvent(actor, loc, entity, changeType, data); + logblock.getServer().getPluginManager().callEvent(event); + if (event.isCancelled()) { + return; + } + + // Update variables + actor = event.getOwnerActor(); + loc = event.getLocation(); + } + // Do this last so LogBlock still has final say in what is being added + if (actor == null || loc == null || hiddenPlayers.contains(actor.getName().toLowerCase()) || !isLogged(loc.getWorld())) { + return; + } + addQueueLast(new EntityRow(loc, actor, entityType, entityId, changeType, Utils.serializeYamlConfiguration(data))); } diff --git a/src/main/java/de/diddiz/LogBlock/events/EntityChangePreLogEvent.java b/src/main/java/de/diddiz/LogBlock/events/EntityChangePreLogEvent.java new file mode 100644 index 0000000..061aaa9 --- /dev/null +++ b/src/main/java/de/diddiz/LogBlock/events/EntityChangePreLogEvent.java @@ -0,0 +1,54 @@ +package de.diddiz.LogBlock.events; + +import de.diddiz.LogBlock.Actor; +import de.diddiz.LogBlock.EntityChange.EntityChangeType; +import org.bukkit.Location; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Entity; +import org.bukkit.event.HandlerList; + +public class EntityChangePreLogEvent extends PreLogEvent { + + private static final HandlerList handlers = new HandlerList(); + private Location location; + private Entity entity; + private EntityChangeType changeType; + private YamlConfiguration changeData; + + public EntityChangePreLogEvent(Actor owner, Location location, Entity entity, EntityChangeType changeType, YamlConfiguration changeData) { + super(owner); + this.location = location; + this.entity = entity; + this.changeType = changeType; + this.changeData = changeData; + } + + public Location getLocation() { + return location; + } + + public void setLocation(Location location) { + this.location = location; + } + + public Entity getEntity() { + return entity; + } + + public EntityChangeType getChangeType() { + return changeType; + } + + public YamlConfiguration getChangeData() { + return changeData; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/src/main/java/de/diddiz/LogBlock/listeners/AdvancedEntityLogging.java b/src/main/java/de/diddiz/LogBlock/listeners/AdvancedEntityLogging.java index c46f61e..f8b13e0 100644 --- a/src/main/java/de/diddiz/LogBlock/listeners/AdvancedEntityLogging.java +++ b/src/main/java/de/diddiz/LogBlock/listeners/AdvancedEntityLogging.java @@ -131,7 +131,7 @@ public class AdvancedEntityLogging extends LoggingListener { inHand = inHand.clone(); inHand.setAmount(1); data.set("item", inHand); - consumer.queueEntityModification(actor, entity.getUniqueId(), entity.getType(), entity.getLocation(), EntityChange.EntityChangeType.ADDEQUIP, data); + consumer.queueEntityModification(actor, entity, EntityChange.EntityChangeType.ADDEQUIP, data); } } } @@ -246,7 +246,7 @@ public class AdvancedEntityLogging extends LoggingListener { } YamlConfiguration data = new YamlConfiguration(); data.set("item", oldItem); - consumer.queueEntityModification(actor, entity.getUniqueId(), entity.getType(), entity.getLocation(), EntityChange.EntityChangeType.REMOVEEQUIP, data); + consumer.queueEntityModification(actor, entity, EntityChange.EntityChangeType.REMOVEEQUIP, data); } } } @@ -274,7 +274,7 @@ public class AdvancedEntityLogging extends LoggingListener { if (damager instanceof Bee && !((Bee) damager).hasStung()) { if (Config.isLogging(damager.getWorld(), EntityLogging.MODIFY, damager)) { Actor actor = Actor.actorFromEntity(event.getEntity()); - consumer.queueEntityModification(actor, damager.getUniqueId(), damager.getType(), damager.getLocation(), EntityChange.EntityChangeType.GET_STUNG, null); + consumer.queueEntityModification(actor, damager, EntityChange.EntityChangeType.GET_STUNG, null); } } } @@ -295,13 +295,13 @@ public class AdvancedEntityLogging extends LoggingListener { YamlConfiguration data = new YamlConfiguration(); data.set("item", oldItem); data.set("slot", event.getSlot().name()); - consumer.queueEntityModification(actor, entity.getUniqueId(), entity.getType(), entity.getLocation(), EntityChange.EntityChangeType.REMOVEEQUIP, data); + consumer.queueEntityModification(actor, entity, EntityChange.EntityChangeType.REMOVEEQUIP, data); } if (!newEmpty) { YamlConfiguration data = new YamlConfiguration(); data.set("item", newItem); data.set("slot", event.getSlot().name()); - consumer.queueEntityModification(actor, entity.getUniqueId(), entity.getType(), entity.getLocation(), EntityChange.EntityChangeType.ADDEQUIP, data); + consumer.queueEntityModification(actor, entity, EntityChange.EntityChangeType.ADDEQUIP, data); } } } @@ -319,6 +319,6 @@ public class AdvancedEntityLogging extends LoggingListener { } else { data.set("worldedit", WorldEditHelper.serializeEntity(entity)); } - consumer.queueEntityModification(actor, entity.getUniqueId(), entity.getType(), location, changeType, data); + consumer.queueEntityModification(actor, entity, changeType, data); } }