diff options
author | snowleo <schneeleo@gmail.com> | 2011-12-14 16:04:15 +0100 |
---|---|---|
committer | snowleo <schneeleo@gmail.com> | 2011-12-14 16:04:15 +0100 |
commit | 0f1eb9b4f910b4f61f4c89fbad14b6485c372756 (patch) | |
tree | 62257261b99340c51a36b9dbdc97d72ec226a01f /EssentialsSigns/src/com/earth2me/essentials/signs/SignBlockListener.java | |
parent | 503e837cfdf1eaf0a4ae8b04199fc1c60dd82923 (diff) | |
download | Essentials-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.java | 252 |
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; + } + } + } + } +} |