From 03b368e9c4cf8f0ee45464581f0631d7ecc56cd9 Mon Sep 17 00:00:00 2001 From: Brettflan Date: Wed, 18 Jan 2012 23:31:37 -0600 Subject: [PATCH] New conf.json setting "permanentFactionMemberDenyCommands" (list, default empty), which can be used to prevent members of permanent factions from using specific commands. Also, a minor fix for the help page regarding faction banks being shown if "bankEnabled" setting was enabled but "econEnabled" setting was false (economy as a whole disabled). --- src/com/massivecraft/factions/Conf.java | 5 +- .../massivecraft/factions/cmd/CmdHelp.java | 2 +- .../listeners/FactionsPlayerListener.java | 102 ++++++++++-------- 3 files changed, 60 insertions(+), 49 deletions(-) diff --git a/src/com/massivecraft/factions/Conf.java b/src/com/massivecraft/factions/Conf.java index 573f8678..789b7e69 100644 --- a/src/com/massivecraft/factions/Conf.java +++ b/src/com/massivecraft/factions/Conf.java @@ -117,7 +117,10 @@ public class Conf public static double considerFactionsReallyOfflineAfterXMinutes = 0.0; public static int actionDeniedPainAmount = 1; - + + // commands which will be prevented if the player is a member of a permanent faction + public static Set permanentFactionMemberDenyCommands = new HashSet(); + // commands which will be prevented when in claimed territory of another faction public static Set territoryNeutralDenyCommands = new HashSet(); public static Set territoryEnemyDenyCommands = new HashSet(); diff --git a/src/com/massivecraft/factions/cmd/CmdHelp.java b/src/com/massivecraft/factions/cmd/CmdHelp.java index fd12e940..d5e98f50 100644 --- a/src/com/massivecraft/factions/cmd/CmdHelp.java +++ b/src/com/massivecraft/factions/cmd/CmdHelp.java @@ -84,7 +84,7 @@ public class CmdHelp extends FCommand pageLines.add( p.cmdBase.cmdSethome.getUseageTemplate(true) ); helpPages.add(pageLines); - if (Econ.isSetup() && Conf.bankEnabled) + if (Econ.isSetup() && Conf.econEnabled && Conf.bankEnabled) { pageLines = new ArrayList(); pageLines.add( "" ); diff --git a/src/com/massivecraft/factions/listeners/FactionsPlayerListener.java b/src/com/massivecraft/factions/listeners/FactionsPlayerListener.java index bd1a4cbc..441b660f 100644 --- a/src/com/massivecraft/factions/listeners/FactionsPlayerListener.java +++ b/src/com/massivecraft/factions/listeners/FactionsPlayerListener.java @@ -515,13 +515,37 @@ public class FactionsPlayerListener extends PlayerListener public static boolean preventCommand(String fullCmd, Player player) { - if ((Conf.territoryNeutralDenyCommands.isEmpty() && Conf.territoryEnemyDenyCommands.isEmpty())) - { + if ((Conf.territoryNeutralDenyCommands.isEmpty() && Conf.territoryEnemyDenyCommands.isEmpty() && Conf.permanentFactionMemberDenyCommands.isEmpty())) return false; - } FPlayer me = FPlayers.i.get(player); + String shortCmd; // command without the slash at the beginning + if (fullCmd.startsWith("/")) + shortCmd = fullCmd.substring(1); + else + { + shortCmd = fullCmd; + fullCmd = "/" + fullCmd; + } + + if + ( + me.hasFaction() + && + ! me.isAdminBypassing() + && + ! Conf.permanentFactionMemberDenyCommands.isEmpty() + && + me.getFaction().isPermanent() + && + isCommandInList(fullCmd, shortCmd, Conf.permanentFactionMemberDenyCommands.iterator()) + ) + { + me.msg("You can't use the command \""+fullCmd+"\" because you are in a permanent faction."); + return true; + } + if (!me.isInOthersTerritory()) { return false; @@ -533,15 +557,6 @@ public class FactionsPlayerListener extends PlayerListener return false; } - String shortCmd; // command without the slash at the beginning - if (fullCmd.startsWith("/")) - shortCmd = fullCmd.substring(1); - else - { - shortCmd = fullCmd; - fullCmd = "/" + fullCmd; - } - if ( rel.isNeutral() @@ -549,54 +564,47 @@ public class FactionsPlayerListener extends PlayerListener ! Conf.territoryNeutralDenyCommands.isEmpty() && ! me.isAdminBypassing() + && + isCommandInList(fullCmd, shortCmd, Conf.territoryNeutralDenyCommands.iterator()) ) { - Iterator iter = Conf.territoryNeutralDenyCommands.iterator(); - String cmdCheck; - while (iter.hasNext()) - { - cmdCheck = iter.next(); - if (cmdCheck == null) - { - iter.remove(); - continue; - } - - cmdCheck = cmdCheck.toLowerCase(); - if (fullCmd.startsWith(cmdCheck) || shortCmd.startsWith(cmdCheck)) - { - me.msg("You can't use the command \""+fullCmd+"\" in neutral territory."); - return true; - } - } + me.msg("You can't use the command \""+fullCmd+"\" in neutral territory."); + return true; } - else if + + if ( rel.isEnemy() && ! Conf.territoryEnemyDenyCommands.isEmpty() && ! me.isAdminBypassing() + && + isCommandInList(fullCmd, shortCmd, Conf.territoryEnemyDenyCommands.iterator()) ) { - Iterator iter = Conf.territoryEnemyDenyCommands.iterator(); - String cmdCheck; - while (iter.hasNext()) - { - cmdCheck = iter.next(); - if (cmdCheck == null) - { - iter.remove(); - continue; - } + me.msg("You can't use the command \""+fullCmd+"\" in enemy territory."); + return true; + } - cmdCheck = cmdCheck.toLowerCase(); - if (fullCmd.startsWith(cmdCheck) || shortCmd.startsWith(cmdCheck)) - { - me.msg("You can't use the command \""+fullCmd+"\" in enemy territory."); - return true; - } + return false; + } + + private static boolean isCommandInList(String fullCmd, String shortCmd, Iterator iter) + { + String cmdCheck; + while (iter.hasNext()) + { + cmdCheck = iter.next(); + if (cmdCheck == null) + { + iter.remove(); + continue; } + + cmdCheck = cmdCheck.toLowerCase(); + if (fullCmd.startsWith(cmdCheck) || shortCmd.startsWith(cmdCheck)) + return true; } return false; }