From 5eabee6504543b63cf5c3d94e85943519c4362c1 Mon Sep 17 00:00:00 2001 From: Intelli Date: Mon, 19 Dec 2022 16:05:02 -0700 Subject: [PATCH] Added logging for dragon egg teleportation (#303) --- .../listener/block/BlockFromToListener.java | 33 ++++++++++++++++++ .../player/PlayerInteractListener.java | 34 +++++++++++++++---- 2 files changed, 61 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/coreprotect/listener/block/BlockFromToListener.java b/src/main/java/net/coreprotect/listener/block/BlockFromToListener.java index ff365b6..9eb797a 100644 --- a/src/main/java/net/coreprotect/listener/block/BlockFromToListener.java +++ b/src/main/java/net/coreprotect/listener/block/BlockFromToListener.java @@ -87,6 +87,39 @@ public final class BlockFromToListener extends Queue implements Listener { CacheHandler.lookupCache.put("" + x + "." + y + "." + z + "." + wid + "", new Object[] { unixtimestamp, f, type }); Queue.queueBlockPlace(f, toBlock.getState(), block.getType(), toBlockState, type, -1, 0, blockData.getAsString()); } + else if (type.equals(Material.DRAGON_EGG)) { + Location location = block.getLocation(); + int worldId = Util.getWorldId(location.getWorld().getName()); + int x = location.getBlockX(); + int y = location.getBlockY(); + int z = location.getBlockZ(); + String coordinates = x + "." + y + "." + z + "." + worldId + "." + type.name(); + String user = "#entity"; + + Object[] data = CacheHandler.interactCache.get(coordinates); + if (data != null && data[1] == Material.DRAGON_EGG) { + long newTime = System.currentTimeMillis(); + long oldTime = (long) data[0]; + + if ((newTime - oldTime) < 20) { // 50ms = 1 tick + user = (String) data[2]; + } + CacheHandler.interactCache.remove(coordinates); + } + + if (Config.getConfig(block.getWorld()).BLOCK_BREAK) { + Queue.queueBlockBreak(user, block.getState(), block.getType(), block.getBlockData().getAsString(), 0); + } + if (Config.getConfig(block.getWorld()).BLOCK_PLACE) { + Block toBlock = event.getToBlock(); + BlockState toBlockState = toBlock.getState(); + if (Config.getConfig(world).BLOCK_MOVEMENT) { + toBlockState = BlockUtil.gravityScan(toBlock.getLocation(), type, user).getState(); + } + + Queue.queueBlockPlace(user, toBlockState, block.getType(), toBlockState, type, -1, 0, blockData.getAsString()); + } + } } } diff --git a/src/main/java/net/coreprotect/listener/player/PlayerInteractListener.java b/src/main/java/net/coreprotect/listener/player/PlayerInteractListener.java index c19c395..5c57ea4 100755 --- a/src/main/java/net/coreprotect/listener/player/PlayerInteractListener.java +++ b/src/main/java/net/coreprotect/listener/player/PlayerInteractListener.java @@ -528,13 +528,20 @@ public final class PlayerInteractListener extends Queue implements Listener { /* Logging for players punching out fire blocks. */ if (event.getAction().equals(Action.LEFT_CLICK_BLOCK)) { World world = event.getClickedBlock().getWorld(); - if (event.useInteractedBlock() != Event.Result.DENY && Config.getConfig(world).BLOCK_BREAK) { - Block relativeBlock = event.getClickedBlock().getRelative(event.getBlockFace()); + if (event.useInteractedBlock() != Event.Result.DENY) { + Block block = event.getClickedBlock(); + if (block.getType() == Material.DRAGON_EGG) { + clickedDragonEgg(event.getPlayer(), block); + } - if (BlockGroup.FIRE.contains(relativeBlock.getType())) { - Player player = event.getPlayer(); - Material type = relativeBlock.getType(); - Queue.queueBlockBreak(player.getName(), relativeBlock.getState(), type, relativeBlock.getBlockData().getAsString(), 0); + if (Config.getConfig(world).BLOCK_BREAK) { + Block relativeBlock = event.getClickedBlock().getRelative(event.getBlockFace()); + + if (BlockGroup.FIRE.contains(relativeBlock.getType())) { + Player player = event.getPlayer(); + Material type = relativeBlock.getType(); + Queue.queueBlockBreak(player.getName(), relativeBlock.getState(), type, relativeBlock.getBlockData().getAsString(), 0); + } } } } @@ -663,6 +670,9 @@ public final class PlayerInteractListener extends Queue implements Listener { } } } + else if (type == Material.DRAGON_EGG) { + clickedDragonEgg(player, block); + } if (isCake || type == Material.CAKE) { boolean placeCandle = false; @@ -802,4 +812,16 @@ public final class PlayerInteractListener extends Queue implements Listener { } } } + + private void clickedDragonEgg(Player player, Block block) { + Location location = block.getLocation(); + long time = System.currentTimeMillis(); + int wid = Util.getWorldId(location.getWorld().getName()); + int x = location.getBlockX(); + int y = location.getBlockY(); + int z = location.getBlockZ(); + String coordinates = x + "." + y + "." + z + "." + wid + "." + Material.DRAGON_EGG.name(); + CacheHandler.interactCache.put(coordinates, new Object[] { time, Material.DRAGON_EGG, player.getName() }); + } + }