From 98adf0fb22595bc38e91824905eb4e3267d55e7a Mon Sep 17 00:00:00 2001 From: Chris Rico Date: Mon, 9 Apr 2012 22:57:27 -0500 Subject: [PATCH] Fix critical upgrade/repair bug. Initial changes to allow multiple player groups. --- .../citadel/entity/Reinforcement.java | 10 ++++++ .../citadel/listener/BlockListener.java | 4 +-- .../citadel/listener/PlayerListener.java | 32 ++----------------- 3 files changed, 15 insertions(+), 31 deletions(-) diff --git a/plugins/citadel-paper/src/com/untamedears/citadel/entity/Reinforcement.java b/plugins/citadel-paper/src/com/untamedears/citadel/entity/Reinforcement.java index 795f496d1..cbf77299b 100644 --- a/plugins/citadel-paper/src/com/untamedears/citadel/entity/Reinforcement.java +++ b/plugins/citadel-paper/src/com/untamedears/citadel/entity/Reinforcement.java @@ -130,6 +130,16 @@ public class Reinforcement { } return true; } + + public boolean isBypassable(Player player) { + String name = player.getDisplayName(); + switch (securityLevel) { + case PRIVATE: + return name.equals(owner.getFounder()); + default: + return name.equals(owner.getFounder()) || owner.hasMember(name); + } + } public boolean isSecurable() { Block block = getBlock(); diff --git a/plugins/citadel-paper/src/com/untamedears/citadel/listener/BlockListener.java b/plugins/citadel-paper/src/com/untamedears/citadel/listener/BlockListener.java index eb8283ae0..9363dd97c 100644 --- a/plugins/citadel-paper/src/com/untamedears/citadel/listener/BlockListener.java +++ b/plugins/citadel-paper/src/com/untamedears/citadel/listener/BlockListener.java @@ -62,7 +62,7 @@ public class BlockListener extends PluginConsumer implements Listener { } } - @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST) public void blockBreak(BlockBreakEvent bbe) { Block block = bbe.getBlock(); Player player = bbe.getPlayer(); @@ -72,7 +72,7 @@ public class BlockListener extends PluginConsumer implements Listener { if (reinforcement == null) return; PlayerState state = PlayerState.get(player); - if (state.isBypassMode() && reinforcement.isAccessible(player)) { + if (state.isBypassMode() && reinforcement.isBypassable(player)) { plugin.logVerbose("Player %s bypassed reinforcement %s", player.getDisplayName(), reinforcement); bbe.setCancelled(reinforcementBroken(reinforcement)); diff --git a/plugins/citadel-paper/src/com/untamedears/citadel/listener/PlayerListener.java b/plugins/citadel-paper/src/com/untamedears/citadel/listener/PlayerListener.java index 7c6386cc9..1220bf949 100644 --- a/plugins/citadel-paper/src/com/untamedears/citadel/listener/PlayerListener.java +++ b/plugins/citadel-paper/src/com/untamedears/citadel/listener/PlayerListener.java @@ -69,7 +69,7 @@ public class PlayerListener implements Listener { interact(pie); } - @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST) public void interact(PlayerInteractEvent pie) { if (!pie.hasBlock()) return; @@ -100,36 +100,10 @@ public class PlayerListener implements Listener { if (reinforcement == null) { createReinforcement(player, block); } else if (reinforcement.isAccessible(player)) { - ReinforcementMaterial material = ReinforcementMaterial.get(player.getItemInHand().getType()); - boolean accessChange = reinforcement.getSecurityLevel() != state.getSecurityLevel(); - boolean materialChange = material != null && reinforcement.getMaterialId() != material.getMaterialId(); - boolean repair = !materialChange && material != null && reinforcement.getHealth() < 1; - if (accessChange) { + if (reinforcement.getSecurityLevel() != state.getSecurityLevel()) { reinforcement.setSecurityLevel(state.getSecurityLevel()); - } - if (materialChange) { - player.getInventory().remove(material.getRequiredMaterials()); - reinforcement.setMaterialId(material.getMaterialId()); - reinforcement.setDurability(material.getStrength()); - } else if (repair) { - player.getInventory().remove(material.getRequiredMaterials()); - reinforcement.setDurability(reinforcement.getMaterial().getStrength()); - } - if (accessChange || materialChange || repair) { plugin.dao.save(reinforcement); - String message = null; - if (materialChange) { - message = "Upgraded reinforcement to " + material.getMaterial().name(); - } else if (repair) { - message = "Repaired reinforcement"; - } - if (accessChange) { - if (message == null) message = "Changed"; - else message += ","; - - message += " security level " + reinforcement.getSecurityLevel().name(); - } - sendMessage(player, ChatColor.GREEN, message); + sendMessage(player, ChatColor.GREEN, "Changed security level %s", reinforcement.getSecurityLevel().name()); } } else { sendMessage(player, ChatColor.RED, "You are not permitted to modify this reinforcement");