diff options
author | ementalo <ementalo@e251c2fe-e539-e718-e476-b85c1f46cddb> | 2011-06-02 23:09:59 +0000 |
---|---|---|
committer | ementalo <ementalo@e251c2fe-e539-e718-e476-b85c1f46cddb> | 2011-06-02 23:09:59 +0000 |
commit | d0b1d02a1547e050d3895dc473aab34c7b9e186c (patch) | |
tree | cf00fb377cedce41bd2d146bb9a19c634687ee2a /EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java | |
parent | 90963f75e2b37ba69df05ad0eccca403df0187a2 (diff) | |
download | Essentials-d0b1d02a1547e050d3895dc473aab34c7b9e186c.tar Essentials-d0b1d02a1547e050d3895dc473aab34c7b9e186c.tar.gz Essentials-d0b1d02a1547e050d3895dc473aab34c7b9e186c.tar.lz Essentials-d0b1d02a1547e050d3895dc473aab34c7b9e186c.tar.xz Essentials-d0b1d02a1547e050d3895dc473aab34c7b9e186c.zip |
[trunk] Protect refactors (formally known as 3.0) needs ***EXTENSIVE*** testing
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1574 e251c2fe-e539-e718-e476-b85c1f46cddb
Diffstat (limited to 'EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java')
-rw-r--r-- | EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java | 135 |
1 files changed, 63 insertions, 72 deletions
diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java index b32ac95a1..f3c7968aa 100644 --- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java +++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java @@ -3,6 +3,8 @@ package com.earth2me.essentials.protect; import com.earth2me.essentials.Essentials; import com.earth2me.essentials.User; import com.earth2me.essentials.Util; +import java.util.ArrayList; +import java.util.List; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; @@ -18,41 +20,25 @@ import org.bukkit.inventory.ItemStack; public class EssentialsProtectBlockListener extends BlockListener { private EssentialsProtect parent; - private int railBlockX; - private int railBlockY; - private int railBlockZ; - private EssentialsProtectData spData; public EssentialsProtectBlockListener(EssentialsProtect parent) { this.parent = parent; } - private void initialize() - { - if (spData != null) return; - spData = new EssentialsProtectData(); - } - @Override public void onBlockPlace(BlockPlaceEvent event) { if (event.isCancelled()) return; - initialize(); - ItemStack item = event.getItemInHand(); - User user = Essentials.getStatic().getUser(event.getPlayer()); + final ItemStack item = event.getItemInHand(); + final User user = parent.ess.getUser(event.getPlayer()); if (EssentialsProtect.playerSettings.get("protect.disable.build") && !user.canBuild()) { - if(Essentials.getStatic().getSettings().warnOnBuildDisallow()) - { - user.sendMessage(Util.i18n("buildAlert")); - } event.setCancelled(true); return; } - Block blockPlaced = event.getBlockPlaced(); int id = event.getBlockPlaced().getTypeId(); if (EssentialsProtect.checkProtectionItems(EssentialsProtect.blackListPlace, id) && !user.isAuthorized("essentials.protect.exemptplacement")) @@ -61,34 +47,33 @@ public class EssentialsProtectBlockListener extends BlockListener return; } - if (EssentialsProtect.checkProtectionItems(EssentialsProtect.onPlaceAlert, id)) + if (!EssentialsProtect.onPlaceAlert.isEmpty() && EssentialsProtect.onPlaceAlert.contains(String.valueOf(item.getTypeId()))) { parent.alert(user, item.getType().toString(), Util.i18n("alertPlaced")); } - if (spData.isBlockAboveProtectedRail(blockPlaced.getFace(BlockFace.DOWN))) - { - if (EssentialsProtect.genSettings.get("protect.protect.prevent-block-on-rails")) + Block blockPlaced = event.getBlockPlaced(); + Block below = blockPlaced.getFace(BlockFace.DOWN); + if (below.getType() == Material.RAILS) { + if (EssentialsProtect.genSettings.get("protect.protect.prevent.block-on-rail")) { - event.setCancelled(true); - return; + if (EssentialsProtect.getStorage().isProtected(below, user.getName())) { + event.setCancelled(true); + return; + } } } - if (blockPlaced.getType() == Material.RAILS) - { + List<Block> protect = new ArrayList<Block>(); + if (blockPlaced.getType() == Material.RAILS) { if (EssentialsProtect.genSettings.get("protect.protect.rails")) { if (user.isAuthorized("essentials.protect")) { - railBlockX = blockPlaced.getX(); - railBlockY = blockPlaced.getY(); - railBlockZ = blockPlaced.getZ(); - - spData.insertProtectionIntoDb(user.getWorld().getName(), user.getName(), railBlockX, railBlockY, railBlockZ); + protect.add(blockPlaced); if (EssentialsProtect.genSettings.get("protect.protect.block-below")) { - spData.insertProtectionIntoDb(user.getWorld().getName(), user.getName(), railBlockX, railBlockY - 1, railBlockZ); + protect.add(blockPlaced.getFace(BlockFace.DOWN)); } } } @@ -98,25 +83,17 @@ public class EssentialsProtectBlockListener extends BlockListener { if (user.isAuthorized("essentials.protect")) { - int signBlockX = blockPlaced.getX(); - int signBlockY = blockPlaced.getY(); - int signBlockZ = blockPlaced.getZ(); - - initialize(); - spData.insertProtectionIntoDb(user.getWorld().getName(), user.getName(), signBlockX, - signBlockY, signBlockZ); - + protect.add(blockPlaced); if (EssentialsProtect.genSettings.get("protect.protect.block-below")) { - signBlockX = event.getBlockAgainst().getX(); - signBlockY = event.getBlockAgainst().getY(); - signBlockZ = event.getBlockAgainst().getZ(); - spData.insertProtectionIntoDb(user.getWorld().getName(), user.getName(), signBlockX, - signBlockY, signBlockZ); + protect.add(event.getBlockAgainst()); } } } } + for (Block block : protect) { + EssentialsProtect.getStorage().protectBlock(block, user.getName()); + } } @Override @@ -133,14 +110,6 @@ public class EssentialsProtectBlockListener extends BlockListener event.setCancelled(true); return; } - - if (event.getBlock().getType() == Material.OBSIDIAN || - event.getBlock().getFace(BlockFace.DOWN).getType() == Material.OBSIDIAN) - { - event.setCancelled(EssentialsProtect.guardSettings.get("protect.prevent.portal-creation")); - return; - } - if ((event.getCause().equals(BlockIgniteEvent.IgniteCause.SPREAD))) { event.setCancelled(EssentialsProtect.guardSettings.get("protect.prevent.fire-spread")); @@ -158,12 +127,6 @@ public class EssentialsProtectBlockListener extends BlockListener event.setCancelled(EssentialsProtect.guardSettings.get("protect.prevent.lava-fire-spread")); return; } - - if (event.getCause().equals(BlockIgniteEvent.IgniteCause.LIGHTNING)) - { - event.setCancelled(EssentialsProtect.guardSettings.get("protect.prevent.lightning-fire-spread")); - return; - } } @Override @@ -226,8 +189,7 @@ public class EssentialsProtectBlockListener extends BlockListener public void onBlockBreak(BlockBreakEvent event) { if (event.isCancelled()) return; - initialize(); - User user = Essentials.getStatic().getUser(event.getPlayer()); + User user = parent.ess.getUser(event.getPlayer()); Block block = event.getBlock(); if (EssentialsProtect.playerSettings.get("protect.disable.build") && !user.canBuild()) { @@ -235,13 +197,13 @@ public class EssentialsProtectBlockListener extends BlockListener return; } - if (EssentialsProtect.checkProtectionItems(EssentialsProtect.breakBlackList, block.getTypeId()) && !user.isAuthorized("essentials.protect.exemptbreak")) + if(EssentialsProtect.breakBlackList.contains(String.valueOf(block.getTypeId())) && !user.isAuthorized("essentials.protect.exemptbreak")) { event.setCancelled(true); return; } - if (EssentialsProtect.checkProtectionItems(EssentialsProtect.onBreakAlert, block.getTypeId())) + if (!EssentialsProtect.onBreakAlert.isEmpty() && EssentialsProtect.onBreakAlert.contains(String.valueOf(block.getTypeId()))) { parent.alert(user, block.getType().toString(), Util.i18n("alertBroke")); } @@ -250,28 +212,57 @@ public class EssentialsProtectBlockListener extends BlockListener { if (block.getType() == Material.WALL_SIGN || block.getType() == Material.SIGN_POST || block.getType() == Material.RAILS) { - spData.removeProtectionFromDB(block, true); + EssentialsProtect.getStorage().unprotectBlock(block); + if (block.getType() == Material.RAILS || block.getType() == Material.SIGN_POST) { + Block below = block.getFace(BlockFace.DOWN); + EssentialsProtect.getStorage().unprotectBlock(below); + } else { + BlockFace[] faces = new BlockFace[] { + BlockFace.NORTH, + BlockFace.EAST, + BlockFace.SOUTH, + BlockFace.WEST + }; + for (BlockFace blockFace : faces) { + Block against = block.getFace(blockFace); + EssentialsProtect.getStorage().unprotectBlock(against); + } + } } else { - spData.removeProtectionFromDB(block); + EssentialsProtect.getStorage().unprotectBlock(block); } return; } else { - boolean canDestroy = spData.canDestroy(user.getWorld().getName(), user.getName(), block); - if (canDestroy) - { + + boolean isProtected = EssentialsProtect.getStorage().isProtected(block, user.getName()); + if (!isProtected) { if (block.getType() == Material.WALL_SIGN || block.getType() == Material.SIGN_POST || block.getType() == Material.RAILS) - { - spData.removeProtectionFromDB(block, true); + { + EssentialsProtect.getStorage().unprotectBlock(block); + if (block.getType() == Material.RAILS || block.getType() == Material.SIGN_POST) { + Block below = block.getFace(BlockFace.DOWN); + EssentialsProtect.getStorage().unprotectBlock(below); + } else { + BlockFace[] faces = new BlockFace[] { + BlockFace.NORTH, + BlockFace.EAST, + BlockFace.SOUTH, + BlockFace.WEST + }; + for (BlockFace blockFace : faces) { + Block against = block.getFace(blockFace); + EssentialsProtect.getStorage().unprotectBlock(against); + } + } } else { - spData.removeProtectionFromDB(block); + EssentialsProtect.getStorage().unprotectBlock(block); } - return; } event.setCancelled(true); return; |