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).
This commit is contained in:
Brettflan 2012-01-18 23:31:33 -06:00
parent b4450b3bdb
commit 663a7e9454
3 changed files with 60 additions and 48 deletions

View File

@ -127,7 +127,10 @@ public class Conf
//public static double considerFactionsReallyOfflineAfterXMinutes = 0.0; //public static double considerFactionsReallyOfflineAfterXMinutes = 0.0;
public static int actionDeniedPainAmount = 2; public static int actionDeniedPainAmount = 2;
// commands which will be prevented if the player is a member of a permanent faction
public static Set<String> permanentFactionMemberDenyCommands = new HashSet<String>();
// commands which will be prevented when in claimed territory of another faction // commands which will be prevented when in claimed territory of another faction
public static Set<String> territoryNeutralDenyCommands = new HashSet<String>(); public static Set<String> territoryNeutralDenyCommands = new HashSet<String>();
public static Set<String> territoryEnemyDenyCommands = new HashSet<String>(); public static Set<String> territoryEnemyDenyCommands = new HashSet<String>();

View File

@ -84,7 +84,7 @@ public class CmdHelp extends FCommand
pageLines.add( p.cmdBase.cmdSethome.getUseageTemplate(true) ); pageLines.add( p.cmdBase.cmdSethome.getUseageTemplate(true) );
helpPages.add(pageLines); helpPages.add(pageLines);
if (Econ.isSetup() && Conf.bankEnabled) if (Econ.isSetup() && Conf.econEnabled && Conf.bankEnabled)
{ {
pageLines = new ArrayList<String>(); pageLines = new ArrayList<String>();
pageLines.add( p.txt.parse("<i>Your faction has a bank which is used to pay for certain" )); pageLines.add( p.txt.parse("<i>Your faction has a bank which is used to pay for certain" ));

View File

@ -29,6 +29,7 @@ import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers; import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.P; import com.massivecraft.factions.P;
import com.massivecraft.factions.integration.SpoutFeatures; import com.massivecraft.factions.integration.SpoutFeatures;
import com.massivecraft.factions.struct.FFlag;
import com.massivecraft.factions.struct.FPerm; import com.massivecraft.factions.struct.FPerm;
import com.massivecraft.factions.struct.Rel; import com.massivecraft.factions.struct.Rel;
@ -316,19 +317,11 @@ public class FactionsPlayerListener extends PlayerListener
public static boolean preventCommand(String fullCmd, Player player) 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; return false;
}
FPlayer me = FPlayers.i.get(player); FPlayer me = FPlayers.i.get(player);
Rel rel = me.getRelationToLocation();
if (rel.isAtLeast(Rel.TRUCE))
{
return false;
}
String shortCmd; // command without the slash at the beginning String shortCmd; // command without the slash at the beginning
if (fullCmd.startsWith("/")) if (fullCmd.startsWith("/"))
shortCmd = fullCmd.substring(1); shortCmd = fullCmd.substring(1);
@ -337,7 +330,30 @@ public class FactionsPlayerListener extends PlayerListener
shortCmd = fullCmd; shortCmd = fullCmd;
fullCmd = "/" + fullCmd; fullCmd = "/" + fullCmd;
} }
if
(
me.hasFaction()
&&
! me.hasAdminMode()
&&
! Conf.permanentFactionMemberDenyCommands.isEmpty()
&&
me.getFaction().getFlag(FFlag.PERMANENT)
&&
isCommandInList(fullCmd, shortCmd, Conf.permanentFactionMemberDenyCommands.iterator())
)
{
me.msg("<b>You can't use the command \""+fullCmd+"\" because you are in a permanent faction.");
return true;
}
Rel rel = me.getRelationToLocation();
if (rel.isAtLeast(Rel.TRUCE))
{
return false;
}
if if
( (
rel == Rel.NEUTRAL rel == Rel.NEUTRAL
@ -345,58 +361,51 @@ public class FactionsPlayerListener extends PlayerListener
! Conf.territoryNeutralDenyCommands.isEmpty() ! Conf.territoryNeutralDenyCommands.isEmpty()
&& &&
! me.hasAdminMode() ! me.hasAdminMode()
&&
isCommandInList(fullCmd, shortCmd, Conf.territoryNeutralDenyCommands.iterator())
) )
{ {
Iterator<String> iter = Conf.territoryNeutralDenyCommands.iterator(); me.msg("<b>You can't use the command \""+fullCmd+"\" in neutral territory.");
String cmdCheck; return true;
while (iter.hasNext())
{
cmdCheck = iter.next();
if (cmdCheck == null)
{
iter.remove();
continue;
}
cmdCheck = cmdCheck.toLowerCase();
if (fullCmd.startsWith(cmdCheck) || shortCmd.startsWith(cmdCheck))
{
me.msg("<b>You can't use the command \""+fullCmd+"\" in neutral territory.");
return true;
}
}
} }
else if
if
( (
rel == Rel.ENEMY rel == Rel.ENEMY
&& &&
! Conf.territoryEnemyDenyCommands.isEmpty() ! Conf.territoryEnemyDenyCommands.isEmpty()
&& &&
! me.hasAdminMode() ! me.hasAdminMode()
&&
isCommandInList(fullCmd, shortCmd, Conf.territoryEnemyDenyCommands.iterator())
) )
{ {
Iterator<String> iter = Conf.territoryEnemyDenyCommands.iterator(); me.msg("<b>You can't use the command \""+fullCmd+"\" in enemy territory.");
String cmdCheck; return true;
while (iter.hasNext()) }
{
cmdCheck = iter.next();
if (cmdCheck == null)
{
iter.remove();
continue;
}
cmdCheck = cmdCheck.toLowerCase(); return false;
if (fullCmd.startsWith(cmdCheck) || shortCmd.startsWith(cmdCheck)) }
{
me.msg("<b>You can't use the command \""+fullCmd+"\" in enemy territory."); private static boolean isCommandInList(String fullCmd, String shortCmd, Iterator<String> iter)
return true; {
} 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; return false;
} }
@Override @Override
public void onPlayerKick(PlayerKickEvent event) public void onPlayerKick(PlayerKickEvent event)
{ {