summaryrefslogtreecommitdiffstats
path: root/EssentialsSigns/src/com/earth2me/essentials/signs/SignBlockListener.java
diff options
context:
space:
mode:
authorsnowleo <schneeleo@gmail.com>2011-12-14 16:04:15 +0100
committersnowleo <schneeleo@gmail.com>2011-12-14 16:04:15 +0100
commit0f1eb9b4f910b4f61f4c89fbad14b6485c372756 (patch)
tree62257261b99340c51a36b9dbdc97d72ec226a01f /EssentialsSigns/src/com/earth2me/essentials/signs/SignBlockListener.java
parent503e837cfdf1eaf0a4ae8b04199fc1c60dd82923 (diff)
downloadEssentials-0f1eb9b4f910b4f61f4c89fbad14b6485c372756.tar
Essentials-0f1eb9b4f910b4f61f4c89fbad14b6485c372756.tar.gz
Essentials-0f1eb9b4f910b4f61f4c89fbad14b6485c372756.tar.lz
Essentials-0f1eb9b4f910b4f61f4c89fbad14b6485c372756.tar.xz
Essentials-0f1eb9b4f910b4f61f4c89fbad14b6485c372756.zip
Moved signs code to a new module
Diffstat (limited to 'EssentialsSigns/src/com/earth2me/essentials/signs/SignBlockListener.java')
-rw-r--r--EssentialsSigns/src/com/earth2me/essentials/signs/SignBlockListener.java252
1 files changed, 252 insertions, 0 deletions
diff --git a/EssentialsSigns/src/com/earth2me/essentials/signs/SignBlockListener.java b/EssentialsSigns/src/com/earth2me/essentials/signs/SignBlockListener.java
new file mode 100644
index 000000000..7cc461782
--- /dev/null
+++ b/EssentialsSigns/src/com/earth2me/essentials/signs/SignBlockListener.java
@@ -0,0 +1,252 @@
+package com.earth2me.essentials.signs;
+
+import com.earth2me.essentials.api.IEssentials;
+import com.earth2me.essentials.api.IUser;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.block.Sign;
+import org.bukkit.entity.Player;
+import org.bukkit.event.block.*;
+
+
+public class SignBlockListener extends BlockListener
+{
+ private final transient IEssentials ess;
+ private final static Logger LOGGER = Logger.getLogger("Minecraft");
+
+ public SignBlockListener(final IEssentials ess)
+ {
+ this.ess = ess;
+ }
+
+ @Override
+ public void onBlockBreak(final BlockBreakEvent event)
+ {
+ if (event.isCancelled())
+ {
+ 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 == Material.SIGN_POST.getId() || mat == Material.WALL_SIGN.getId())
+ {
+ final Sign csign = (Sign)block.getState();
+ for (Signs signs : Signs.values())
+ {
+ final EssentialsSign sign = signs.getSign();
+ if (csign.getLine(0).equalsIgnoreCase(sign.getSuccessName())
+ && !sign.onSignBreak(block, player, ess))
+ {
+ return true;
+ }
+ }
+ }
+ else
+ {
+ // 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 (Signs signs : Signs.values())
+ {
+ final EssentialsSign sign = signs.getSign();
+ 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;
+ }
+
+ @Override
+ public void onSignChange(final SignChangeEvent event)
+ {
+ if (event.isCancelled())
+ {
+ return;
+ }
+ IUser user = ess.getUser(event.getPlayer());
+ if (user.isAuthorized("essentials.signs.color"))
+ {
+ for (int i = 0; i < 4; i++)
+ {
+ event.setLine(i, event.getLine(i).replaceAll("&([0-9a-f])", "ยง$1"));
+ }
+ }
+ 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;
+ }
+ }
+ }
+
+ @Override
+ public void onBlockPlace(final BlockPlaceEvent event)
+ {
+ if (event.isCancelled())
+ {
+ return;
+ }
+
+ final Block against = event.getBlockAgainst();
+ if ((against.getType() == Material.WALL_SIGN
+ || against.getType() == Material.SIGN_POST)
+ && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(against)))
+ {
+ event.setCancelled(true);
+ return;
+ }
+ final Block block = event.getBlock();
+ if (block.getType() == Material.WALL_SIGN
+ || block.getType() == Material.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;
+ }
+ }
+ }
+
+ @Override
+ public void onBlockBurn(final BlockBurnEvent event)
+ {
+ if (event.isCancelled())
+ {
+ return;
+ }
+
+ final Block block = event.getBlock();
+ if (((block.getType() == Material.WALL_SIGN
+ || block.getType() == Material.SIGN_POST)
+ && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(block)))
+ || EssentialsSign.checkIfBlockBreaksSigns(block))
+ {
+ event.setCancelled(true);
+ return;
+ }
+ for (Signs signs : Signs.values())
+ {
+ final EssentialsSign sign = signs.getSign();
+ if (sign.getBlocks().contains(block.getType())
+ && !sign.onBlockBurn(block, ess))
+ {
+ event.setCancelled(true);
+ return;
+ }
+ }
+ }
+
+ @Override
+ public void onBlockIgnite(final BlockIgniteEvent event)
+ {
+ if (event.isCancelled())
+ {
+ return;
+ }
+
+ final Block block = event.getBlock();
+ if (((block.getType() == Material.WALL_SIGN
+ || block.getType() == Material.SIGN_POST)
+ && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(block)))
+ || EssentialsSign.checkIfBlockBreaksSigns(block))
+ {
+ event.setCancelled(true);
+ return;
+ }
+ for (Signs signs : Signs.values())
+ {
+ final EssentialsSign sign = signs.getSign();
+ if (sign.getBlocks().contains(block.getType())
+ && !sign.onBlockIgnite(block, ess))
+ {
+ event.setCancelled(true);
+ return;
+ }
+ }
+ }
+
+ @Override
+ public void onBlockPistonExtend(final BlockPistonExtendEvent event)
+ {
+ for (Block block : event.getBlocks())
+ {
+ if (((block.getType() == Material.WALL_SIGN
+ || block.getType() == Material.SIGN_POST)
+ && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(block)))
+ || EssentialsSign.checkIfBlockBreaksSigns(block))
+ {
+ event.setCancelled(true);
+ return;
+ }
+ for (Signs signs : Signs.values())
+ {
+ final EssentialsSign sign = signs.getSign();
+ if (sign.getBlocks().contains(block.getType())
+ && !sign.onBlockPush(block, ess))
+ {
+ event.setCancelled(true);
+ return;
+ }
+ }
+ }
+ }
+
+ @Override
+ public void onBlockPistonRetract(final BlockPistonRetractEvent event)
+ {
+ if (event.isSticky())
+ {
+ final Block block = event.getBlock();
+ if (((block.getType() == Material.WALL_SIGN
+ || block.getType() == Material.SIGN_POST)
+ && EssentialsSign.isValidSign(new EssentialsSign.BlockSign(block)))
+ || EssentialsSign.checkIfBlockBreaksSigns(block))
+ {
+ event.setCancelled(true);
+ return;
+ }
+ for (Signs signs : Signs.values())
+ {
+ final EssentialsSign sign = signs.getSign();
+ if (sign.getBlocks().contains(block.getType())
+ && !sign.onBlockPush(block, ess))
+ {
+ event.setCancelled(true);
+ return;
+ }
+ }
+ }
+ }
+}