From 12d6db069e4c1ff02ccfca5c866b8d6ff62392e2 Mon Sep 17 00:00:00 2001 From: Daniel Boston Date: Tue, 23 Feb 2016 03:05:28 -0500 Subject: [PATCH] Just adding some more listeners for obvs exploits --- .../listeners/BlockBreakListener.java | 47 +++++++++++++++++-- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/plugins/hiddenore-paper/src/main/java/com/github/devotedmc/hiddenore/listeners/BlockBreakListener.java b/plugins/hiddenore-paper/src/main/java/com/github/devotedmc/hiddenore/listeners/BlockBreakListener.java index b53884acf..c2559cf3c 100644 --- a/plugins/hiddenore-paper/src/main/java/com/github/devotedmc/hiddenore/listeners/BlockBreakListener.java +++ b/plugins/hiddenore-paper/src/main/java/com/github/devotedmc/hiddenore/listeners/BlockBreakListener.java @@ -1,4 +1,5 @@ package com.github.devotedmc.hiddenore.listeners; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.ChatColor; import org.bukkit.block.Block; @@ -9,8 +10,10 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockExplodeEvent; import org.bukkit.event.block.BlockPistonExtendEvent; import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.inventory.ItemStack; @@ -30,7 +33,7 @@ public class BlockBreakListener implements Listener { * * @param event */ - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPistonExtend(BlockPistonExtendEvent event) { Block source = event.getBlock(); Block extension = event.getBlock().getRelative(event.getDirection()); @@ -51,7 +54,7 @@ public class BlockBreakListener implements Listener { * Should cover even more clever implementations involving sticky pistons to game things. * @param event */ - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPistonRetract(BlockPistonRetractEvent event) { if (!event.isSticky()) return; // only care about stick business. @@ -71,11 +74,42 @@ public class BlockBreakListener implements Listener { } } + /** + * Catch block placement directly. + * @param event + */ + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlacingThings(BlockPlaceEvent event) { + Location placed = event.getBlockPlaced().getLocation(); + if (event.getPlayer() != null) { + debug("Block place event at {0} by {1}", placed, event.getPlayer().getDisplayName()); + } else { + debug("Block place event at {0}", placed); + } + + HiddenOre.getTracking().trackBreak(placed); + } + + /** + * Catch explosions + * @param event + */ + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onExplodingThings(BlockExplodeEvent event) { + HiddenOre.getTracking().trackBreak(event.getBlock().getLocation()); + debug("Explosion event at {0}", event.getBlock().getLocation()); + for (Block b : event.blockList()) { + if (b != null) { + HiddenOre.getTracking().trackBreak(b.getLocation()); + } + } + } + /** * Prevent gaming by dropping sand/gravel/gravity blocks * @param event */ - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onFallingThings(EntityChangeBlockEvent event) { Material from = event.getBlock().getType(); if (!event.getBlock().isEmpty() && !event.getBlock().isLiquid()) { @@ -110,10 +144,13 @@ public class BlockBreakListener implements Listener { BlockConfig bc = Config.isDropBlock(blockName, sb); if (bc == null) return; - debug("Break of tracked type {0}", blockName); Player p = event.getPlayer(); - if(p.getItemInHand().getEnchantments().containsKey(Enchantment.SILK_TOUCH)) return; + if (p == null) return; + + debug("Break of tracked type {0} by {1}", blockName, p.getDisplayName()); + + if (p.getItemInHand().getEnchantments().containsKey(Enchantment.SILK_TOUCH)) return; boolean hasDrop = false;