From 3d2870cc4e6f771a37304ce9e6267663e10d01e6 Mon Sep 17 00:00:00 2001 From: ementalo Date: Wed, 10 Oct 2012 14:00:38 +0100 Subject: Esschat clean up Re-implement sign throttle Test #2331 --- .../ess3/signs/listeners/SignBlockListener.java | 267 +++++++++++++++++++++ .../ess3/signs/listeners/SignEntityListener.java | 82 +++++++ .../ess3/signs/listeners/SignPlayerListener.java | 67 ++++++ 3 files changed, 416 insertions(+) create mode 100644 EssentialsSigns/src/net/ess3/signs/listeners/SignBlockListener.java create mode 100644 EssentialsSigns/src/net/ess3/signs/listeners/SignEntityListener.java create mode 100644 EssentialsSigns/src/net/ess3/signs/listeners/SignPlayerListener.java (limited to 'EssentialsSigns/src/net/ess3/signs/listeners') diff --git a/EssentialsSigns/src/net/ess3/signs/listeners/SignBlockListener.java b/EssentialsSigns/src/net/ess3/signs/listeners/SignBlockListener.java new file mode 100644 index 000000000..9deea4de1 --- /dev/null +++ b/EssentialsSigns/src/net/ess3/signs/listeners/SignBlockListener.java @@ -0,0 +1,267 @@ +package net.ess3.signs.listeners; + +import java.util.logging.Level; +import java.util.logging.Logger; +import net.ess3.api.IEssentials; +import net.ess3.api.ISettings; +import net.ess3.api.IUser; +import net.ess3.permissions.Permissions; +import net.ess3.signs.EssentialsSign; +import net.ess3.signs.ISignsPlugin; +import net.ess3.signs.Signs; +import net.ess3.utils.FormatUtil; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.Sign; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.*; + + +public class SignBlockListener implements Listener +{ + private final transient IEssentials ess; + private final transient ISignsPlugin plugin; + private final static Logger LOGGER = Logger.getLogger("Minecraft"); + private final static int WALL_SIGN = Material.WALL_SIGN.getId(); + private final static int SIGN_POST = Material.SIGN_POST.getId(); + + public SignBlockListener(final IEssentials ess, final ISignsPlugin plugin) + { + this.ess = ess; + this.plugin = plugin; + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onBlockBreak(final BlockBreakEvent event) + { + ISettings settings = ess.getSettings(); + if (plugin.getSettings().areSignsDisabled()) + { + return; + } + + if (protectSignsAndBlocks(event.getBlock(), event.getPlayer())) + { + event.setCancelled(true); + } + } + + public boolean protectSignsAndBlocks(final Block block, final Player player) + { + final int mat = block.getTypeId(); + if (mat == SIGN_POST || mat == WALL_SIGN) + { + final Sign csign = (Sign)block.getState(); + + for (EssentialsSign sign : plugin.getSettings().getEnabledSigns()) + { + if (csign.getLine(0).equalsIgnoreCase(sign.getSuccessName()) + && !sign.onSignBreak(block, player, ess)) + { + return true; + } + } + } + // prevent any signs be broken by destroying the block they are attached to + if (EssentialsSign.checkIfBlockBreaksSigns(block)) + { + LOGGER.log(Level.INFO, "Prevented that a block was broken next to a sign."); + return true; + } + for (EssentialsSign sign : plugin.getSettings().getEnabledSigns()) + { + if (sign.getBlocks().contains(block.getType()) + && !sign.onBlockBreak(block, player, ess)) + { + LOGGER.log(Level.INFO, "A block was protected by a sign."); + return true; + } + } + return false; + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onSignChange(final SignChangeEvent event) + { + if (plugin.getSettings().areSignsDisabled()) + { + return; + } + IUser user = ess.getUserMap().getUser(event.getPlayer()); + + for (int i = 0; i < 4; i++) + { + event.setLine(i, FormatUtil.formatString(user, Permissions.SIGNS, event.getLine(i))); + } + + for (Signs signs : Signs.values()) + { + final EssentialsSign sign = signs.getSign(); + if (event.getLine(0).equalsIgnoreCase(sign.getSuccessName())) + { + event.setCancelled(true); + return; + } + if (event.getLine(0).equalsIgnoreCase(sign.getTemplateName()) + && !sign.onSignCreate(event, ess)) + { + event.setCancelled(true); + return; + } + } + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onBlockPlace(final BlockPlaceEvent event) + { + if (plugin.getSettings().areSignsDisabled()) + { + return; + } + + final Block against = event.getBlockAgainst(); + if ((against.getTypeId() == WALL_SIGN + || against.getTypeId() == SIGN_POST) + && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(against))) + { + event.setCancelled(true); + return; + } + final Block block = event.getBlock(); + if (block.getTypeId() == WALL_SIGN + || block.getTypeId() == SIGN_POST) + { + return; + } + for (Signs signs : Signs.values()) + { + final EssentialsSign sign = signs.getSign(); + if (sign.getBlocks().contains(block.getType()) + && !sign.onBlockPlace(block, event.getPlayer(), ess)) + { + event.setCancelled(true); + return; + } + } + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onBlockBurn(final BlockBurnEvent event) + { + if (plugin.getSettings().areSignsDisabled()) + { + return; + } + + final Block block = event.getBlock(); + if (((block.getTypeId() == WALL_SIGN + || block.getTypeId() == SIGN_POST) + && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(block))) + || EssentialsSign.checkIfBlockBreaksSigns(block)) + { + event.setCancelled(true); + return; + } + for (EssentialsSign sign : plugin.getSettings().getEnabledSigns()) + { + if (sign.getBlocks().contains(block.getType()) + && !sign.onBlockBurn(block, ess)) + { + event.setCancelled(true); + return; + } + } + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onBlockIgnite(final BlockIgniteEvent event) + { + if (plugin.getSettings().areSignsDisabled()) + { + return; + } + + final Block block = event.getBlock(); + if (((block.getTypeId() == WALL_SIGN + || block.getTypeId() == SIGN_POST) + && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(block))) + || EssentialsSign.checkIfBlockBreaksSigns(block)) + { + event.setCancelled(true); + return; + } + for (EssentialsSign sign : plugin.getSettings().getEnabledSigns()) + { + if (sign.getBlocks().contains(block.getType()) + && !sign.onBlockIgnite(block, ess)) + { + event.setCancelled(true); + return; + } + } + } + + @EventHandler(priority = EventPriority.LOW) + public void onBlockPistonExtend(final BlockPistonExtendEvent event) + { + if (plugin.getSettings().areSignsDisabled()) + { + return; + } + + for (Block block : event.getBlocks()) + { + if (((block.getTypeId() == WALL_SIGN + || block.getTypeId() == SIGN_POST) + && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(block))) + || EssentialsSign.checkIfBlockBreaksSigns(block)) + { + event.setCancelled(true); + return; + } + for (EssentialsSign sign : plugin.getSettings().getEnabledSigns()) + { + if (sign.getBlocks().contains(block.getType()) + && !sign.onBlockPush(block, ess)) + { + event.setCancelled(true); + return; + } + } + } + } + + @EventHandler(priority = EventPriority.LOW) + public void onBlockPistonRetract(final BlockPistonRetractEvent event) + { + if (plugin.getSettings().areSignsDisabled()) + { + return; + } + + if (event.isSticky()) + { + final Block block = event.getBlock(); + if (((block.getTypeId() == WALL_SIGN + || block.getTypeId() == SIGN_POST) + && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(block))) + || EssentialsSign.checkIfBlockBreaksSigns(block)) + { + event.setCancelled(true); + return; + } + for (EssentialsSign sign : plugin.getSettings().getEnabledSigns()) + { + if (sign.getBlocks().contains(block.getType()) + && !sign.onBlockPush(block, ess)) + { + event.setCancelled(true); + return; + } + } + } + } +} diff --git a/EssentialsSigns/src/net/ess3/signs/listeners/SignEntityListener.java b/EssentialsSigns/src/net/ess3/signs/listeners/SignEntityListener.java new file mode 100644 index 000000000..2be907813 --- /dev/null +++ b/EssentialsSigns/src/net/ess3/signs/listeners/SignEntityListener.java @@ -0,0 +1,82 @@ +package net.ess3.signs.listeners; + +import net.ess3.api.IEssentials; +import net.ess3.signs.EssentialsSign; +import net.ess3.signs.ISignsPlugin; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityChangeBlockEvent; +import org.bukkit.event.entity.EntityExplodeEvent; + + +public class SignEntityListener implements Listener +{ + private final transient IEssentials ess; + private final transient ISignsPlugin plugin; + + public SignEntityListener(final IEssentials ess, final ISignsPlugin plugin) + { + this.ess = ess; + this.plugin = plugin; + } + + @EventHandler(priority = EventPriority.LOW) + public void onEntityExplode(final EntityExplodeEvent event) + { + if (plugin.getSettings().areSignsDisabled()) + { + return; + } + + for (Block block : event.blockList()) + { + if (((block.getTypeId() == Material.WALL_SIGN.getId() + || block.getTypeId() == Material.SIGN_POST.getId()) + && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(block))) + || EssentialsSign.checkIfBlockBreaksSigns(block)) + { + event.setCancelled(true); + return; + } + for (EssentialsSign sign : plugin.getSettings().getEnabledSigns()) + { + if (sign.getBlocks().contains(block.getType())) + { + event.setCancelled(!sign.onBlockExplode(block, ess)); + return; + } + } + } + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onEntityChangeBlock(final EntityChangeBlockEvent event) + { + if (plugin.getSettings().areSignsDisabled()) + { + return; + } + + final Block block = event.getBlock(); + if (((block.getTypeId() == Material.WALL_SIGN.getId() + || block.getTypeId() == Material.SIGN_POST.getId()) + && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(block))) + || EssentialsSign.checkIfBlockBreaksSigns(block)) + { + event.setCancelled(true); + return; + } + for (EssentialsSign sign : plugin.getSettings().getEnabledSigns()) + { + if (sign.getBlocks().contains(block.getType()) + && !sign.onBlockBreak(block, ess)) + { + event.setCancelled(true); + return; + } + } + } +} diff --git a/EssentialsSigns/src/net/ess3/signs/listeners/SignPlayerListener.java b/EssentialsSigns/src/net/ess3/signs/listeners/SignPlayerListener.java new file mode 100644 index 000000000..8c6fc6899 --- /dev/null +++ b/EssentialsSigns/src/net/ess3/signs/listeners/SignPlayerListener.java @@ -0,0 +1,67 @@ +package net.ess3.signs.listeners; + +import net.ess3.api.IEssentials; +import net.ess3.signs.EssentialsSign; +import net.ess3.signs.ISignsPlugin; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.Sign; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; + + +public class SignPlayerListener implements Listener +{ + private final transient IEssentials ess; + private final transient ISignsPlugin plugin; + + public SignPlayerListener(final IEssentials ess, final ISignsPlugin plugin) + { + this.ess = ess; + this.plugin = plugin; + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onPlayerInteract(final PlayerInteractEvent event) + { + if (plugin.getSettings().areSignsDisabled() || event.getAction() != Action.RIGHT_CLICK_BLOCK) + { + return; + } + final Block block = event.getClickedBlock(); + if (block == null) + { + return; + } + + final int mat = block.getTypeId(); + if (mat == Material.SIGN_POST.getId() || mat == Material.WALL_SIGN.getId()) + { + final Sign csign = (Sign)block.getState(); + for (EssentialsSign sign : plugin.getSettings().getEnabledSigns()) + { + if (csign.getLine(0).equalsIgnoreCase(sign.getSuccessName())) + { + sign.onSignInteract(block, event.getPlayer(), ess, plugin); + event.setCancelled(true); + return; + } + } + } + else + { + for (EssentialsSign sign : plugin.getSettings().getEnabledSigns()) + { + if (sign.getBlocks().contains(block.getType()) + && !sign.onBlockInteract(block, event.getPlayer(), ess)) + { + event.setCancelled(true); + return; + } + } + } + } +} -- cgit v1.2.3