Better flag system. Permission to change faction flags of choice. Possibility for other plugins to add faction flags, and more.
This commit is contained in:
		@@ -8,6 +8,8 @@ public class Const
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	public static final String COLLECTION_BOARD = BASENAME_+"board";
 | 
						public static final String COLLECTION_BOARD = BASENAME_+"board";
 | 
				
			||||||
	public static final String COLLECTION_FACTION = BASENAME_+"faction";
 | 
						public static final String COLLECTION_FACTION = BASENAME_+"faction";
 | 
				
			||||||
 | 
						public static final String COLLECTION_MFLAG = BASENAME_+"mflag";
 | 
				
			||||||
 | 
						public static final String COLLECTION_MPERM = BASENAME_+"mperm";
 | 
				
			||||||
	public static final String COLLECTION_MPLAYER = BASENAME_+"mplayer";
 | 
						public static final String COLLECTION_MPLAYER = BASENAME_+"mplayer";
 | 
				
			||||||
	public static final String COLLECTION_MCONF = BASENAME_+"mconf";
 | 
						public static final String COLLECTION_MCONF = BASENAME_+"mconf";
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,122 +0,0 @@
 | 
				
			|||||||
package com.massivecraft.factions;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import java.util.LinkedHashMap;
 | 
					 | 
				
			||||||
import java.util.Map;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.massivecraft.factions.entity.MConf;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * Flags that describe the nature of a faction and it's territory.
 | 
					 | 
				
			||||||
 * Can monsters spawn there? May fire spread etc? Is the faction permanent?
 | 
					 | 
				
			||||||
 * These flags have nothing to do with player-permission.
 | 
					 | 
				
			||||||
 * 
 | 
					 | 
				
			||||||
 * The flags are either true or false.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
public enum FFlag
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	// ENUM
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	// Faction flags
 | 
					 | 
				
			||||||
	PERMANENT("permanent", "<i>A permanent faction will never be deleted.", false),
 | 
					 | 
				
			||||||
	PEACEFUL("peaceful", "<i>Allways in truce with other factions.", false),
 | 
					 | 
				
			||||||
	INFPOWER("infpower", "<i>This flag gives the faction infinite power.", false),
 | 
					 | 
				
			||||||
	// This faction has infinite power: TODO: Add faction has enough method. Replace the permanentpower level 
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	// (Faction) Territory flags
 | 
					 | 
				
			||||||
	// If a faction later could have many different territories this would probably be in another enum
 | 
					 | 
				
			||||||
	POWERLOSS("powerloss", "<i>Is power lost on death in this territory?", true),
 | 
					 | 
				
			||||||
	PVP("pvp", "<i>Can you PVP in territory?", true),
 | 
					 | 
				
			||||||
	FRIENDLYFIRE("friendlyfire", "<i>Can friends hurt eachother here?", false),
 | 
					 | 
				
			||||||
	MONSTERS("monsters", "<i>Can monsters spawn in this territory?", true),
 | 
					 | 
				
			||||||
	EXPLOSIONS("explosions", "<i>Can explosions occur in this territory?", true),
 | 
					 | 
				
			||||||
	OFFLINE_EXPLOSIONS("offlineexplosions", "<i>Can explosions occur if faction is offline?", false),
 | 
					 | 
				
			||||||
	FIRESPREAD("firespread", "<i>Can fire spread in territory?", true),
 | 
					 | 
				
			||||||
	ENDERGRIEF("endergrief", "<i>Can endermen grief in this territory?", false),
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	// END OF LIST
 | 
					 | 
				
			||||||
	;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	// FIELDS
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	private final String nicename;
 | 
					 | 
				
			||||||
	public String getNicename() { return this.nicename; }
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	private final String desc;
 | 
					 | 
				
			||||||
	public String getDescription() { return this.desc; }
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public final boolean defaultDefault;
 | 
					 | 
				
			||||||
	public boolean getDefaultDefault() { return this.defaultDefault; }
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	// CONSTRUCT
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	private FFlag(String nicename, final String desc, boolean defaultDefault)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		this.nicename = nicename;
 | 
					 | 
				
			||||||
		this.desc = desc;
 | 
					 | 
				
			||||||
		this.defaultDefault = defaultDefault;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	// DEFAULTS
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public boolean getDefault()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		Boolean ret = MConf.get().defaultFactionFlags.get(this);
 | 
					 | 
				
			||||||
		if (ret == null) return this.getDefaultDefault();
 | 
					 | 
				
			||||||
		return ret; 
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public static Map<FFlag, Boolean> getDefaultDefaults()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		Map<FFlag, Boolean> ret = new LinkedHashMap<FFlag, Boolean>();
 | 
					 | 
				
			||||||
		for (FFlag flag : values())
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			ret.put(flag, flag.getDefaultDefault());
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return ret;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	// PARSE
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public static FFlag parse(String str)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		str = str.toLowerCase();
 | 
					 | 
				
			||||||
		if (str.startsWith("per")) return PERMANENT;
 | 
					 | 
				
			||||||
		if (str.startsWith("pea")) return PEACEFUL;
 | 
					 | 
				
			||||||
		if (str.startsWith("i")) return INFPOWER;
 | 
					 | 
				
			||||||
		if (str.startsWith("pow")) return POWERLOSS;
 | 
					 | 
				
			||||||
		if (str.startsWith("pvp")) return PVP;
 | 
					 | 
				
			||||||
		if (str.startsWith("fr") || str.startsWith("ff")) return FRIENDLYFIRE;
 | 
					 | 
				
			||||||
		if (str.startsWith("m")) return MONSTERS;
 | 
					 | 
				
			||||||
		if (str.startsWith("ex")) return EXPLOSIONS;
 | 
					 | 
				
			||||||
		if (str.startsWith("o")) return OFFLINE_EXPLOSIONS;
 | 
					 | 
				
			||||||
		if (str.startsWith("fi")) return FIRESPREAD;
 | 
					 | 
				
			||||||
		if (str.startsWith("en")) return ENDERGRIEF;		
 | 
					 | 
				
			||||||
		return null;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	// UTIL
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public String getStateInfo(boolean value, boolean withDesc)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		String ret = (value ? "<g>YES" : "<b>NOO") + "<c> " + this.getNicename();
 | 
					 | 
				
			||||||
		if (withDesc)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			ret += " " + this.getDescription();
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return ret;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -39,6 +39,7 @@ public enum FPerm
 | 
				
			|||||||
	ACCESS(false, "access", "grant territory",            Rel.LEADER, Rel.OFFICER),
 | 
						ACCESS(false, "access", "grant territory",            Rel.LEADER, Rel.OFFICER),
 | 
				
			||||||
	DISBAND(false, "disband", "disband the faction",      Rel.LEADER),
 | 
						DISBAND(false, "disband", "disband the faction",      Rel.LEADER),
 | 
				
			||||||
	PERMS(false, "perms", "manage permissions",           Rel.LEADER),
 | 
						PERMS(false, "perms", "manage permissions",           Rel.LEADER),
 | 
				
			||||||
 | 
						FLAGS(false, "flags", "manage flags",                 Rel.LEADER),
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// END OF LIST
 | 
						// END OF LIST
 | 
				
			||||||
	;
 | 
						;
 | 
				
			||||||
@@ -118,6 +119,7 @@ public enum FPerm
 | 
				
			|||||||
		if (str.startsWith("t"))   return TERRITORY;
 | 
							if (str.startsWith("t"))   return TERRITORY;
 | 
				
			||||||
		if (str.startsWith("di"))  return DISBAND;
 | 
							if (str.startsWith("di"))  return DISBAND;
 | 
				
			||||||
		if (str.startsWith("pe"))  return PERMS;
 | 
							if (str.startsWith("pe"))  return PERMS;
 | 
				
			||||||
 | 
							if (str.startsWith("f"))   return FLAGS;
 | 
				
			||||||
		return null;
 | 
							return null;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,6 @@ package com.massivecraft.factions;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.factions.adapter.BoardAdapter;
 | 
					import com.massivecraft.factions.adapter.BoardAdapter;
 | 
				
			||||||
import com.massivecraft.factions.adapter.BoardMapAdapter;
 | 
					import com.massivecraft.factions.adapter.BoardMapAdapter;
 | 
				
			||||||
import com.massivecraft.factions.adapter.FFlagAdapter;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.adapter.FPermAdapter;
 | 
					import com.massivecraft.factions.adapter.FPermAdapter;
 | 
				
			||||||
import com.massivecraft.factions.adapter.FactionPreprocessAdapter;
 | 
					import com.massivecraft.factions.adapter.FactionPreprocessAdapter;
 | 
				
			||||||
import com.massivecraft.factions.adapter.RelAdapter;
 | 
					import com.massivecraft.factions.adapter.RelAdapter;
 | 
				
			||||||
@@ -25,6 +24,7 @@ import com.massivecraft.factions.entity.Board;
 | 
				
			|||||||
import com.massivecraft.factions.entity.BoardColl;
 | 
					import com.massivecraft.factions.entity.BoardColl;
 | 
				
			||||||
import com.massivecraft.factions.entity.Faction;
 | 
					import com.massivecraft.factions.entity.Faction;
 | 
				
			||||||
import com.massivecraft.factions.entity.FactionColl;
 | 
					import com.massivecraft.factions.entity.FactionColl;
 | 
				
			||||||
 | 
					import com.massivecraft.factions.entity.MFlagColl;
 | 
				
			||||||
import com.massivecraft.factions.entity.MPlayerColl;
 | 
					import com.massivecraft.factions.entity.MPlayerColl;
 | 
				
			||||||
import com.massivecraft.factions.entity.MConfColl;
 | 
					import com.massivecraft.factions.entity.MConfColl;
 | 
				
			||||||
import com.massivecraft.factions.integration.dynmap.IntegrationDynmap;
 | 
					import com.massivecraft.factions.integration.dynmap.IntegrationDynmap;
 | 
				
			||||||
@@ -119,6 +119,7 @@ public class Factions extends MassivePlugin
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		// Initialize Database
 | 
							// Initialize Database
 | 
				
			||||||
		this.databaseInitialized = false;
 | 
							this.databaseInitialized = false;
 | 
				
			||||||
 | 
							MFlagColl.get().init();
 | 
				
			||||||
		MConfColl.get().init();
 | 
							MConfColl.get().init();
 | 
				
			||||||
		UpdateUtil.update();	
 | 
							UpdateUtil.update();	
 | 
				
			||||||
		MPlayerColl.get().init();
 | 
							MPlayerColl.get().init();
 | 
				
			||||||
@@ -184,7 +185,6 @@ public class Factions extends MassivePlugin
 | 
				
			|||||||
		.registerTypeAdapter(Board.MAP_TYPE, BoardMapAdapter.get())
 | 
							.registerTypeAdapter(Board.MAP_TYPE, BoardMapAdapter.get())
 | 
				
			||||||
		.registerTypeAdapter(Rel.class, RelAdapter.get())
 | 
							.registerTypeAdapter(Rel.class, RelAdapter.get())
 | 
				
			||||||
		.registerTypeAdapter(FPerm.class, FPermAdapter.get())
 | 
							.registerTypeAdapter(FPerm.class, FPermAdapter.get())
 | 
				
			||||||
		.registerTypeAdapter(FFlag.class, FFlagAdapter.get())
 | 
					 | 
				
			||||||
		;
 | 
							;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,6 @@ public enum Perm
 | 
				
			|||||||
	DISBAND("disband"),
 | 
						DISBAND("disband"),
 | 
				
			||||||
	FACTION("faction"),
 | 
						FACTION("faction"),
 | 
				
			||||||
	FLAG("flag"),
 | 
						FLAG("flag"),
 | 
				
			||||||
	FLAG_SET("flag.set"),
 | 
					 | 
				
			||||||
	HOME("home"),
 | 
						HOME("home"),
 | 
				
			||||||
	HOME_OTHER("home.other"),
 | 
						HOME_OTHER("home.other"),
 | 
				
			||||||
	INVITE("invite"),
 | 
						INVITE("invite"),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,29 +0,0 @@
 | 
				
			|||||||
package com.massivecraft.factions.adapter;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import java.lang.reflect.Type;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.massivecraft.factions.FFlag;
 | 
					 | 
				
			||||||
import com.massivecraft.massivecore.xlib.gson.JsonDeserializationContext;
 | 
					 | 
				
			||||||
import com.massivecraft.massivecore.xlib.gson.JsonDeserializer;
 | 
					 | 
				
			||||||
import com.massivecraft.massivecore.xlib.gson.JsonElement;
 | 
					 | 
				
			||||||
