Fix critical upgrade/repair bug.

Initial changes to allow multiple player groups.
This commit is contained in:
Chris Rico
2012-04-09 22:57:27 -05:00
parent 7f1c36b52c
commit 98adf0fb22
3 changed files with 15 additions and 31 deletions

View File

@@ -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();

View File

@@ -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));

View File

@@ -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");