From 95b7be57fcb410f315a1de33d967d77075772be3 Mon Sep 17 00:00:00 2001 From: Brokkonaut Date: Wed, 1 Aug 2018 20:02:15 +0200 Subject: [PATCH] Dragon Egg teleport logging --- .../java/de/diddiz/LogBlock/LogBlock.java | 3 + src/main/java/de/diddiz/LogBlock/Logging.java | 4 +- .../LogBlock/listeners/DragonEggLogging.java | 73 +++++++++++++++++++ 3 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 src/main/java/de/diddiz/LogBlock/listeners/DragonEggLogging.java diff --git a/src/main/java/de/diddiz/LogBlock/LogBlock.java b/src/main/java/de/diddiz/LogBlock/LogBlock.java index d8137fe..1585c78 100644 --- a/src/main/java/de/diddiz/LogBlock/LogBlock.java +++ b/src/main/java/de/diddiz/LogBlock/LogBlock.java @@ -209,6 +209,9 @@ public class LogBlock extends JavaPlugin { if (isLogging(Logging.GRASSGROWTH) || isLogging(Logging.MYCELIUMSPREAD) || isLogging(Logging.VINEGROWTH) || isLogging(Logging.MUSHROOMSPREAD)) { pm.registerEvents(new BlockSpreadLogging(this), this); } + if (isLogging(Logging.DRAGONEGGTELEPORT)) { + pm.registerEvents(new DragonEggLogging(this), this); + } } @Override diff --git a/src/main/java/de/diddiz/LogBlock/Logging.java b/src/main/java/de/diddiz/LogBlock/Logging.java index 913d7d3..cd9323d 100644 --- a/src/main/java/de/diddiz/LogBlock/Logging.java +++ b/src/main/java/de/diddiz/LogBlock/Logging.java @@ -7,8 +7,8 @@ public enum Logging { SWITCHINTERACT, CAKEEAT, ENDERMEN, NOTEBLOCKINTERACT, DIODEINTERACT, COMPARATORINTERACT, PRESUREPLATEINTERACT, TRIPWIREINTERACT, CREATURECROPTRAMPLE, CROPTRAMPLE, NATURALSTRUCTUREGROW, GRASSGROWTH, MYCELIUMSPREAD, VINEGROWTH, MUSHROOMSPREAD, - WITHER(true), WITHER_SKULL(true), BONEMEALSTRUCTUREGROW, - WORLDEDIT, TNTMINECARTEXPLOSION(true), ENDERCRYSTALEXPLOSION(true), BEDEXPLOSION(true); + WITHER(true), WITHER_SKULL(true), BONEMEALSTRUCTUREGROW, WORLDEDIT, TNTMINECARTEXPLOSION(true), + ENDERCRYSTALEXPLOSION(true), BEDEXPLOSION(true), DRAGONEGGTELEPORT(true); public static final int length = Logging.values().length; private final boolean defaultEnabled; diff --git a/src/main/java/de/diddiz/LogBlock/listeners/DragonEggLogging.java b/src/main/java/de/diddiz/LogBlock/listeners/DragonEggLogging.java new file mode 100644 index 0000000..45fde6d --- /dev/null +++ b/src/main/java/de/diddiz/LogBlock/listeners/DragonEggLogging.java @@ -0,0 +1,73 @@ +package de.diddiz.LogBlock.listeners; + +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockState; +import org.bukkit.block.data.BlockData; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockFromToEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.scheduler.BukkitRunnable; + +import de.diddiz.LogBlock.Actor; +import de.diddiz.LogBlock.LogBlock; +import de.diddiz.LogBlock.Logging; +import de.diddiz.LogBlock.config.Config; +import de.diddiz.util.LoggingUtil; + +public class DragonEggLogging extends LoggingListener { + + private UUID lastDragonEggInteractionPlayer; + private Location lastDragonEggInteractionLocation; + + public DragonEggLogging(LogBlock lb) { + super(lb); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerInteract(PlayerInteractEvent event) { + if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.hasBlock() && event.getClickedBlock().getType() == Material.DRAGON_EGG) { + Block block = event.getClickedBlock(); + if (!Config.isLogging(block.getWorld(), Logging.DRAGONEGGTELEPORT)) { + return; + } + lastDragonEggInteractionPlayer = event.getPlayer().getUniqueId(); + lastDragonEggInteractionLocation = block.getLocation(); + new BukkitRunnable() { + @Override + public void run() { + lastDragonEggInteractionPlayer = null; + lastDragonEggInteractionLocation = null; + } + }.runTask(LogBlock.getInstance()); + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onDragonEggTeleport(BlockFromToEvent event) { + Block block = event.getBlock(); + Player teleportCause = null; + if (lastDragonEggInteractionPlayer != null && lastDragonEggInteractionLocation != null && lastDragonEggInteractionLocation.equals(block.getLocation())) { + teleportCause = Bukkit.getPlayer(lastDragonEggInteractionPlayer); + } + + if (block.getType() == Material.DRAGON_EGG && Config.isLogging(block.getWorld(), Logging.DRAGONEGGTELEPORT)) { + Actor actor = new Actor("DragonEgg"); + if (teleportCause != null) { + actor = Actor.actorFromEntity(teleportCause); + } + BlockData data = block.getBlockData(); + consumer.queueBlockBreak(actor, block.getLocation(), data); + BlockState finalState = event.getToBlock().getState(); + finalState.setBlockData(data); + LoggingUtil.smartLogBlockPlace(consumer, actor, event.getToBlock().getState(), finalState); + } + } +}