import com.massivecraft.massivecore.xlib.gson.JsonParseException;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class FFlagAdapter implements JsonDeserializer<FFlag>
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	// INSTANCE & CONSTRUCT
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	private static FFlagAdapter i = new FFlagAdapter();
 | 
					 | 
				
			||||||
	public static FFlagAdapter get() { return i; }
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	// OVERRIDE
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	@Override
 | 
					 | 
				
			||||||
	public FFlag deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		return FFlag.parse(json.getAsString());
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -26,7 +26,6 @@ public class CmdFactions extends FactionsCommand
 | 
				
			|||||||
	public CmdFactionsDescription cmdFactionsDescription = new CmdFactionsDescription();
 | 
						public CmdFactionsDescription cmdFactionsDescription = new CmdFactionsDescription();
 | 
				
			||||||
	public CmdFactionsSethome cmdFactionsSethome = new CmdFactionsSethome();
 | 
						public CmdFactionsSethome cmdFactionsSethome = new CmdFactionsSethome();
 | 
				
			||||||
	public CmdFactionsUnsethome cmdFactionsUnsethome = new CmdFactionsUnsethome();
 | 
						public CmdFactionsUnsethome cmdFactionsUnsethome = new CmdFactionsUnsethome();
 | 
				
			||||||
	public CmdFactionsOpen cmdFactionsOpen = new CmdFactionsOpen();
 | 
					 | 
				
			||||||
	public CmdFactionsInvite cmdFactionsInvite = new CmdFactionsInvite();
 | 
						public CmdFactionsInvite cmdFactionsInvite = new CmdFactionsInvite();
 | 
				
			||||||
	public CmdFactionsKick cmdFactionsKick = new CmdFactionsKick();
 | 
						public CmdFactionsKick cmdFactionsKick = new CmdFactionsKick();
 | 
				
			||||||
	public CmdFactionsTitle cmdFactionsTitle = new CmdFactionsTitle();
 | 
						public CmdFactionsTitle cmdFactionsTitle = new CmdFactionsTitle();
 | 
				
			||||||
@@ -72,7 +71,6 @@ public class CmdFactions extends FactionsCommand
 | 
				
			|||||||
		this.addSubCommand(this.cmdFactionsDescription);
 | 
							this.addSubCommand(this.cmdFactionsDescription);
 | 
				
			||||||
		this.addSubCommand(this.cmdFactionsSethome);
 | 
							this.addSubCommand(this.cmdFactionsSethome);
 | 
				
			||||||
		this.addSubCommand(this.cmdFactionsUnsethome);
 | 
							this.addSubCommand(this.cmdFactionsUnsethome);
 | 
				
			||||||
		this.addSubCommand(this.cmdFactionsOpen);
 | 
					 | 
				
			||||||
		this.addSubCommand(this.cmdFactionsInvite);
 | 
							this.addSubCommand(this.cmdFactionsInvite);
 | 
				
			||||||
		this.addSubCommand(this.cmdFactionsKick);
 | 
							this.addSubCommand(this.cmdFactionsKick);
 | 
				
			||||||
		this.addSubCommand(this.cmdFactionsTitle);
 | 
							this.addSubCommand(this.cmdFactionsTitle);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,6 +4,8 @@ import com.massivecraft.factions.Factions;
 | 
				
			|||||||
import com.massivecraft.factions.Perm;
 | 
					import com.massivecraft.factions.Perm;
 | 
				
			||||||
import com.massivecraft.massivecore.cmd.arg.ARBoolean;
 | 
					import com.massivecraft.massivecore.cmd.arg.ARBoolean;
 | 
				
			||||||
