mirror of
https://github.com/CivMC/Civ.git
synced 2026-07-15 23:20:44 +00:00
Fix critical upgrade/repair bug.
Initial changes to allow multiple player groups.
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user