import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
 | 
					import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.util.IdUtil;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.util.Txt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class CmdFactionsAdmin extends FactionsCommand
 | 
					public class CmdFactionsAdmin extends FactionsCommand
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -20,7 +22,6 @@ public class CmdFactionsAdmin extends FactionsCommand
 | 
				
			|||||||
		this.addOptionalArg("on/off", "flip");
 | 
							this.addOptionalArg("on/off", "flip");
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		// Requirements
 | 
							// Requirements
 | 
				
			||||||
		// this.addRequirements(ReqFactionsEnabled.get());
 | 
					 | 
				
			||||||
		this.addRequirements(ReqHasPerm.get(Perm.ADMIN.node));
 | 
							this.addRequirements(ReqHasPerm.get(Perm.ADMIN.node));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -31,21 +32,21 @@ public class CmdFactionsAdmin extends FactionsCommand
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public void perform()
 | 
						public void perform()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
							// Args
 | 
				
			||||||
		Boolean target = this.arg(0, ARBoolean.get(), !msender.isUsingAdminMode());
 | 
							Boolean target = this.arg(0, ARBoolean.get(), !msender.isUsingAdminMode());
 | 
				
			||||||
		if (target == null) return;
 | 
							if (target == null) return;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 | 
							// Apply
 | 
				
			||||||
		msender.setUsingAdminMode(target);		
 | 
							msender.setUsingAdminMode(target);		
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		if (msender.isUsingAdminMode())
 | 
							// Inform
 | 
				
			||||||
		{
 | 
							String desc = Txt.parse(msender.isUsingAdminMode() ? "<g>ENABLED" : "<b>DISABLED");
 | 
				
			||||||
			msender.msg("<i>You have enabled admin bypass mode.");
 | 
							
 | 
				
			||||||
			Factions.get().log(msender.getId() + " has ENABLED admin bypass mode.");
 | 
							String messageYou = Txt.parse("<i>%s %s <i>admin bypass mode.", msender.getDisplayName(msender), desc);
 | 
				
			||||||
		}
 | 
							String messageLog = Txt.parse("<i>%s %s <i>admin bypass mode.", msender.getDisplayName(IdUtil.getConsole()), desc);
 | 
				
			||||||
		else
 | 
							
 | 
				
			||||||
		{
 | 
							msender.sendMessage(messageYou);
 | 
				
			||||||
			msender.msg("<i>You have disabled admin bypass mode.");
 | 
							Factions.get().log(messageLog);
 | 
				
			||||||
			Factions.get().log(msender.getId() + " DISABLED admin bypass mode.");
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,13 +2,13 @@ package com.massivecraft.factions.cmd;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.factions.cmd.arg.ARFaction;
 | 
					import com.massivecraft.factions.cmd.arg.ARFaction;
 | 
				
			||||||
import com.massivecraft.factions.entity.FactionColl;
 | 
					import com.massivecraft.factions.entity.FactionColl;
 | 
				
			||||||
 | 
					import com.massivecraft.factions.entity.MFlag;
 | 
				
			||||||
import com.massivecraft.factions.entity.MPlayer;
 | 
					import com.massivecraft.factions.entity.MPlayer;
 | 
				
			||||||
import com.massivecraft.factions.entity.Faction;
 | 
					import com.massivecraft.factions.entity.Faction;
 | 
				
			||||||
import com.massivecraft.factions.entity.MConf;
 | 
					import com.massivecraft.factions.entity.MConf;
 | 
				
			||||||
import com.massivecraft.factions.event.EventFactionsDisband;
 | 
					import com.massivecraft.factions.event.EventFactionsDisband;
 | 
				
			||||||
import com.massivecraft.factions.event.EventFactionsMembershipChange;
 | 
					import com.massivecraft.factions.event.EventFactionsMembershipChange;
 | 
				
			||||||
import com.massivecraft.factions.event.EventFactionsMembershipChange.MembershipChangeReason;
 | 
					import com.massivecraft.factions.event.EventFactionsMembershipChange.MembershipChangeReason;
 | 
				
			||||||
import com.massivecraft.factions.FFlag;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.FPerm;
 | 
					import com.massivecraft.factions.FPerm;
 | 
				
			||||||
import com.massivecraft.factions.Factions;
 | 
					import com.massivecraft.factions.Factions;
 | 
				
			||||||
import com.massivecraft.factions.Perm;
 | 
					import com.massivecraft.factions.Perm;
 | 
				
			||||||
@@ -49,7 +49,7 @@ public class CmdFactionsDisband extends FactionsCommand
 | 
				
			|||||||
		if ( ! FPerm.DISBAND.has(msender, faction, true)) return;
 | 
							if ( ! FPerm.DISBAND.has(msender, faction, true)) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Verify
 | 
							// Verify
 | 
				
			||||||
		if (faction.getFlag(FFlag.PERMANENT))
 | 
							if (faction.getFlag(MFlag.getPermanent()))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			msg("<i>This faction is designated as permanent, so you cannot disband it.");
 | 
								msg("<i>This faction is designated as permanent, so you cannot disband it.");
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,11 +8,11 @@ import java.util.Map;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.factions.cmd.arg.ARFaction;
 | 
					import com.massivecraft.factions.cmd.arg.ARFaction;
 | 
				
			||||||
import com.massivecraft.factions.entity.MConf;
 | 
					import com.massivecraft.factions.entity.MConf;
 | 
				
			||||||
 | 
					import com.massivecraft.factions.entity.MFlag;
 | 
				
			||||||
import com.massivecraft.factions.entity.MPlayer;
 | 
					import com.massivecraft.factions.entity.MPlayer;
 | 
				
			||||||
import com.massivecraft.factions.entity.Faction;
 | 
					import com.massivecraft.factions.entity.Faction;
 | 
				
			||||||
import com.massivecraft.factions.event.EventFactionsChunkChangeType;
 | 
					import com.massivecraft.factions.event.EventFactionsChunkChangeType;
 | 
				
			||||||
import com.massivecraft.factions.integration.Econ;
 | 
					import com.massivecraft.factions.integration.Econ;
 | 
				
			||||||
import com.massivecraft.factions.FFlag;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.Perm;
 | 
					import com.massivecraft.factions.Perm;
 | 
				
			||||||
import com.massivecraft.factions.PlayerRoleComparator;
 | 
					import com.massivecraft.factions.PlayerRoleComparator;
 | 
				
			||||||
import com.massivecraft.factions.Rel;
 | 
					import com.massivecraft.factions.Rel;
 | 
				
			||||||
@@ -59,6 +59,12 @@ public class CmdFactionsFaction extends FactionsCommand
 | 
				
			|||||||
		// INFO: Title
 | 
							// INFO: Title
 | 
				
			||||||
		msg(Txt.titleize("Faction " + faction.getName(msender)));
 | 
							msg(Txt.titleize("Faction " + faction.getName(msender)));
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 | 
							// INFO: Id (admin mode output only)
 | 
				
			||||||
 | 
							if (msender.isUsingAdminMode())
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								msg("<a>ID: <i>%s", faction.getId());	
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
		// INFO: Description
 | 
							// INFO: Description
 | 
				
			||||||
		msg("<a>Description: <i>%s", faction.getDescription());	
 | 
							msg("<a>Description: <i>%s", faction.getDescription());	
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
@@ -71,7 +77,8 @@ public class CmdFactionsFaction extends FactionsCommand
 | 
				
			|||||||
			msg("<a>Age: <i>%s", ageString);
 | 
								msg("<a>Age: <i>%s", ageString);
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			// INFO: Open
 | 
								// INFO: Open
 | 
				
			||||||
			msg("<a>Open: <i>"+(faction.isOpen() ? "<lime>Yes<i>, anyone can join" : "<rose>No<i>, only invited people can join"));
 | 
								// TODO: Why hardcode displaying the open flag only? We should rather display everything publicly editable.
 | 
				
			||||||
 | 
								msg("<a>Open: <i>"+(faction.getFlag(MFlag.getOpen()) ? "<lime>Yes<i>, anyone can join" : "<rose>No<i>, only invited people can join"));
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
			// INFO: Power
 | 
								// INFO: Power
 | 
				
			||||||
			double powerBoost = faction.getPowerBoost();
 | 
								double powerBoost = faction.getPowerBoost();
 | 
				
			||||||
@@ -113,12 +120,12 @@ public class CmdFactionsFaction extends FactionsCommand
 | 
				
			|||||||
			
 | 
								
 | 
				
			||||||
			// Display important flags
 | 
								// Display important flags
 | 
				
			||||||
			// TODO: Find the non default flags, and display them instead.
 | 
								// TODO: Find the non default flags, and display them instead.
 | 
				
			||||||
			if (faction.getFlag(FFlag.PERMANENT))
 | 
								if (faction.getFlag(MFlag.getPermanent()))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				msg("<a>This faction is permanent - remaining even with no followers.");
 | 
									msg("<a>This faction is permanent - remaining even with no followers.");
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			if (faction.getFlag(FFlag.PEACEFUL))
 | 
								if (faction.getFlag(MFlag.getPeaceful()))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				msg("<a>This faction is peaceful - in truce with everyone.");
 | 
									msg("<a>This faction is peaceful - in truce with everyone.");
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -129,7 +136,7 @@ public class CmdFactionsFaction extends FactionsCommand
 | 
				
			|||||||
		// List the relations to other factions
 | 
							// List the relations to other factions
 | 
				
			||||||
		Map<Rel, List<String>> relationNames = faction.getFactionNamesPerRelation(msender, true);
 | 
							Map<Rel, List<String>> relationNames = faction.getFactionNamesPerRelation(msender, true);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		if (faction.getFlag(FFlag.PEACEFUL))
 | 
							if (faction.getFlag(MFlag.getPeaceful()))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			sendMessage(Txt.parse("<a>In Truce with:<i> *everyone*"));
 | 
								sendMessage(Txt.parse("<a>In Truce with:<i> *everyone*"));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,10 +1,12 @@
 | 
				
			|||||||
package com.massivecraft.factions.cmd;
 | 
					package com.massivecraft.factions.cmd;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.factions.FFlag;
 | 
					import com.massivecraft.factions.FPerm;
 | 
				
			||||||
import com.massivecraft.factions.Perm;
 | 
					import com.massivecraft.factions.Perm;
 | 
				
			||||||
import com.massivecraft.factions.cmd.arg.ARFFlag;
 | 
					import com.massivecraft.factions.cmd.arg.ARMFlag;
 | 
				
			||||||
import com.massivecraft.factions.cmd.arg.ARFaction;
 | 
					import com.massivecraft.factions.cmd.arg.ARFaction;
 | 
				
			||||||
import com.massivecraft.factions.entity.Faction;
 | 
					import com.massivecraft.factions.entity.Faction;
 | 
				
			||||||
 | 
					import com.massivecraft.factions.entity.MFlag;
 | 
				
			||||||
 | 
					import com.massivecraft.factions.event.EventFactionsFlagChange;
 | 
				
			||||||
import com.massivecraft.massivecore.cmd.arg.ARBoolean;
 | 
					import com.massivecraft.massivecore.cmd.arg.ARBoolean;
 | 
				
			||||||
import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
 | 
					import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
 | 
				
			||||||
import com.massivecraft.massivecore.util.Txt;
 | 
					import com.massivecraft.massivecore.util.Txt;
 | 
				
			||||||
@@ -36,39 +38,67 @@ public class CmdFactionsFlag extends FactionsCommand
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public void perform()
 | 
						public void perform()
 | 
				
			||||||
	{	
 | 
						{	
 | 
				
			||||||
 | 
							// Arg: Faction
 | 
				
			||||||
		Faction faction = this.arg(0, ARFaction.get(), msenderFaction);
 | 
							Faction faction = this.arg(0, ARFaction.get(), msenderFaction);
 | 
				
			||||||
		if (faction == null) return;
 | 
							if (faction == null) return;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 | 
							// Case: Show All
 | 
				
			||||||
		if ( ! this.argIsSet(1))
 | 
							if ( ! this.argIsSet(1))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			msg(Txt.titleize("Flags for " + faction.describeTo(msender, true)));
 | 
								msg(Txt.titleize("Flags for " + faction.describeTo(msender, true)));
 | 
				
			||||||
			for (FFlag flag : FFlag.values())
 | 
								for (MFlag mflag : MFlag.getAll())
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				msg(flag.getStateInfo(faction.getFlag(flag), true));
 | 
									if (!mflag.isVisible() && !msender.isUsingAdminMode()) continue;
 | 
				
			||||||
 | 
									msg(mflag.getStateInfo(faction.getFlag(mflag), true));
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		FFlag flag = this.arg(1, ARFFlag.get());
 | 
							// Arg: MFlag
 | 
				
			||||||
		if (flag == null) return;
 | 
							MFlag mflag = this.arg(1, ARMFlag.get());
 | 
				
			||||||
 | 
							if (mflag == null) return;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 | 
							// Case: Show One
 | 
				
			||||||
		if ( ! this.argIsSet(2))
 | 
							if ( ! this.argIsSet(2))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			msg(Txt.titleize("Flag for " + faction.describeTo(msender, true)));
 | 
								msg(Txt.titleize("Flag for " + faction.describeTo(msender, true)));
 | 
				
			||||||
			msg(flag.getStateInfo(faction.getFlag(flag), true));
 | 
								msg(mflag.getStateInfo(faction.getFlag(mflag), true));
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 | 
							// Do the sender have the right to change flags for this faction?
 | 
				
			||||||
 | 
							if ( ! FPerm.PERMS.has(msender, faction, true)) return;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// Is this flag editable?
 | 
				
			||||||
 | 
							if (!msender.isUsingAdminMode() && !mflag.isEditable())
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								msg("<b>The flag <h>%s <b>is not editable.", mflag.getName());
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// Arg: Target Value
 | 
				
			||||||
		Boolean targetValue = this.arg(2, ARBoolean.get());
 | 
							Boolean targetValue = this.arg(2, ARBoolean.get());
 | 
				
			||||||
		if (targetValue == null) return;
 | 
							if (targetValue == null) return;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		// Do the sender have the right to change flags?
 | 
							// Event
 | 
				
			||||||
		if ( ! Perm.FLAG_SET.has(sender, true)) return;
 | 
							EventFactionsFlagChange event = new EventFactionsFlagChange(sender, faction, mflag, targetValue);
 | 
				
			||||||
 | 
							event.run();
 | 
				
			||||||
 | 
							if (event.isCancelled()) return;
 | 
				
			||||||
 | 
							targetValue = event.isNewValue();
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		// Do the change
 | 
							// Apply
 | 
				
			||||||
		msg(Txt.titleize("Flag for " + faction.describeTo(msender, true)));
 | 
							faction.setFlag(mflag, targetValue);
 | 
				
			||||||
		faction.setFlag(flag, targetValue);
 | 
							
 | 
				
			||||||
		msg(flag.getStateInfo(faction.getFlag(flag), true));
 | 
							// Inform
 | 
				
			||||||
 | 
							String stateInfo = mflag.getStateInfo(faction.getFlag(mflag), true);
 | 
				
			||||||
 | 
							if (msender.getFaction() != faction)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								// Send message to sender
 | 
				
			||||||
 | 
								msg("<h>%s <i>set a flag for <h>%s", msender.describeTo(msender, true), faction.describeTo(msender, true));
 | 
				
			||||||
 | 
								msg(stateInfo);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							faction.msg("<h>%s <i>set a flag for <h>%s", msender.describeTo(faction, true), faction.describeTo(faction, true));
 | 
				
			||||||
 | 
							faction.msg(stateInfo);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,6 @@ import org.bukkit.Location;
 | 
				
			|||||||
import org.bukkit.World;
 | 
					import org.bukkit.World;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.factions.FFlag;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.FPerm;
 | 
					import com.massivecraft.factions.FPerm;
 | 
				
			||||||
import com.massivecraft.factions.Factions;
 | 
					import com.massivecraft.factions.Factions;
 | 
				
			||||||
import com.massivecraft.factions.Perm;
 | 
					import com.massivecraft.factions.Perm;
 | 
				
			||||||
@@ -12,6 +11,7 @@ import com.massivecraft.factions.Rel;
 | 
				
			|||||||
import com.massivecraft.factions.cmd.arg.ARFaction;
 | 
					import com.massivecraft.factions.cmd.arg.ARFaction;
 | 
				
			||||||
import com.massivecraft.factions.entity.BoardColl;
 | 
					import com.massivecraft.factions.entity.BoardColl;
 | 
				
			||||||
import com.massivecraft.factions.entity.MConf;
 | 
					import com.massivecraft.factions.entity.MConf;
 | 
				
			||||||
 | 
					import com.massivecraft.factions.entity.MFlag;
 | 
				
			||||||
import com.massivecraft.factions.entity.MPlayer;
 | 
					import com.massivecraft.factions.entity.MPlayer;
 | 
				
			||||||
import com.massivecraft.factions.entity.Faction;
 | 
					import com.massivecraft.factions.entity.Faction;
 | 
				
			||||||
import com.massivecraft.factions.event.EventFactionsHomeTeleport;
 | 
					import com.massivecraft.factions.event.EventFactionsHomeTeleport;
 | 
				
			||||||
@@ -98,7 +98,7 @@ public class CmdFactionsHome extends FactionsCommandHome
 | 
				
			|||||||
		(
 | 
							(
 | 
				
			||||||
			MConf.get().homesTeleportAllowedEnemyDistance > 0
 | 
								MConf.get().homesTeleportAllowedEnemyDistance > 0
 | 
				
			||||||
			&&
 | 
								&&
 | 
				
			||||||
			factionHere.getFlag(FFlag.PVP)
 | 
								factionHere.getFlag(MFlag.getPvp())
 | 
				
			||||||
			&&
 | 
								&&
 | 
				
			||||||
			(
 | 
								(
 | 
				
			||||||
				! msender.isInOwnTerritory()
 | 
									! msender.isInOwnTerritory()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,6 +5,7 @@ import com.massivecraft.factions.Perm;
 | 
				
			|||||||
import com.massivecraft.factions.cmd.arg.ARMPlayer;
 | 
					import com.massivecraft.factions.cmd.arg.ARMPlayer;
 | 
				
			||||||
import com.massivecraft.factions.cmd.arg.ARFaction;
 | 
					import com.massivecraft.factions.cmd.arg.ARFaction;
 | 
				
			||||||
import com.massivecraft.factions.entity.MConf;
 | 
					import com.massivecraft.factions.entity.MConf;
 | 
				
			||||||
 | 
					import com.massivecraft.factions.entity.MFlag;
 | 
				
			||||||
import com.massivecraft.factions.entity.MPlayer;
 | 
					import com.massivecraft.factions.entity.MPlayer;
 | 
				
			||||||
import com.massivecraft.factions.entity.Faction;
 | 
					import com.massivecraft.factions.entity.Faction;
 | 
				
			||||||
import com.massivecraft.factions.event.EventFactionsMembershipChange;
 | 
					import com.massivecraft.factions.event.EventFactionsMembershipChange;
 | 
				
			||||||
@@ -79,7 +80,7 @@ public class CmdFactionsJoin extends FactionsCommand
 | 
				
			|||||||
			return;
 | 
								return;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if( ! (faction.isOpen() || faction.isInvited(mplayer) || msender.isUsingAdminMode() || Perm.JOIN_ANY.has(sender, false)))
 | 
							if( ! (faction.getFlag(MFlag.getOpen()) || faction.isInvited(mplayer) || msender.isUsingAdminMode() || Perm.JOIN_ANY.has(sender, false)))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			msg("<i>This faction requires invitation.");
 | 
								msg("<i>This faction requires invitation.");
 | 
				
			||||||
			if (samePlayer)
 | 
								if (samePlayer)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,56 +0,0 @@
 | 
				
			|||||||
package com.massivecraft.factions.cmd;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.massivecraft.factions.Perm;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.Rel;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.cmd.req.ReqHasFaction;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.cmd.req.ReqRoleIsAtLeast;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.event.EventFactionsOpenChange;
 | 
					 | 
				
			||||||
import com.massivecraft.massivecore.cmd.arg.ARBoolean;
 | 
					 | 
				
			||||||
import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class CmdFactionsOpen extends FactionsCommand
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	// CONSTRUCT
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public CmdFactionsOpen()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		// Aliases
 | 
					 | 
				
			||||||
		this.addAliases("open");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// Args
 | 
					 | 
				
			||||||
		this.addOptionalArg("yes/no", "toggle");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// Requirements
 | 
					 | 
				
			||||||
		this.addRequirements(ReqHasPerm.get(Perm.OPEN.node));
 | 
					 | 
				
			||||||
		this.addRequirements(ReqHasFaction.get());
 | 
					 | 
				
			||||||
		this.addRequirements(ReqRoleIsAtLeast.get(Rel.OFFICER));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	// OVERRIDE
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	@Override
 | 
					 | 
				
			||||||
	public void perform()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		// Args
 | 
					 | 
				
			||||||
		Boolean newOpen = this.arg(0, ARBoolean.get(), !msenderFaction.isOpen());
 | 
					 | 
				
			||||||
		if (newOpen == null) return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// Event
 | 
					 | 
				
			||||||
		EventFactionsOpenChange event = new EventFactionsOpenChange(sender, msenderFaction, newOpen);
 | 
					 | 
				
			||||||
		event.run();
 | 
					 | 
				
			||||||
		if (event.isCancelled()) return;
 | 
					 | 
				
			||||||
		newOpen = event.isNewOpen();
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		// Apply
 | 
					 | 
				
			||||||
		msenderFaction.setOpen(newOpen);
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		// Inform
 | 
					 | 
				
			||||||
		String descTarget = msenderFaction.isOpen() ? "open" : "closed";
 | 
					 | 
				
			||||||
		msenderFaction.msg("%s<i> changed the faction to <h>%s<i>.", msender.describeTo(msenderFaction, true), descTarget);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
package com.massivecraft.factions.cmd;
 | 
					package com.massivecraft.factions.cmd;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.factions.FFlag;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.Perm;
 | 
					import com.massivecraft.factions.Perm;
 | 
				
			||||||
import com.massivecraft.factions.Rel;
 | 
					import com.massivecraft.factions.Rel;
 | 
				
			||||||
import com.massivecraft.factions.cmd.arg.ARFaction;
 | 
					import com.massivecraft.factions.cmd.arg.ARFaction;
 | 
				
			||||||
@@ -8,6 +7,7 @@ import com.massivecraft.factions.cmd.req.ReqHasFaction;
 | 
				
			|||||||
import com.massivecraft.factions.cmd.req.ReqRoleIsAtLeast;
 | 
					import com.massivecraft.factions.cmd.req.ReqRoleIsAtLeast;
 | 
				
			||||||
import com.massivecraft.factions.entity.Faction;
 | 
					import com.massivecraft.factions.entity.Faction;
 | 
				
			||||||
import com.massivecraft.factions.entity.MConf;
 | 
					import com.massivecraft.factions.entity.MConf;
 | 
				
			||||||
 | 
					import com.massivecraft.factions.entity.MFlag;
 | 
				
			||||||
import com.massivecraft.factions.event.EventFactionsRelationChange;
 | 
					import com.massivecraft.factions.event.EventFactionsRelationChange;
 | 
				
			||||||
import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
 | 
					import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -89,13 +89,13 @@ public abstract class CmdFactionsRelationAbstract extends FactionsCommand
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
		// TODO: The ally case should work!!
 | 
							// TODO: The ally case should work!!
 | 
				
			||||||
		//   * this might have to be bumped up to make that happen, & allow ALLY,NEUTRAL only
 | 
							//   * this might have to be bumped up to make that happen, & allow ALLY,NEUTRAL only
 | 
				
			||||||
		if ( newRelation != Rel.TRUCE && otherFaction.getFlag(FFlag.PEACEFUL))
 | 
							if ( newRelation != Rel.TRUCE && otherFaction.getFlag(MFlag.getPeaceful()))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			otherFaction.msg("<i>This will have no effect while your faction is peaceful.");
 | 
								otherFaction.msg("<i>This will have no effect while your faction is peaceful.");
 | 
				
			||||||
			msenderFaction.msg("<i>This will have no effect while their faction is peaceful.");
 | 
								msenderFaction.msg("<i>This will have no effect while their faction is peaceful.");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		if ( newRelation != Rel.TRUCE && msenderFaction.getFlag(FFlag.PEACEFUL))
 | 
							if ( newRelation != Rel.TRUCE && msenderFaction.getFlag(MFlag.getPeaceful()))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			otherFaction.msg("<i>This will have no effect while their faction is peaceful.");
 | 
								otherFaction.msg("<i>This will have no effect while their faction is peaceful.");
 | 
				
			||||||
			msenderFaction.msg("<i>This will have no effect while your faction is peaceful.");
 | 
								msenderFaction.msg("<i>This will have no effect while your faction is peaceful.");
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,6 @@ public class CmdFactionsSeeChunk extends FactionsCommand
 | 
				
			|||||||
		this.addAliases("sc", "seechunk");
 | 
							this.addAliases("sc", "seechunk");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Requirements
 | 
							// Requirements
 | 
				
			||||||
		// this.addRequirements(ReqFactionsEnabled.get());
 | 
					 | 
				
			||||||
		this.addRequirements(ReqHasPerm.get(Perm.SEE_CHUNK.node));
 | 
							this.addRequirements(ReqHasPerm.get(Perm.SEE_CHUNK.node));
 | 
				
			||||||
		this.addRequirements(ReqIsPlayer.get());
 | 
							this.addRequirements(ReqIsPlayer.get());
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,51 +0,0 @@
 | 
				
			|||||||
package com.massivecraft.factions.cmd.arg;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import java.util.ArrayList;
 | 
					 | 
				
			||||||
import java.util.Collection;
 | 
					 | 
				
			||||||
import java.util.List;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.bukkit.command.CommandSender;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.massivecraft.factions.FFlag;
 | 
					 | 
				
			||||||
import com.massivecraft.massivecore.cmd.arg.ARAbstractSelect;
 | 
					 | 
				
			||||||
import com.massivecraft.massivecore.util.Txt;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class ARFFlag extends ARAbstractSelect<FFlag>
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	// INSTANCE & CONSTRUCT
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	private static ARFFlag i = new ARFFlag();
 | 
					 | 
				
			||||||
	public static ARFFlag get() { return i; }
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	// OVERRIDE
 | 
					 | 
				
			||||||
	// -------------------------------------------- //
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	@Override
 | 
					 | 
				
			||||||
	public String typename()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		return "faction flag";
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	@Override
 | 
					 | 
				
			||||||
	public FFlag select(String str, CommandSender sender)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		return FFlag.parse(str);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	@Override
 | 
					 | 
				
			||||||
	public Collection<String> altNames(CommandSender sender)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		List<String> ret = new ArrayList<String>(); 
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		for (FFlag fflag : FFlag.values())
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			ret.add(Txt.getNicedEnum(fflag));
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		return ret;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										88
									
								
								src/main/java/com/massivecraft/factions/cmd/arg/ARMFlag.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								src/main/java/com/massivecraft/factions/cmd/arg/ARMFlag.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,88 @@
 | 
				
			|||||||
 | 
					package com.massivecraft.factions.cmd.arg;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.Collection;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.bukkit.command.CommandSender;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.massivecraft.factions.entity.MFlag;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.cmd.arg.ARAbstractSelect;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.util.Txt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class ARMFlag extends ARAbstractSelect<MFlag>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						// INSTANCE & CONSTRUCT
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						private static ARMFlag i = new ARMFlag();
 | 
				
			||||||
 | 
						public static ARMFlag get() { return i; }
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						// OVERRIDE
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public String typename()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return "faction flag";
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public MFlag select(String arg, CommandSender sender)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if (arg == null) return null;
 | 
				
			||||||
 | 
							arg = getComparable(arg);
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// Algorithmic General Detection
 | 
				
			||||||
 | 
							int startswithCount = 0;
 | 
				
			||||||
 | 
							MFlag startswith = null;
 | 
				
			||||||
 | 
							for (MFlag mflag : MFlag.getAll())
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								String comparable = getComparable(mflag);
 | 
				
			||||||
 | 
								if (comparable.equals(arg)) return mflag;
 | 
				
			||||||
 | 
								if (comparable.startsWith(arg))
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									startswith = mflag;
 | 
				
			||||||
 | 
									startswithCount++;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if (startswithCount == 1)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								return startswith;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// Nothing found
 | 
				
			||||||
 | 
							return null;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public Collection<String> altNames(CommandSender sender)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							List<String> ret = new ArrayList<String>(); 
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							for (MFlag mflag : MFlag.getAll())
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								ret.add(Txt.upperCaseFirst(mflag.getName()));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							return ret;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						// UTIL
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public static String getComparable(String string)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return string.toLowerCase();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public static String getComparable(MFlag mflag)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return getComparable(mflag.getName());
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -9,7 +9,6 @@ import org.bukkit.command.CommandSender;
 | 
				
			|||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.factions.EconomyParticipator;
 | 
					import com.massivecraft.factions.EconomyParticipator;
 | 
				
			||||||
import com.massivecraft.factions.FFlag;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.FPerm;
 | 
					import com.massivecraft.factions.FPerm;
 | 
				
			||||||
import com.massivecraft.factions.FactionEqualsPredictate;
 | 
					import com.massivecraft.factions.FactionEqualsPredictate;
 | 
				
			||||||
import com.massivecraft.factions.Factions;
 | 
					import com.massivecraft.factions.Factions;
 | 
				
			||||||
@@ -48,10 +47,9 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
 | 
				
			|||||||
		this.setCreatedAtMillis(that.createdAtMillis);
 | 
							this.setCreatedAtMillis(that.createdAtMillis);
 | 
				
			||||||
		this.setHome(that.home);
 | 
							this.setHome(that.home);
 | 
				
			||||||
		this.setPowerBoost(that.powerBoost);
 | 
							this.setPowerBoost(that.powerBoost);
 | 
				
			||||||
		this.setOpen(that.open);
 | 
					 | 
				
			||||||
		this.setInvitedPlayerIds(that.invitedPlayerIds);
 | 
							this.setInvitedPlayerIds(that.invitedPlayerIds);
 | 
				
			||||||
		this.setRelationWishes(that.relationWishes);
 | 
							this.setRelationWishes(that.relationWishes);
 | 
				
			||||||
		this.setFlags(that.flags);
 | 
							this.setFlagIds(that.flags);
 | 
				
			||||||
		this.setPerms(that.perms);
 | 
							this.setPerms(that.perms);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		return this;
 | 
							return this;
 | 
				
			||||||
@@ -108,7 +106,7 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
 | 
				
			|||||||
	// If the faction is open they can.
 | 
						// If the faction is open they can.
 | 
				
			||||||
	// If the faction is closed an invite is required.
 | 
						// If the faction is closed an invite is required.
 | 
				
			||||||
	// Null means default.
 | 
						// Null means default.
 | 
				
			||||||
	private Boolean open = null;
 | 
						// private Boolean open = null;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// This is the ids of the invited players.
 | 
						// This is the ids of the invited players.
 | 
				
			||||||
	// They are actually "senderIds" since you can invite "@console" to your faction.
 | 
						// They are actually "senderIds" since you can invite "@console" to your faction.
 | 
				
			||||||
@@ -121,7 +119,7 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	// The flag overrides are modifications to the default values.
 | 
						// The flag overrides are modifications to the default values.
 | 
				
			||||||
	// Null means default.
 | 
						// Null means default.
 | 
				
			||||||
	private Map<FFlag, Boolean> flags = null;
 | 
						private Map<String, Boolean> flags = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// The perm overrides are modifications to the default values.
 | 
						// The perm overrides are modifications to the default values.
 | 
				
			||||||
	// Null means default.
 | 
						// Null means default.
 | 
				
			||||||
@@ -338,6 +336,7 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
 | 
				
			|||||||
	// FIELD: open
 | 
						// FIELD: open
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
	public boolean isDefaultOpen()
 | 
						public boolean isDefaultOpen()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return MConf.get().defaultFactionOpen;
 | 
							return MConf.get().defaultFactionOpen;
 | 
				
			||||||
@@ -363,7 +362,7 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
		// Mark as changed
 | 
							// Mark as changed
 | 
				
			||||||
		this.changed();
 | 
							this.changed();
 | 
				
			||||||
	}
 | 
						}*/
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	// FIELD: invitedPlayerIds
 | 
						// FIELD: invitedPlayerIds
 | 
				
			||||||
@@ -538,45 +537,53 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	// RAW
 | 
						// RAW
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public Map<FFlag, Boolean> getFlags()
 | 
						public Map<MFlag, Boolean> getFlags()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		Map<FFlag, Boolean> ret = new LinkedHashMap<FFlag, Boolean>();
 | 
							// We start with default values ...
 | 
				
			||||||
		
 | 
							Map<MFlag, Boolean> ret = new LinkedHashMap<MFlag, Boolean>();
 | 
				
			||||||
		for (FFlag fflag : FFlag.values())
 | 
							for (MFlag mflag : MFlag.getAll())
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			ret.put(fflag, fflag.getDefault());
 | 
								ret.put(mflag, mflag.isStandard());
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 | 
							// ... and if anything is explicitly set ...
 | 
				
			||||||
		if (this.flags != null)
 | 
							if (this.flags != null)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			for (Entry<FFlag, Boolean> entry : this.flags.entrySet())
 | 
								// ... we we use that info.
 | 
				
			||||||
 | 
								for (Entry<String, Boolean> entry : this.flags.entrySet())
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				ret.put(entry.getKey(), entry.getValue());
 | 
									String id = entry.getKey();
 | 
				
			||||||
 | 
									if (id == null) continue;
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
									MFlag mflag = MFlag.get(id);
 | 
				
			||||||
 | 
									if (mflag == null) continue;
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
									ret.put(mflag, entry.getValue());
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		return ret;
 | 
							return ret;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public void setFlags(Map<FFlag, Boolean> flags)
 | 
						public void setFlagIds(Map<String, Boolean> flags)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		// Clean input
 | 
							// Clean input
 | 
				
			||||||
		Map<FFlag, Boolean> target;
 | 
							Map<String, Boolean> target = null;
 | 
				
			||||||
		if (flags == null)
 | 
							if (flags != null)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			target = null;
 | 
								// We start out with what was suggested
 | 
				
			||||||
		}
 | 
								target = new LinkedHashMap<String, Boolean>(flags);
 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			target = new LinkedHashMap<FFlag, Boolean>(flags);
 | 
					 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
 | 
								// However if the context is fully live we try to throw some default values away.
 | 
				
			||||||
			if (this.attached() && Factions.get().isDatabaseInitialized())
 | 
								if (this.attached() && Factions.get().isDatabaseInitialized())
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				Iterator<Entry<FFlag, Boolean>> iter = target.entrySet().iterator();
 | 
									Iterator<Entry<String, Boolean>> iter = target.entrySet().iterator();
 | 
				
			||||||
				while (iter.hasNext())
 | 
									while (iter.hasNext())
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					Entry<FFlag, Boolean> entry = iter.next();
 | 
										Entry<String, Boolean> entry = iter.next();
 | 
				
			||||||
					if (entry.getKey().getDefault() == entry.getValue())
 | 
										String id = entry.getKey();
 | 
				
			||||||
 | 
										MFlag mflag = MFlag.get(id);
 | 
				
			||||||
 | 
										if (mflag != null && mflag.isStandard() == entry.getValue())
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						iter.remove();
 | 
											iter.remove();
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
@@ -596,15 +603,25 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
 | 
				
			|||||||
		this.changed();
 | 
							this.changed();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						public void setFlags(Map<MFlag, Boolean> flags)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Map<String, Boolean> flagIds = new LinkedHashMap<String, Boolean>();
 | 
				
			||||||
 | 
							for (Entry<MFlag, Boolean> entry : flags.entrySet())
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								flagIds.put(entry.getKey().getId(), entry.getValue());
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							setFlagIds(flagIds);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	// FINER
 | 
						// FINER
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public boolean getFlag(FFlag flag)
 | 
						public boolean getFlag(MFlag flag)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return this.getFlags().get(flag);
 | 
							return this.getFlags().get(flag);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	public void setFlag(FFlag flag, boolean value)
 | 
						public void setFlag(MFlag flag, boolean value)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		Map<FFlag, Boolean> flags = this.getFlags();
 | 
							Map<MFlag, Boolean> flags = this.getFlags();
 | 
				
			||||||
		flags.put(flag, value);
 | 
							flags.put(flag, value);
 | 
				
			||||||
		this.setFlags(flags);
 | 
							this.setFlags(flags);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -776,7 +793,7 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	public double getPower()
 | 
						public double getPower()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (this.getFlag(FFlag.INFPOWER)) return 999999;
 | 
							if (this.getFlag(MFlag.getInfpower())) return 999999;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		double ret = 0;
 | 
							double ret = 0;
 | 
				
			||||||
		for (MPlayer mplayer : this.getMPlayers())
 | 
							for (MPlayer mplayer : this.getMPlayers())
 | 
				
			||||||
@@ -797,7 +814,7 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	public double getPowerMax()
 | 
						public double getPowerMax()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (this.getFlag(FFlag.INFPOWER)) return 999999;
 | 
							if (this.getFlag(MFlag.getInfpower())) return 999999;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
		double ret = 0;
 | 
							double ret = 0;
 | 
				
			||||||
		for (MPlayer mplayer : this.getMPlayers())
 | 
							for (MPlayer mplayer : this.getMPlayers())
 | 
				
			||||||
@@ -956,7 +973,7 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
 | 
				
			|||||||
	public void promoteNewLeader()
 | 
						public void promoteNewLeader()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if ( ! this.isNormal()) return;
 | 
							if ( ! this.isNormal()) return;
 | 
				
			||||||
		if (this.getFlag(FFlag.PERMANENT) && MConf.get().permanentFactionsDisableLeaderPromotion) return;
 | 
							if (this.getFlag(MFlag.getPermanent()) && MConf.get().permanentFactionsDisableLeaderPromotion) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		MPlayer oldLeader = this.getLeader();
 | 
							MPlayer oldLeader = this.getLeader();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -970,7 +987,7 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
 | 
				
			|||||||
		if (replacements == null || replacements.isEmpty())
 | 
							if (replacements == null || replacements.isEmpty())
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			// faction leader is the only member; one-man faction
 | 
								// faction leader is the only member; one-man faction
 | 
				
			||||||
			if (this.getFlag(FFlag.PERMANENT))
 | 
								if (this.getFlag(MFlag.getPermanent()))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				if (oldLeader != null)
 | 
									if (oldLeader != null)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
@@ -1032,8 +1049,8 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	public boolean isExplosionsAllowed()
 | 
						public boolean isExplosionsAllowed()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		boolean explosions = this.getFlag(FFlag.EXPLOSIONS);
 | 
							boolean explosions = this.getFlag(MFlag.getExplosions());
 | 
				
			||||||
		boolean offlineexplosions = this.getFlag(FFlag.OFFLINE_EXPLOSIONS);
 | 
							boolean offlineexplosions = this.getFlag(MFlag.getOfflineexplosions());
 | 
				
			||||||
		boolean online = this.isFactionConsideredOnline();
 | 
							boolean online = this.isFactionConsideredOnline();
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		return (online && explosions) || (!online && offlineexplosions);
 | 
							return (online && explosions) || (!online && offlineexplosions);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,6 @@ import com.massivecraft.massivecore.store.Coll;
 | 
				
			|||||||
import com.massivecraft.massivecore.store.MStore;
 | 
					import com.massivecraft.massivecore.store.MStore;
 | 
				
			||||||
import com.massivecraft.massivecore.util.Txt;
 | 
					import com.massivecraft.massivecore.util.Txt;
 | 
				
			||||||
import com.massivecraft.factions.Const;
 | 
					import com.massivecraft.factions.Const;
 | 
				
			||||||
import com.massivecraft.factions.FFlag;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.FPerm;
 | 
					import com.massivecraft.factions.FPerm;
 | 
				
			||||||
import com.massivecraft.factions.Factions;
 | 
					import com.massivecraft.factions.Factions;
 | 
				
			||||||
import com.massivecraft.factions.Rel;
 | 
					import com.massivecraft.factions.Rel;
 | 
				
			||||||
@@ -93,19 +92,19 @@ public class FactionColl extends Coll<Faction>
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
		faction.setName(ChatColor.DARK_GREEN+"Wilderness");
 | 
							faction.setName(ChatColor.DARK_GREEN+"Wilderness");
 | 
				
			||||||
		faction.setDescription(null);
 | 
							faction.setDescription(null);
 | 
				
			||||||
		faction.setOpen(false);
 | 
					 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		faction.setFlag(FFlag.PERMANENT, true);
 | 
							faction.setFlag(MFlag.getOpen(), false);
 | 
				
			||||||
		faction.setFlag(FFlag.PEACEFUL, false);
 | 
							faction.setFlag(MFlag.getPermanent(), true);
 | 
				
			||||||
		faction.setFlag(FFlag.INFPOWER, true);
 | 
							faction.setFlag(MFlag.getPeaceful(), false);
 | 
				
			||||||
		faction.setFlag(FFlag.POWERLOSS, true);
 | 
							faction.setFlag(MFlag.getInfpower(), true);
 | 
				
			||||||
		faction.setFlag(FFlag.PVP, true);
 | 
							faction.setFlag(MFlag.getPowerloss(), true);
 | 
				
			||||||
		faction.setFlag(FFlag.FRIENDLYFIRE, false);
 | 
							faction.setFlag(MFlag.getPvp(), true);
 | 
				
			||||||
		faction.setFlag(FFlag.MONSTERS, true);
 | 
							faction.setFlag(MFlag.getFriendlyire(), false);
 | 
				
			||||||
		faction.setFlag(FFlag.EXPLOSIONS, true);
 | 
							faction.setFlag(MFlag.getMonsters(), true);
 | 
				
			||||||
		faction.setFlag(FFlag.OFFLINE_EXPLOSIONS, true);
 | 
							faction.setFlag(MFlag.getExplosions(), true);
 | 
				
			||||||
		faction.setFlag(FFlag.FIRESPREAD, true);
 | 
							faction.setFlag(MFlag.getOfflineexplosions(), true);
 | 
				
			||||||
		faction.setFlag(FFlag.ENDERGRIEF, true);
 | 
							faction.setFlag(MFlag.getFirespread(), true);
 | 
				
			||||||
 | 
							faction.setFlag(MFlag.getEndergrief(), true);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		faction.setPermittedRelations(FPerm.BUILD, Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
							faction.setPermittedRelations(FPerm.BUILD, Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
				
			||||||
		faction.setPermittedRelations(FPerm.DOOR, Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
							faction.setPermittedRelations(FPerm.DOOR, Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
				
			||||||
@@ -126,19 +125,19 @@ public class FactionColl extends Coll<Faction>
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
		faction.setName("SafeZone");
 | 
							faction.setName("SafeZone");
 | 
				
			||||||
		faction.setDescription("Free from PVP and monsters");
 | 
							faction.setDescription("Free from PVP and monsters");
 | 
				
			||||||
		faction.setOpen(false);
 | 
					 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		faction.setFlag(FFlag.PERMANENT, true);
 | 
							faction.setFlag(MFlag.getOpen(), false);
 | 
				
			||||||
		faction.setFlag(FFlag.PEACEFUL, true);
 | 
							faction.setFlag(MFlag.getPermanent(), true);
 | 
				
			||||||
		faction.setFlag(FFlag.INFPOWER, true);
 | 
							faction.setFlag(MFlag.getPeaceful(), true);
 | 
				
			||||||
		faction.setFlag(FFlag.POWERLOSS, false);
 | 
							faction.setFlag(MFlag.getInfpower(), true);
 | 
				
			||||||
		faction.setFlag(FFlag.PVP, false);
 | 
							faction.setFlag(MFlag.getPowerloss(), false);
 | 
				
			||||||
		faction.setFlag(FFlag.FRIENDLYFIRE, false);
 | 
							faction.setFlag(MFlag.getPvp(), false);
 | 
				
			||||||
		faction.setFlag(FFlag.MONSTERS, false);
 | 
							faction.setFlag(MFlag.getFriendlyire(), false);
 | 
				
			||||||
		faction.setFlag(FFlag.EXPLOSIONS, false);
 | 
							faction.setFlag(MFlag.getMonsters(), false);
 | 
				
			||||||
		faction.setFlag(FFlag.OFFLINE_EXPLOSIONS, false);
 | 
							faction.setFlag(MFlag.getExplosions(), false);
 | 
				
			||||||
		faction.setFlag(FFlag.FIRESPREAD, false);
 | 
							faction.setFlag(MFlag.getOfflineexplosions(), false);
 | 
				
			||||||
		faction.setFlag(FFlag.ENDERGRIEF, false);
 | 
							faction.setFlag(MFlag.getFirespread(), false);
 | 
				
			||||||
 | 
							faction.setFlag(MFlag.getEndergrief(), false);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		faction.setPermittedRelations(FPerm.DOOR, Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
							faction.setPermittedRelations(FPerm.DOOR, Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
				
			||||||
		faction.setPermittedRelations(FPerm.CONTAINER, Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
							faction.setPermittedRelations(FPerm.CONTAINER, Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
				
			||||||
@@ -159,19 +158,19 @@ public class FactionColl extends Coll<Faction>
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
		faction.setName("WarZone");
 | 
							faction.setName("WarZone");
 | 
				
			||||||
		faction.setDescription("Not the safest place to be");
 | 
							faction.setDescription("Not the safest place to be");
 | 
				
			||||||
		faction.setOpen(false);
 | 
					 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		faction.setFlag(FFlag.PERMANENT, true);
 | 
							faction.setFlag(MFlag.getOpen(), false);
 | 
				
			||||||
		faction.setFlag(FFlag.PEACEFUL, true);
 | 
							faction.setFlag(MFlag.getPermanent(), true);
 | 
				
			||||||
		faction.setFlag(FFlag.INFPOWER, true);
 | 
							faction.setFlag(MFlag.getPeaceful(), true);
 | 
				
			||||||
		faction.setFlag(FFlag.POWERLOSS, true);
 | 
							faction.setFlag(MFlag.getInfpower(), true);
 | 
				
			||||||
		faction.setFlag(FFlag.PVP, true);
 | 
							faction.setFlag(MFlag.getPowerloss(), true);
 | 
				
			||||||
		faction.setFlag(FFlag.FRIENDLYFIRE, true);
 | 
							faction.setFlag(MFlag.getPvp(), true);
 | 
				
			||||||
		faction.setFlag(FFlag.MONSTERS, true);
 | 
							faction.setFlag(MFlag.getFriendlyire(), true);
 | 
				
			||||||
		faction.setFlag(FFlag.EXPLOSIONS, true);
 | 
							faction.setFlag(MFlag.getMonsters(), true);
 | 
				
			||||||
		faction.setFlag(FFlag.OFFLINE_EXPLOSIONS, true);
 | 
							faction.setFlag(MFlag.getExplosions(), true);
 | 
				
			||||||
		faction.setFlag(FFlag.FIRESPREAD, true);
 | 
							faction.setFlag(MFlag.getOfflineexplosions(), true);
 | 
				
			||||||
		faction.setFlag(FFlag.ENDERGRIEF, true);
 | 
							faction.setFlag(MFlag.getFirespread(), true);
 | 
				
			||||||
 | 
							faction.setFlag(MFlag.getEndergrief(), true);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		faction.setPermittedRelations(FPerm.DOOR, Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
							faction.setPermittedRelations(FPerm.DOOR, Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
				
			||||||
		faction.setPermittedRelations(FPerm.CONTAINER, Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
							faction.setPermittedRelations(FPerm.CONTAINER, Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
				
			||||||
@@ -197,7 +196,7 @@ public class FactionColl extends Coll<Faction>
 | 
				
			|||||||
		for (Faction faction : this.getAll())
 | 
							for (Faction faction : this.getAll())
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			int landCount = faction.getLandCount();
 | 
								int landCount = faction.getLandCount();
 | 
				
			||||||
			if (!faction.getFlag(FFlag.PEACEFUL) && landCount > 0)
 | 
								if (!faction.getFlag(MFlag.getPeaceful()) && landCount > 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				List<MPlayer> players = faction.getMPlayers();
 | 
									List<MPlayer> players = faction.getMPlayers();
 | 
				
			||||||
				int playerCount = players.size();
 | 
									int playerCount = players.size();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,6 @@ import org.bukkit.Material;
 | 
				
			|||||||
import org.bukkit.entity.EntityType;
 | 
					import org.bukkit.entity.EntityType;
 | 
				
			||||||
import org.bukkit.event.EventPriority;
 | 
					import org.bukkit.event.EventPriority;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.factions.FFlag;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.FPerm;
 | 
					import com.massivecraft.factions.FPerm;
 | 
				
			||||||
import com.massivecraft.factions.Factions;
 | 
					import com.massivecraft.factions.Factions;
 | 
				
			||||||
import com.massivecraft.factions.Rel;
 | 
					import com.massivecraft.factions.Rel;
 | 
				
			||||||
@@ -105,8 +104,6 @@ public class MConf extends Entity<MConf>
 | 
				
			|||||||
	public Rel defaultPlayerRole = Rel.RECRUIT;
 | 
						public Rel defaultPlayerRole = Rel.RECRUIT;
 | 
				
			||||||
	public double defaultPlayerPower = 0.0;
 | 
						public double defaultPlayerPower = 0.0;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public boolean defaultFactionOpen = false;
 | 
					 | 
				
			||||||
	public Map<FFlag, Boolean> defaultFactionFlags = FFlag.getDefaultDefaults();
 | 
					 | 
				
			||||||
	public Map<FPerm, Set<Rel>> defaultFactionPerms = FPerm.getDefaultDefaults();
 | 
						public Map<FPerm, Set<Rel>> defaultFactionPerms = FPerm.getDefaultDefaults();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
@@ -429,7 +426,7 @@ public class MConf extends Entity<MConf>
 | 
				
			|||||||
	public double econCostName = 0.0;
 | 
						public double econCostName = 0.0;
 | 
				
			||||||
	public double econCostDescription = 0.0;
 | 
						public double econCostDescription = 0.0;
 | 
				
			||||||
	public double econCostTitle = 0.0;
 | 
						public double econCostTitle = 0.0;
 | 
				
			||||||
	public double econCostOpen = 0.0;
 | 
						public double econCostFlag = 0.0;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public Map<Rel, Double> econRelCost = MUtil.map(
 | 
						public Map<Rel, Double> econRelCost = MUtil.map(
 | 
				
			||||||
		Rel.ENEMY, 0.0,
 | 
							Rel.ENEMY, 0.0,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										214
									
								
								src/main/java/com/massivecraft/factions/entity/MFlag.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										214
									
								
								src/main/java/com/massivecraft/factions/entity/MFlag.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,214 @@
 | 
				
			|||||||
 | 
					package com.massivecraft.factions.entity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.PredictateIsRegistered;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.Prioritized;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.Registerable;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.store.Entity;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.util.Txt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class MFlag extends Entity<MFlag> implements Prioritized, Registerable
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						// CONSTANTS
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public final static transient String ID_OPEN = "open";
 | 
				
			||||||
 | 
						public final static transient String ID_MONSTERS = "monsters";
 | 
				
			||||||
 | 
						public final static transient String ID_POWERLOSS = "powerloss";
 | 
				
			||||||
 | 
						public final static transient String ID_PVP = "pvp";
 | 
				
			||||||
 | 
						public final static transient String ID_FRIENDLYFIRE = "friendlyfire";
 | 
				
			||||||
 | 
						public final static transient String ID_EXPLOSIONS = "explosions";
 | 
				
			||||||
 | 
						public final static transient String ID_OFFLINEEXPLOSIONS = "offlineexplosions";
 | 
				
			||||||
 | 
						public final static transient String ID_FIRESPREAD = "firespread";
 | 
				
			||||||
 | 
						public final static transient String ID_ENDERGRIEF = "endergrief";
 | 
				
			||||||
 | 
						public final static transient String ID_PERMANENT = "permanent";
 | 
				
			||||||
 | 
						public final static transient String ID_PEACEFUL = "peaceful";
 | 
				
			||||||
 | 
						public final static transient String ID_INFPOWER = "infpower";
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public final static transient int PRIORITY_OPEN = 1000;
 | 
				
			||||||
 | 
						public final static transient int PRIORITY_MONSTERS = 2000;
 | 
				
			||||||
 | 
						public final static transient int PRIORITY_POWERLOSS = 3000;
 | 
				
			||||||
 | 
						public final static transient int PRIORITY_PVP = 4000;
 | 
				
			||||||
 | 
						public final static transient int PRIORITY_FRIENDLYFIRE = 5000;
 | 
				
			||||||
 | 
						public final static transient int PRIORITY_EXPLOSIONS = 6000;
 | 
				
			||||||
 | 
						public final static transient int PRIORITY_OFFLINEEXPLOSIONS = 7000;
 | 
				
			||||||
 | 
						public final static transient int PRIORITY_FIRESPREAD = 8000;
 | 
				
			||||||
 | 
						public final static transient int PRIORITY_ENDERGRIEF = 9000;
 | 
				
			||||||
 | 
						public final static transient int PRIORITY_PERMANENT = 10000;
 | 
				
			||||||
 | 
						public final static transient int PRIORITY_PEACEFUL = 11000;
 | 
				
			||||||
 | 
						public final static transient int PRIORITY_INFPOWER = 12000;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						// META: CORE
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public static MFlag get(Object oid)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return MFlagColl.get().get(oid);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public static List<MFlag> getAll()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return MFlagColl.get().getAll(PredictateIsRegistered.get());
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public static void setupStandardFlags()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							getOpen();
 | 
				
			||||||
 | 
							getMonsters();
 | 
				
			||||||
 | 
							getPowerloss();
 | 
				
			||||||
 | 
							getPvp();
 | 
				
			||||||
 | 
							getFriendlyire();
 | 
				
			||||||
 | 
							getExplosions();
 | 
				
			||||||
 | 
							getOfflineexplosions();
 | 
				
			||||||
 | 
							getFirespread();
 | 
				
			||||||
 | 
							getEndergrief();
 | 
				
			||||||
 | 
							getPermanent();
 | 
				
			||||||
 | 
							getPeaceful();
 | 
				
			||||||
 | 
							getInfpower();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public static MFlag getOpen() { return getCreative(PRIORITY_OPEN, ID_OPEN, ID_OPEN, "Open factions can be joined without invite.", false, true, true); }
 | 
				
			||||||
 | 
						public static MFlag getMonsters() { return getCreative(PRIORITY_MONSTERS, ID_MONSTERS, ID_MONSTERS, "Can monsters spawn in this territory?", false, true, true); }
 | 
				
			||||||
 | 
						public static MFlag getPowerloss() { return getCreative(PRIORITY_POWERLOSS, ID_POWERLOSS, ID_POWERLOSS, "Is power lost on death in this territory?", true, false, true); }
 | 
				
			||||||
 | 
						public static MFlag getPvp() { return getCreative(PRIORITY_PVP, ID_PVP, ID_PVP, "Can you PVP in territory?", true, false, true); }
 | 
				
			||||||
 | 
						public static MFlag getFriendlyire() { return getCreative(PRIORITY_FRIENDLYFIRE, ID_FRIENDLYFIRE, ID_FRIENDLYFIRE, "Can friends hurt eachother here?", false, false, true); }
 | 
				
			||||||
 | 
						public static MFlag getExplosions() { return getCreative(PRIORITY_EXPLOSIONS, ID_EXPLOSIONS, ID_EXPLOSIONS, "Can explosions occur in this territory?", true, false, true); }
 | 
				
			||||||
 | 
						public static MFlag getOfflineexplosions() { return getCreative(PRIORITY_OFFLINEEXPLOSIONS, ID_OFFLINEEXPLOSIONS, ID_OFFLINEEXPLOSIONS, "Can explosions occur if faction is offline?", false, false, true); }
 | 
				
			||||||
 | 
						public static MFlag getFirespread() { return getCreative(PRIORITY_FIRESPREAD, ID_FIRESPREAD, ID_FIRESPREAD, "Can fire spread in territory?", true, false, true); }
 | 
				
			||||||
 | 
						public static MFlag getEndergrief() { return getCreative(PRIORITY_ENDERGRIEF, ID_ENDERGRIEF, ID_ENDERGRIEF, "Can endermen grief in this territory?", false, false, true); }
 | 
				
			||||||
 | 
						public static MFlag getPermanent() { return getCreative(PRIORITY_PERMANENT, ID_PERMANENT, ID_PERMANENT, "A permanent faction will never be deleted.", false, false, true); }
 | 
				
			||||||
 | 
						public static MFlag getPeaceful() { return getCreative(PRIORITY_PEACEFUL, ID_PEACEFUL, ID_PEACEFUL, "Always in truce with other factions.", false, false, true); }
 | 
				
			||||||
 | 
						public static MFlag getInfpower() { return getCreative(PRIORITY_INFPOWER, ID_INFPOWER, ID_INFPOWER, "This flag gives the faction infinite power.", false, false, true); }
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public static MFlag getCreative(int priority, String id, String name, String desc, boolean standard, boolean editable, boolean visible)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							MFlag ret = MFlagColl.get().get(id, false);
 | 
				
			||||||
 | 
							if (ret != null)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								ret.setRegistered(true);
 | 
				
			||||||
 | 
								return ret;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							ret = new MFlag(priority, name, desc, standard, editable, visible);
 | 
				
			||||||
 | 
							MFlagColl.get().attach(ret, id);
 | 
				
			||||||
 | 
							ret.setRegistered(true);
 | 
				
			||||||
 | 
							ret.sync();
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							return ret;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						// OVERRIDE
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public MFlag load(MFlag that)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							this.priority = that.priority;
 | 
				
			||||||
 | 
							this.name = that.name;
 | 
				
			||||||
 | 
							this.desc = that.desc;
 | 
				
			||||||
 | 
							this.standard = that.standard;
 | 
				
			||||||
 | 
							this.editable = that.editable;
 | 
				
			||||||
 | 
							this.visible = that.visible;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							return this;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						// TRANSIENT FIELDS (Registered)
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						private transient boolean registered = false;
 | 
				
			||||||
 | 
						public boolean isRegistered() { return this.registered; }
 | 
				
			||||||
 | 
						public void setRegistered(boolean registered) { this.registered = registered; }
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						// FIELDS
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// The sort order priority 1 is high up, 99999 is far down.
 | 
				
			||||||
 | 
						private int priority = 0;
 | 
				
			||||||
 | 
						@Override public int getPriority() { return this.priority; }
 | 
				
			||||||
 | 
						public MFlag setPriority(int priority) { this.priority = priority; this.changed(); return this; }
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// Nice name / Display name
 | 
				
			||||||
 | 
						// Example: "monsters"
 | 
				
			||||||
 | 
						private String name = "defaultName";
 | 
				
			||||||
 | 
						public String getName() { return this.name; }
 | 
				
			||||||
 | 
						public MFlag setName(String name) { this.name = name; this.changed(); return this; }
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// Short description
 | 
				
			||||||
 | 
						// Example: "Can monsters spawn in this territory?"
 | 
				
			||||||
 | 
						private String desc = "defaultDesc";
 | 
				
			||||||
 | 
						public String getDesc() { return this.desc; }
 | 
				
			||||||
 | 
						public MFlag setDesc(String desc) { this.desc = desc; this.changed(); return this; }
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// Standard value
 | 
				
			||||||
 | 
						// Example: false (per default monsters do not spawn in faction territory)
 | 
				
			||||||
 | 
						private boolean standard = true;
 | 
				
			||||||
 | 
						public boolean isStandard() { return this.standard; }
 | 
				
			||||||
 | 
						public MFlag setStandard(boolean standard) { this.standard = standard; this.changed(); return this; }
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// If the flag is editable by the faction leader (or however the flag permission is configured)
 | 
				
			||||||
 | 
						// Example: true (if players want to turn mob spawning on I guess they should be able to)
 | 
				
			||||||
 | 
						private boolean editable = false;
 | 
				
			||||||
 | 
						public boolean isEditable() { return this.editable; }
 | 
				
			||||||
 | 
						public MFlag setEditable(boolean editable) { this.editable = editable; this.changed(); return this; }
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// If the flag is visible or hidden.
 | 
				
			||||||
 | 
						// Example: true (yeah we need to see this flag)
 | 
				
			||||||
 | 
						// Explanation: Some flags are rendered meaningless by other plugins. Say we have a creative mode server without any mobs. The server owner might want to hide this flag.
 | 
				
			||||||
 | 
						private boolean visible = true;
 | 
				
			||||||
 | 
						public boolean isVisible() { return this.visible; }
 | 
				
			||||||
 | 
						public MFlag setVisible(boolean visible) { this.visible = visible; this.changed(); return this; }
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						// CONSTRUCT
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public MFlag()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							// No argument constructor for GSON
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public MFlag(int priority, String name, String desc, boolean standard, boolean editable, boolean visible)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							this.priority = priority;
 | 
				
			||||||
 | 
							this.name = name;
 | 
				
			||||||
 | 
							this.desc = desc;
 | 
				
			||||||
 | 
							this.standard = standard;
 | 
				
			||||||
 | 
							this.editable = editable;
 | 
				
			||||||
 | 
							this.visible = visible;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						// EXTRAS
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public String getStateInfo(boolean value, boolean withDesc)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							String valueDesc = value ? "<g>YES" : "<b>NOO";
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							String color = "<aqua>";
 | 
				
			||||||
 | 
							if (!this.isVisible())
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								color = "<silver>";
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else if (this.isEditable())
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								color = "<pink>";
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							String ret = valueDesc + " " + color + this.getName();
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if (withDesc) ret += " <i>" + this.getDesc();
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							ret = Txt.parse(ret);
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							return ret;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,51 @@
 | 
				
			|||||||
 | 
					package com.massivecraft.factions.entity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.massivecraft.factions.Const;
 | 
				
			||||||
 | 
					import com.massivecraft.factions.Factions;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.PriorityComparator;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.store.Coll;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.store.MStore;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class MFlagColl extends Coll<MFlag>
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						// INSTANCE & CONSTRUCT
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						private static MFlagColl i = new MFlagColl();
 | 
				
			||||||
 | 
						public static MFlagColl get() { return i; }
 | 
				
			||||||
 | 
						private MFlagColl()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							super(Const.COLLECTION_MFLAG, MFlag.class, MStore.getDb(), Factions.get(), false, false, true, null, PriorityComparator.get());
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						// OVERRIDE
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public void init()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							super.init();
 | 
				
			||||||
 | 
							MFlag.setupStandardFlags();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						// EXTRAS
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public List<MFlag> getAll(boolean registered)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							List<MFlag> ret = new ArrayList<MFlag>();
 | 
				
			||||||
 | 
							for (MFlag mflag : this.getAll())
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (mflag.isRegistered() != registered) continue;
 | 
				
			||||||
 | 
								ret.add(mflag);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return ret;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -7,7 +7,6 @@ import org.bukkit.ChatColor;
 | 
				
			|||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.factions.EconomyParticipator;
 | 
					import com.massivecraft.factions.EconomyParticipator;
 | 
				
			||||||
import com.massivecraft.factions.FFlag;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.FPerm;
 | 
					import com.massivecraft.factions.FPerm;
 | 
				
			||||||
import com.massivecraft.factions.Factions;
 | 
					import com.massivecraft.factions.Factions;
 | 
				
			||||||
import com.massivecraft.factions.Lang;
 | 
					import com.massivecraft.factions.Lang;
 | 
				
			||||||
@@ -635,7 +634,7 @@ public class MPlayer extends SenderEntity<MPlayer> implements EconomyParticipato
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		Faction myFaction = this.getFaction();
 | 
							Faction myFaction = this.getFaction();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		boolean permanent = myFaction.getFlag(FFlag.PERMANENT);
 | 
							boolean permanent = myFaction.getFlag(MFlag.getPermanent());
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		if (myFaction.getMPlayers().size() > 1)
 | 
							if (myFaction.getMPlayers().size() > 1)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -725,7 +724,7 @@ public class MPlayer extends SenderEntity<MPlayer> implements EconomyParticipato
 | 
				
			|||||||
				
 | 
									
 | 
				
			||||||
				int ownedLand = newFaction.getLandCount();
 | 
									int ownedLand = newFaction.getLandCount();
 | 
				
			||||||
				
 | 
									
 | 
				
			||||||
				if (mconf.claimedLandsMax != 0 && ownedLand >= mconf.claimedLandsMax && ! newFaction.getFlag(FFlag.INFPOWER))
 | 
									if (mconf.claimedLandsMax != 0 && ownedLand >= mconf.claimedLandsMax && ! newFaction.getFlag(MFlag.getInfpower()))
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					msg("<b>Limit reached. You can't claim more land.");
 | 
										msg("<b>Limit reached. You can't claim more land.");
 | 
				
			||||||
					return false;
 | 
										return false;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,8 +4,9 @@ import org.bukkit.command.CommandSender;
 | 
				
			|||||||
import org.bukkit.event.HandlerList;
 | 
					import org.bukkit.event.HandlerList;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.factions.entity.Faction;
 | 
					import com.massivecraft.factions.entity.Faction;
 | 
				
			||||||
 | 
					import com.massivecraft.factions.entity.MFlag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class EventFactionsOpenChange extends EventFactionsAbstractSender
 | 
					public class EventFactionsFlagChange extends EventFactionsAbstractSender
 | 
				
			||||||
{	
 | 
					{	
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	// REQUIRED EVENT CODE
 | 
						// REQUIRED EVENT CODE
 | 
				
			||||||
@@ -22,19 +23,23 @@ public class EventFactionsOpenChange extends EventFactionsAbstractSender
 | 
				
			|||||||
	private final Faction faction;
 | 
						private final Faction faction;
 | 
				
			||||||
	public Faction getFaction() { return this.faction; }
 | 
						public Faction getFaction() { return this.faction; }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	private boolean newOpen;
 | 
						private final MFlag flag;
 | 
				
			||||||
	public boolean isNewOpen() { return this.newOpen; }
 | 
						public MFlag getFlag() { return this.flag; }
 | 
				
			||||||
	public void setNewOpen(boolean newOpen) { this.newOpen = newOpen; }
 | 
						
 | 
				
			||||||
 | 
						private boolean newValue;
 | 
				
			||||||
 | 
						public boolean isNewValue() { return this.newValue; }
 | 
				
			||||||
 | 
						public void setNewValue(boolean newValue) { this.newValue = newValue; }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	// CONSTRUCT
 | 
						// CONSTRUCT
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public EventFactionsOpenChange(CommandSender sender, Faction faction, boolean newOpen)
 | 
						public EventFactionsFlagChange(CommandSender sender, Faction faction, MFlag flag, boolean newValue)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		super(sender);
 | 
							super(sender);
 | 
				
			||||||
		this.faction = faction;
 | 
							this.faction = faction;
 | 
				
			||||||
		this.newOpen = newOpen;
 | 
							this.flag = flag;
 | 
				
			||||||
 | 
							this.newValue = newValue;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -22,7 +22,6 @@ import org.dynmap.markers.MarkerSet;
 | 
				
			|||||||
import org.dynmap.markers.PlayerSet;
 | 
					import org.dynmap.markers.PlayerSet;
 | 
				
			||||||
import org.dynmap.utils.TileFlags;
 | 
					import org.dynmap.utils.TileFlags;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.factions.FFlag;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.Factions;
 | 
					import com.massivecraft.factions.Factions;
 | 
				
			||||||
import com.massivecraft.factions.Rel;
 | 
					import com.massivecraft.factions.Rel;
 | 
				
			||||||
import com.massivecraft.factions.TerritoryAccess;
 | 
					import com.massivecraft.factions.TerritoryAccess;
 | 
				
			||||||
@@ -31,6 +30,7 @@ import com.massivecraft.factions.entity.BoardColl;
 | 
				
			|||||||
import com.massivecraft.factions.entity.Faction;
 | 
					import com.massivecraft.factions.entity.Faction;
 | 
				
			||||||
import com.massivecraft.factions.entity.FactionColl;
 | 
					import com.massivecraft.factions.entity.FactionColl;
 | 
				
			||||||
import com.massivecraft.factions.entity.MConf;
 | 
					import com.massivecraft.factions.entity.MConf;
 | 
				
			||||||
 | 
					import com.massivecraft.factions.entity.MFlag;
 | 
				
			||||||
import com.massivecraft.factions.entity.MPlayer;
 | 
					import com.massivecraft.factions.entity.MPlayer;
 | 
				
			||||||
import com.massivecraft.massivecore.EngineAbstract;
 | 
					import com.massivecraft.massivecore.EngineAbstract;
 | 
				
			||||||
import com.massivecraft.massivecore.money.Money;
 | 
					import com.massivecraft.massivecore.money.Money;
 | 
				
			||||||
@@ -759,10 +759,10 @@ public class EngineDynmap extends EngineAbstract
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
		// Flags and Open
 | 
							// Flags and Open
 | 
				
			||||||
		Map<String, Boolean> flags = new HashMap<String, Boolean>();
 | 
							Map<String, Boolean> flags = new HashMap<String, Boolean>();
 | 
				
			||||||
		flags.put("open", faction.isOpen());
 | 
							for (MFlag mflag : MFlag.getAll())
 | 
				
			||||||
		for (FFlag fflag : FFlag.values())
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			flags.put(fflag.getNicename(), faction.getFlag(fflag));
 | 
								if (!mflag.isVisible()) continue;
 | 
				
			||||||
 | 
								flags.put(mflag.getName(), faction.getFlag(mflag));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		for (Entry<String, Boolean> entry : flags.entrySet())
 | 
							for (Entry<String, Boolean> entry : flags.entrySet())
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@ import com.massivecraft.factions.event.EventFactionsInvitedChange;
 | 
				
			|||||||
import com.massivecraft.factions.event.EventFactionsMembershipChange;
 | 
					import com.massivecraft.factions.event.EventFactionsMembershipChange;
 | 
				
			||||||
import com.massivecraft.factions.event.EventFactionsMembershipChange.MembershipChangeReason;
 | 
					import com.massivecraft.factions.event.EventFactionsMembershipChange.MembershipChangeReason;
 | 
				
			||||||
import com.massivecraft.factions.event.EventFactionsNameChange;
 | 
					import com.massivecraft.factions.event.EventFactionsNameChange;
 | 
				
			||||||
import com.massivecraft.factions.event.EventFactionsOpenChange;
 | 
					import com.massivecraft.factions.event.EventFactionsFlagChange;
 | 
				
			||||||
import com.massivecraft.factions.event.EventFactionsRelationChange;
 | 
					import com.massivecraft.factions.event.EventFactionsRelationChange;
 | 
				
			||||||
import com.massivecraft.factions.event.EventFactionsTitleChange;
 | 
					import com.massivecraft.factions.event.EventFactionsTitleChange;
 | 
				
			||||||
import com.massivecraft.factions.integration.Econ;
 | 
					import com.massivecraft.factions.integration.Econ;
 | 
				
			||||||
@@ -209,10 +209,10 @@ public class FactionsListenerEcon implements Listener
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
 | 
						@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
 | 
				
			||||||
	public void payForCommand(EventFactionsOpenChange event)
 | 
						public void payForCommand(EventFactionsFlagChange event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		Double cost = MConf.get().econCostOpen;
 | 
							Double cost = MConf.get().econCostFlag;
 | 
				
			||||||
		String desc = Factions.get().getOuterCmdFactions().cmdFactionsOpen.getDesc();
 | 
							String desc = Factions.get().getOuterCmdFactions().cmdFactionsFlag.getDesc();
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		payForAction(event, cost, desc);
 | 
							payForAction(event, cost, desc);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,12 +54,12 @@ import org.bukkit.event.player.PlayerMoveEvent;
 | 
				
			|||||||
import org.bukkit.event.player.PlayerRespawnEvent;
 | 
					import org.bukkit.event.player.PlayerRespawnEvent;
 | 
				
			||||||
import org.bukkit.projectiles.ProjectileSource;
 | 
					import org.bukkit.projectiles.ProjectileSource;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.factions.FFlag;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.FPerm;
 | 
					import com.massivecraft.factions.FPerm;
 | 
				
			||||||
import com.massivecraft.factions.Factions;
 | 
					import com.massivecraft.factions.Factions;
 | 
				
			||||||
import com.massivecraft.factions.Rel;
 | 
					import com.massivecraft.factions.Rel;
 | 
				
			||||||
import com.massivecraft.factions.TerritoryAccess;
 | 
					import com.massivecraft.factions.TerritoryAccess;
 | 
				
			||||||
import com.massivecraft.factions.entity.BoardColl;
 | 
					import com.massivecraft.factions.entity.BoardColl;
 | 
				
			||||||
 | 
					import com.massivecraft.factions.entity.MFlag;
 | 
				
			||||||
import com.massivecraft.factions.entity.MPlayer;
 | 
					import com.massivecraft.factions.entity.MPlayer;
 | 
				
			||||||
import com.massivecraft.factions.entity.Faction;
 | 
					import com.massivecraft.factions.entity.Faction;
 | 
				
			||||||
import com.massivecraft.factions.entity.MConf;
 | 
					import com.massivecraft.factions.entity.MConf;
 | 
				
			||||||
@@ -195,7 +195,7 @@ public class FactionsListenerMain implements Listener
 | 
				
			|||||||
		// ... and powerloss can happen here ...
 | 
							// ... and powerloss can happen here ...
 | 
				
			||||||
		Faction faction = BoardColl.get().getFactionAt(PS.valueOf(player));
 | 
							Faction faction = BoardColl.get().getFactionAt(PS.valueOf(player));
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		if (!faction.getFlag(FFlag.POWERLOSS))
 | 
							if (!faction.getFlag(MFlag.getPowerloss()))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			mplayer.msg("<i>You didn't lose any power since the territory you died in works that way.");
 | 
								mplayer.msg("<i>You didn't lose any power since the territory you died in works that way.");
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
@@ -298,7 +298,7 @@ public class FactionsListenerMain implements Listener
 | 
				
			|||||||
		Faction defenderPsFaction = BoardColl.get().getFactionAt(defenderPs);
 | 
							Faction defenderPsFaction = BoardColl.get().getFactionAt(defenderPs);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		// ... PVP flag may cause a damage block ...
 | 
							// ... PVP flag may cause a damage block ...
 | 
				
			||||||
		if (defenderPsFaction.getFlag(FFlag.PVP) == false)
 | 
							if (defenderPsFaction.getFlag(MFlag.getPvp()) == false)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (eattacker == null)
 | 
								if (eattacker == null)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
@@ -316,7 +316,7 @@ public class FactionsListenerMain implements Listener
 | 
				
			|||||||
				}
 | 
									}
 | 
				
			||||||
				return ret;
 | 
									return ret;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			return defenderPsFaction.getFlag(FFlag.MONSTERS);
 | 
								return defenderPsFaction.getFlag(MFlag.getMonsters());
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// ... and if the attacker is a player ...
 | 
							// ... and if the attacker is a player ...
 | 
				
			||||||
@@ -334,7 +334,7 @@ public class FactionsListenerMain implements Listener
 | 
				
			|||||||
		// ... PVP flag may cause a damage block ...
 | 
							// ... PVP flag may cause a damage block ...
 | 
				
			||||||
		// (just checking the defender as above isn't enough. What about the attacker? It could be in a no-pvp area)
 | 
							// (just checking the defender as above isn't enough. What about the attacker? It could be in a no-pvp area)
 | 
				
			||||||
		// NOTE: This check is probably not that important but we could keep it anyways.
 | 
							// NOTE: This check is probably not that important but we could keep it anyways.
 | 
				
			||||||
		if (attackerPsFaction.getFlag(FFlag.PVP) == false)
 | 
							if (attackerPsFaction.getFlag(MFlag.getPvp()) == false)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			ret = falseUnlessDisallowedPvpEventCancelled(attacker, defender, event);
 | 
								ret = falseUnlessDisallowedPvpEventCancelled(attacker, defender, event);
 | 
				
			||||||
			if (!ret && notify) uattacker.msg("<i>PVP is disabled in %s.", attackerPsFaction.describeTo(uattacker));
 | 
								if (!ret && notify) uattacker.msg("<i>PVP is disabled in %s.", attackerPsFaction.describeTo(uattacker));
 | 
				
			||||||
@@ -371,7 +371,7 @@ public class FactionsListenerMain implements Listener
 | 
				
			|||||||
		Rel relation = defendFaction.getRelationTo(attackFaction);
 | 
							Rel relation = defendFaction.getRelationTo(attackFaction);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Check the relation
 | 
							// Check the relation
 | 
				
			||||||
		if (udefender.hasFaction() && relation.isFriend() && defenderPsFaction.getFlag(FFlag.FRIENDLYFIRE) == false)
 | 
							if (udefender.hasFaction() && relation.isFriend() && defenderPsFaction.getFlag(MFlag.getFriendlyire()) == false)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			ret = falseUnlessDisallowedPvpEventCancelled(attacker, defender, event);
 | 
								ret = falseUnlessDisallowedPvpEventCancelled(attacker, defender, event);
 | 
				
			||||||
			if (!ret && notify) uattacker.msg("<i>You can't hurt %s<i>.", relation.getDescPlayerMany());
 | 
								if (!ret && notify) uattacker.msg("<i>You can't hurt %s<i>.", relation.getDescPlayerMany());
 | 
				
			||||||
@@ -474,7 +474,7 @@ public class FactionsListenerMain implements Listener
 | 
				
			|||||||
		command = command.trim();
 | 
							command = command.trim();
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		// ... the command may be denied for members of permanent factions ...
 | 
							// ... the command may be denied for members of permanent factions ...
 | 
				
			||||||
		if (mplayer.hasFaction() && mplayer.getFaction().getFlag(FFlag.PERMANENT) && containsCommand(command, MConf.get().denyCommandsPermanentFactionMember))
 | 
							if (mplayer.hasFaction() && mplayer.getFaction().getFlag(MFlag.getPermanent()) && containsCommand(command, MConf.get().denyCommandsPermanentFactionMember))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			mplayer.msg("<b>You can't use \"<h>/%s<b>\" as member of a permanent faction.", command);
 | 
								mplayer.msg("<b>You can't use \"<h>/%s<b>\" as member of a permanent faction.", command);
 | 
				
			||||||
			event.setCancelled(true);
 | 
								event.setCancelled(true);
 | 
				
			||||||
@@ -528,7 +528,7 @@ public class FactionsListenerMain implements Listener
 | 
				
			|||||||
		// ... at a place where monsters are forbidden ...
 | 
							// ... at a place where monsters are forbidden ...
 | 
				
			||||||
		PS ps = PS.valueOf(event.getLocation());
 | 
							PS ps = PS.valueOf(event.getLocation());
 | 
				
			||||||
		Faction faction = BoardColl.get().getFactionAt(ps);
 | 
							Faction faction = BoardColl.get().getFactionAt(ps);
 | 
				
			||||||
		if (faction.getFlag(FFlag.MONSTERS)) return;
 | 
							if (faction.getFlag(MFlag.getMonsters())) return;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		// ... block the spawn.
 | 
							// ... block the spawn.
 | 
				
			||||||
		event.setCancelled(true);
 | 
							event.setCancelled(true);
 | 
				
			||||||
@@ -547,7 +547,7 @@ public class FactionsListenerMain implements Listener
 | 
				
			|||||||
		// ... at a place where monsters are forbidden ...
 | 
							// ... at a place where monsters are forbidden ...
 | 
				
			||||||
		PS ps = PS.valueOf(target);
 | 
							PS ps = PS.valueOf(target);
 | 
				
			||||||
		Faction faction = BoardColl.get().getFactionAt(ps);
 | 
							Faction faction = BoardColl.get().getFactionAt(ps);
 | 
				
			||||||
		if (faction.getFlag(FFlag.MONSTERS)) return;
 | 
							if (faction.getFlag(MFlag.getMonsters())) return;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		// ... then if ghast target nothing ...
 | 
							// ... then if ghast target nothing ...
 | 
				
			||||||
		if (event.getEntityType() == EntityType.GHAST)
 | 
							if (event.getEntityType() == EntityType.GHAST)
 | 
				
			||||||
@@ -651,7 +651,7 @@ public class FactionsListenerMain implements Listener
 | 
				
			|||||||
		// ... and the faction there has endergrief disabled ...
 | 
							// ... and the faction there has endergrief disabled ...
 | 
				
			||||||
		PS ps = PS.valueOf(event.getBlock());
 | 
							PS ps = PS.valueOf(event.getBlock());
 | 
				
			||||||
		Faction faction = BoardColl.get().getFactionAt(ps);
 | 
							Faction faction = BoardColl.get().getFactionAt(ps);
 | 
				
			||||||
		if (faction.getFlag(FFlag.ENDERGRIEF)) return;
 | 
							if (faction.getFlag(MFlag.getEndergrief())) return;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		// ... stop the block alteration.
 | 
							// ... stop the block alteration.
 | 
				
			||||||
		event.setCancelled(true);
 | 
							event.setCancelled(true);
 | 
				
			||||||
@@ -667,7 +667,7 @@ public class FactionsListenerMain implements Listener
 | 
				
			|||||||
		PS ps = PS.valueOf(block);
 | 
							PS ps = PS.valueOf(block);
 | 
				
			||||||
		Faction faction = BoardColl.get().getFactionAt(ps);
 | 
							Faction faction = BoardColl.get().getFactionAt(ps);
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
		if (faction.getFlag(FFlag.FIRESPREAD)) return;
 | 
							if (faction.getFlag(MFlag.getFirespread())) return;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		// then cancel the event.
 | 
							// then cancel the event.
 | 
				
			||||||
		cancellable.setCancelled(true);
 | 
							cancellable.setCancelled(true);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,6 @@ import java.util.Set;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import org.bukkit.event.EventPriority;
 | 
					import org.bukkit.event.EventPriority;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.factions.FFlag;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.FPerm;
 | 
					import com.massivecraft.factions.FPerm;
 | 
				
			||||||
import com.massivecraft.factions.Rel;
 | 
					import com.massivecraft.factions.Rel;
 | 
				
			||||||
import com.massivecraft.factions.entity.MConf;
 | 
					import com.massivecraft.factions.entity.MConf;
 | 
				
			||||||
@@ -28,8 +27,8 @@ public class OldConf extends Entity<OldConf>
 | 
				
			|||||||
		mconf.defaultPlayerFactionId = this.defaultPlayerFactionId;
 | 
							mconf.defaultPlayerFactionId = this.defaultPlayerFactionId;
 | 
				
			||||||
		mconf.defaultPlayerRole = this.defaultPlayerRole;
 | 
							mconf.defaultPlayerRole = this.defaultPlayerRole;
 | 
				
			||||||
		mconf.defaultPlayerPower = this.defaultPlayerPower;
 | 
							mconf.defaultPlayerPower = this.defaultPlayerPower;
 | 
				
			||||||
		mconf.defaultFactionOpen = this.defaultFactionOpen;
 | 
							//mconf.defaultFactionOpen = this.defaultFactionOpen;
 | 
				
			||||||
		mconf.defaultFactionFlags = this.defaultFactionFlags;
 | 
							//mconf.defaultFactionFlags = this.defaultFactionFlags;
 | 
				
			||||||
		mconf.defaultFactionPerms = this.defaultFactionPerms;
 | 
							mconf.defaultFactionPerms = this.defaultFactionPerms;
 | 
				
			||||||
		mconf.powerMax = this.powerMax;
 | 
							mconf.powerMax = this.powerMax;
 | 
				
			||||||
		mconf.powerMin = this.powerMin;
 | 
							mconf.powerMin = this.powerMin;
 | 
				
			||||||
@@ -78,7 +77,7 @@ public class OldConf extends Entity<OldConf>
 | 
				
			|||||||
		mconf.econCostName = this.econCostName;
 | 
							mconf.econCostName = this.econCostName;
 | 
				
			||||||
		mconf.econCostDescription = this.econCostDescription;
 | 
							mconf.econCostDescription = this.econCostDescription;
 | 
				
			||||||
		mconf.econCostTitle = this.econCostTitle;
 | 
							mconf.econCostTitle = this.econCostTitle;
 | 
				
			||||||
		mconf.econCostOpen = this.econCostOpen;
 | 
							mconf.econCostFlag = this.econCostOpen;
 | 
				
			||||||
		mconf.econRelCost = this.econRelCost;
 | 
							mconf.econRelCost = this.econRelCost;
 | 
				
			||||||
		mconf.bankEnabled = this.bankEnabled;
 | 
							mconf.bankEnabled = this.bankEnabled;
 | 
				
			||||||
		mconf.bankFactionPaysCosts = this.bankFactionPaysCosts;
 | 
							mconf.bankFactionPaysCosts = this.bankFactionPaysCosts;
 | 
				
			||||||
@@ -108,7 +107,7 @@ public class OldConf extends Entity<OldConf>
 | 
				
			|||||||
	public double defaultPlayerPower = 0.0;
 | 
						public double defaultPlayerPower = 0.0;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public boolean defaultFactionOpen = false;
 | 
						public boolean defaultFactionOpen = false;
 | 
				
			||||||
	public Map<FFlag, Boolean> defaultFactionFlags = null;
 | 
						//public Map<FFlag, Boolean> defaultFactionFlags = null;
 | 
				
			||||||
	public Map<FPerm, Set<Rel>> defaultFactionPerms = null;
 | 
						public Map<FPerm, Set<Rel>> defaultFactionPerms = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,9 +2,9 @@ package com.massivecraft.factions.util;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import org.bukkit.ChatColor;
 | 
					import org.bukkit.ChatColor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.factions.FFlag;
 | 
					 | 
				
			||||||
import com.massivecraft.factions.Rel;
 | 
					import com.massivecraft.factions.Rel;
 | 
				
			||||||
import com.massivecraft.factions.RelationParticipator;
 | 
					import com.massivecraft.factions.RelationParticipator;
 | 
				
			||||||
 | 
					import com.massivecraft.factions.entity.MFlag;
 | 
				
			||||||
import com.massivecraft.factions.entity.MPlayer;
 | 
					import com.massivecraft.factions.entity.MPlayer;
 | 
				
			||||||
import com.massivecraft.factions.entity.Faction;
 | 
					import com.massivecraft.factions.entity.Faction;
 | 
				
			||||||
import com.massivecraft.factions.entity.MConf;
 | 
					import com.massivecraft.factions.entity.MConf;
 | 
				
			||||||
@@ -108,7 +108,7 @@ public class RelationUtil
 | 
				
			|||||||
				//P.p.log("getRelationOfThatToMe it was a player and role is "+ret);
 | 
									//P.p.log("getRelationOfThatToMe it was a player and role is "+ret);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (!ignorePeaceful && (thatFaction.getFlag(FFlag.PEACEFUL) || myFaction.getFlag(FFlag.PEACEFUL)))
 | 
							else if (!ignorePeaceful && (thatFaction.getFlag(MFlag.getPeaceful()) || myFaction.getFlag(MFlag.getPeaceful())))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			ret = Rel.TRUCE;
 | 
								ret = Rel.TRUCE;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -137,12 +137,12 @@ public class RelationUtil
 | 
				
			|||||||
		Faction thatFaction = getFaction(that);
 | 
							Faction thatFaction = getFaction(that);
 | 
				
			||||||
		if (thatFaction != null && thatFaction != getFaction(me))
 | 
							if (thatFaction != null && thatFaction != getFaction(me))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (thatFaction.getFlag(FFlag.FRIENDLYFIRE) == true)
 | 
								if (thatFaction.getFlag(MFlag.getFriendlyire()) == true)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				return MConf.get().colorFriendlyFire;
 | 
									return MConf.get().colorFriendlyFire;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			if (thatFaction.getFlag(FFlag.PVP) == false)
 | 
								if (thatFaction.getFlag(MFlag.getPvp()) == false)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				return MConf.get().colorNoPVP;
 | 
									return MConf.get().colorNoPVP;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,6 @@ permissions:
 | 
				
			|||||||
  factions.disband: {description: disband faction, default: false}
 | 
					  factions.disband: {description: disband faction, default: false}
 | 
				
			||||||
  factions.faction: {description: show faction information, default: false}
 | 
					  factions.faction: {description: show faction information, default: false}
 | 
				
			||||||
  factions.flag: {description: manage faction flags, default: false}
 | 
					  factions.flag: {description: manage faction flags, default: false}
 | 
				
			||||||
  factions.flag.set: {description: set faction flags, default: false}
 | 
					 | 
				
			||||||
  factions.home: {description: teleport to faction home, default: false}
 | 
					  factions.home: {description: teleport to faction home, default: false}
 | 
				
			||||||
  factions.home.other: {description: teleport to another faction home, default: false}
 | 
					  factions.home.other: {description: teleport to another faction home, default: false}
 | 
				
			||||||
  factions.invite: {description: set if player is invited, default: false}
 | 
					  factions.invite: {description: set if player is invited, default: false}
 | 
				
			||||||
@@ -82,7 +81,6 @@ permissions:
 | 
				
			|||||||
      factions.disband: true
 | 
					      factions.disband: true
 | 
				
			||||||
      factions.faction: true
 | 
					      factions.faction: true
 | 
				
			||||||
      factions.flag: true
 | 
					      factions.flag: true
 | 
				
			||||||
      factions.flag.set: true
 | 
					 | 
				
			||||||
      factions.home: true
 | 
					      factions.home: true
 | 
				
			||||||
      factions.home.other: true
 | 
					      factions.home.other: true
 | 
				
			||||||
      factions.invite: true
 | 
					      factions.invite: true
 | 
				
			||||||
@@ -136,7 +134,6 @@ permissions:
 | 
				
			|||||||
    default: false
 | 
					    default: false
 | 
				
			||||||
    children:
 | 
					    children:
 | 
				
			||||||
      factions.kit.rank1: true
 | 
					      factions.kit.rank1: true
 | 
				
			||||||
      factions.flag.set: true
 | 
					 | 
				
			||||||
      factions.powerboost: true
 | 
					      factions.powerboost: true
 | 
				
			||||||
      factions.join.any: true
 | 
					      factions.join.any: true
 | 
				
			||||||
      factions.join.others: true
 | 
					      factions.join.others: true
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user