Make the Faction Permissions more dynamic as well.
This commit is contained in:
		@@ -1,223 +0,0 @@
 | 
			
		||||
package com.massivecraft.factions;
 | 
			
		||||
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.LinkedHashMap;
 | 
			
		||||
import java.util.LinkedHashSet;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.entity.BoardColl;
 | 
			
		||||
import com.massivecraft.factions.entity.MConf;
 | 
			
		||||
import com.massivecraft.factions.entity.MPlayer;
 | 
			
		||||
import com.massivecraft.factions.entity.Faction;
 | 
			
		||||
import com.massivecraft.massivecore.ps.PS;
 | 
			
		||||
import com.massivecraft.massivecore.util.Txt;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Permissions that you (a player) may or may not have in the territory of a certain faction.
 | 
			
		||||
 * Each faction have many Rel's assigned to each one of these Perms. 
 | 
			
		||||
 */
 | 
			
		||||
public enum FPerm
 | 
			
		||||
{
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// ENUM
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	BUILD(true, "build", "edit the terrain",              Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.ALLY),
 | 
			
		||||
	PAINBUILD(true, "painbuild", "edit, take damage"),
 | 
			
		||||
	DOOR(true, "door", "use doors",                       Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY),
 | 
			
		||||
	BUTTON(true, "button", "use stone buttons",           Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY),
 | 
			
		||||
	LEVER(true, "lever", "use levers",                    Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY),
 | 
			
		||||
	CONTAINER(true, "container", "use containers",        Rel.LEADER, Rel.OFFICER, Rel.MEMBER),
 | 
			
		||||
	
 | 
			
		||||
	INVITE(false, "invite", "invite players",             Rel.LEADER, Rel.OFFICER),
 | 
			
		||||
	KICK(false, "kick", "kick members",                   Rel.LEADER, Rel.OFFICER),
 | 
			
		||||
	SETHOME(false, "sethome", "set the home",             Rel.LEADER, Rel.OFFICER),
 | 
			
		||||
	WITHDRAW(false, "withdraw", "withdraw money",         Rel.LEADER, Rel.OFFICER),
 | 
			
		||||
	TERRITORY(false, "territory", "claim or unclaim",     Rel.LEADER, Rel.OFFICER),
 | 
			
		||||
	ACCESS(false, "access", "grant territory",            Rel.LEADER, Rel.OFFICER),
 | 
			
		||||
	DISBAND(false, "disband", "disband the faction",      Rel.LEADER),
 | 
			
		||||
	PERMS(false, "perms", "manage permissions",           Rel.LEADER),
 | 
			
		||||
	FLAGS(false, "flags", "manage flags",                 Rel.LEADER),
 | 
			
		||||
	
 | 
			
		||||
	// END OF LIST
 | 
			
		||||
	;
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// FIELDS
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	private final boolean territoryPerm;
 | 
			
		||||
	public boolean isTerritoryPerm() { return this.territoryPerm; }
 | 
			
		||||
	
 | 
			
		||||
	private final String nicename;
 | 
			
		||||
	public String getNicename() { return this.nicename; }
 | 
			
		||||
	
 | 
			
		||||
	private final String desc;
 | 
			
		||||
	public String getDescription() { return this.desc; }
 | 
			
		||||
	
 | 
			
		||||
	public final Set<Rel> defaultDefault;
 | 
			
		||||
	public Set<Rel> getDefaultDefault() { return new LinkedHashSet<Rel>(this.defaultDefault); }
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// CONSTRUCT
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	private FPerm(boolean territoryPerm, final String nicename, final String desc, final Rel... rels)
 | 
			
		||||
	{
 | 
			
		||||
		this.territoryPerm = territoryPerm;
 | 
			
		||||
		this.nicename = nicename;
 | 
			
		||||
		this.desc = desc;
 | 
			
		||||
		
 | 
			
		||||
		Set<Rel> defaultDefaultValue = new LinkedHashSet<Rel>();
 | 
			
		||||
		defaultDefaultValue.addAll(Arrays.asList(rels));
 | 
			
		||||
		defaultDefaultValue = Collections.unmodifiableSet(defaultDefaultValue);
 | 
			
		||||
		this.defaultDefault = defaultDefaultValue;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// DEFAULTS
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	public Set<Rel> getDefault()
 | 
			
		||||
	{
 | 
			
		||||
		Set<Rel> ret = MConf.get().defaultFactionPerms.get(this);
 | 
			
		||||
		if (ret == null) return this.getDefaultDefault();
 | 
			
		||||
		ret = new LinkedHashSet<Rel>(ret);
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public static Map<FPerm, Set<Rel>> getDefaultDefaults()
 | 
			
		||||
	{
 | 
			
		||||
		Map<FPerm, Set<Rel>> ret = new LinkedHashMap<FPerm, Set<Rel>>();
 | 
			
		||||
		for (FPerm fperm : values())
 | 
			
		||||
		{
 | 
			
		||||
			ret.put(fperm, fperm.getDefaultDefault());
 | 
			
		||||
		}
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// PARSE
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
 | 
			
		||||
	public static FPerm parse(String str)
 | 
			
		||||
	{
 | 
			
		||||
		str = str.toLowerCase();
 | 
			
		||||
		if (str.startsWith("a"))   return ACCESS;
 | 
			
		||||
		if (str.startsWith("bui")) return BUILD;
 | 
			
		||||
		if (str.startsWith("pa"))  return PAINBUILD;
 | 
			
		||||
		if (str.startsWith("do"))  return DOOR;
 | 
			
		||||
		if (str.startsWith("but")) return BUTTON;
 | 
			
		||||
		if (str.startsWith("l"))   return LEVER;
 | 
			
		||||
		if (str.startsWith("co"))  return CONTAINER;
 | 
			
		||||
		if (str.startsWith("i"))   return INVITE;
 | 
			
		||||
		if (str.startsWith("k"))   return KICK;
 | 
			
		||||
		if (str.startsWith("s"))   return SETHOME;
 | 
			
		||||
		if (str.startsWith("w"))   return WITHDRAW;
 | 
			
		||||
		if (str.startsWith("t"))   return TERRITORY;
 | 
			
		||||
		if (str.startsWith("di"))  return DISBAND;
 | 
			
		||||
		if (str.startsWith("pe"))  return PERMS;
 | 
			
		||||
		if (str.startsWith("f"))   return FLAGS;
 | 
			
		||||
		return null;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// HAS?
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	public String createDeniedMessage(MPlayer mplayer, Faction hostFaction)
 | 
			
		||||
	{
 | 
			
		||||
		String ret = Txt.parse("%s<b> does not allow you to %s<b>.", hostFaction.describeTo(mplayer, true), this.getDescription());
 | 
			
		||||
		if (Perm.ADMIN.has(mplayer.getPlayer()))
 | 
			
		||||
		{
 | 
			
		||||
			ret += Txt.parse("\n<i>You can bypass by using " + Factions.get().getOuterCmdFactions().cmdFactionsAdmin.getUseageTemplate(false));
 | 
			
		||||
		}
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public boolean has(Faction faction, Faction hostFaction)
 | 
			
		||||
	{
 | 
			
		||||
		Rel rel = faction.getRelationTo(hostFaction);
 | 
			
		||||
		return hostFaction.getPermittedRelations(this).contains(rel);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public boolean has(MPlayer mplayer, Faction hostFaction, boolean verboose)
 | 
			
		||||
	{
 | 
			
		||||
		if (mplayer.isUsingAdminMode()) return true;
 | 
			
		||||
		
 | 
			
		||||
		Rel rel = mplayer.getRelationTo(hostFaction);
 | 
			
		||||
		if (hostFaction.getPermittedRelations(this).contains(rel)) return true;
 | 
			
		||||
		
 | 
			
		||||
		if (verboose) mplayer.sendMessage(this.createDeniedMessage(mplayer, hostFaction));
 | 
			
		||||
		
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public boolean has(MPlayer mplayer, PS ps, boolean verboose)
 | 
			
		||||
	{
 | 
			
		||||
		if (mplayer.isUsingAdminMode()) return true;
 | 
			
		||||
		
 | 
			
		||||
		TerritoryAccess ta = BoardColl.get().getTerritoryAccessAt(ps);
 | 
			
		||||
		Faction hostFaction = ta.getHostFaction();
 | 
			
		||||
		
 | 
			
		||||
		if (this.isTerritoryPerm())
 | 
			
		||||
		{
 | 
			
		||||
			Boolean hasTerritoryAccess = ta.hasTerritoryAccess(mplayer);
 | 
			
		||||
			if (hasTerritoryAccess != null)
 | 
			
		||||
			{
 | 
			
		||||
				if (verboose && !hasTerritoryAccess)
 | 
			
		||||
				{
 | 
			
		||||
					mplayer.sendMessage(this.createDeniedMessage(mplayer, hostFaction));
 | 
			
		||||
				}
 | 
			
		||||
				return hasTerritoryAccess;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		return this.has(mplayer, hostFaction, verboose);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// UTIL: ASCII
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	public static String getStateHeaders()
 | 
			
		||||
	{
 | 
			
		||||
		String ret = "";
 | 
			
		||||
		for (Rel rel : Rel.values())
 | 
			
		||||
		{
 | 
			
		||||
			ret += rel.getColor().toString();
 | 
			
		||||
			ret += rel.toString().substring(0, 3);
 | 
			
		||||
			ret += " ";
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public String getStateInfo(Set<Rel> value, boolean withDesc)
 | 
			
		||||
	{
 | 
			
		||||
		String ret = "";
 | 
			
		||||
		
 | 
			
		||||
		for (Rel rel : Rel.values())
 | 
			
		||||
		{
 | 
			
		||||
			if (value.contains(rel))
 | 
			
		||||
			{
 | 
			
		||||
				ret += "<g>YES";
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				ret += "<b>NOO";
 | 
			
		||||
			}
 | 
			
		||||
			ret += " ";
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		ret +="<c>"+this.getNicename();
 | 
			
		||||
		if (withDesc)
 | 
			
		||||
		{
 | 
			
		||||
			ret += " <i>" + this.getDescription(); 
 | 
			
		||||
		}
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
@@ -2,7 +2,6 @@ package com.massivecraft.factions;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.adapter.BoardAdapter;
 | 
			
		||||
import com.massivecraft.factions.adapter.BoardMapAdapter;
 | 
			
		||||
import com.massivecraft.factions.adapter.FPermAdapter;
 | 
			
		||||
import com.massivecraft.factions.adapter.FactionPreprocessAdapter;
 | 
			
		||||
import com.massivecraft.factions.adapter.RelAdapter;
 | 
			
		||||
import com.massivecraft.factions.adapter.TerritoryAccessAdapter;
 | 
			
		||||
@@ -25,6 +24,7 @@ import com.massivecraft.factions.entity.BoardColl;
 | 
			
		||||
import com.massivecraft.factions.entity.Faction;
 | 
			
		||||
import com.massivecraft.factions.entity.FactionColl;
 | 
			
		||||
import com.massivecraft.factions.entity.MFlagColl;
 | 
			
		||||
import com.massivecraft.factions.entity.MPermColl;
 | 
			
		||||
import com.massivecraft.factions.entity.MPlayerColl;
 | 
			
		||||
import com.massivecraft.factions.entity.MConfColl;
 | 
			
		||||
import com.massivecraft.factions.integration.dynmap.IntegrationDynmap;
 | 
			
		||||
@@ -120,6 +120,7 @@ public class Factions extends MassivePlugin
 | 
			
		||||
		// Initialize Database
 | 
			
		||||
		this.databaseInitialized = false;
 | 
			
		||||
		MFlagColl.get().init();
 | 
			
		||||
		MPermColl.get().init();
 | 
			
		||||
		MConfColl.get().init();
 | 
			
		||||
		UpdateUtil.update();	
 | 
			
		||||
		MPlayerColl.get().init();
 | 
			
		||||
@@ -184,7 +185,6 @@ public class Factions extends MassivePlugin
 | 
			
		||||
		.registerTypeAdapter(Board.class, BoardAdapter.get())
 | 
			
		||||
		.registerTypeAdapter(Board.MAP_TYPE, BoardMapAdapter.get())
 | 
			
		||||
		.registerTypeAdapter(Rel.class, RelAdapter.get())
 | 
			
		||||
		.registerTypeAdapter(FPerm.class, FPermAdapter.get())
 | 
			
		||||
		;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 
 | 
			
		||||
@@ -1,29 +0,0 @@
 | 
			
		||||
package com.massivecraft.factions.adapter;
 | 
			
		||||
 | 
			
		||||
import java.lang.reflect.Type;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.FPerm;
 | 
			
		||||
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 FPermAdapter implements JsonDeserializer<FPerm>
 | 
			
		||||
{
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// INSTANCE & CONSTRUCT
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	private static FPermAdapter i = new FPermAdapter();
 | 
			
		||||
	public static FPermAdapter get() { return i; }
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// OVERRIDE
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public FPerm deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
 | 
			
		||||
	{
 | 
			
		||||
		return FPerm.parse(json.getAsString());
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.FPerm;
 | 
			
		||||
import com.massivecraft.factions.Perm;
 | 
			
		||||
import com.massivecraft.factions.cmd.arg.ARFaction;
 | 
			
		||||
import com.massivecraft.factions.entity.BoardColl;
 | 
			
		||||
import com.massivecraft.factions.entity.Faction;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm;
 | 
			
		||||
import com.massivecraft.massivecore.cmd.arg.ARBoolean;
 | 
			
		||||
import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
 | 
			
		||||
 | 
			
		||||
@@ -41,8 +41,8 @@ public class CmdFactionsAccessFaction extends CmdFactionsAccessAbstract
 | 
			
		||||
		Boolean newValue = this.arg(1, ARBoolean.get(), !ta.isFactionIdGranted(faction.getId()));
 | 
			
		||||
		if (newValue == null) return;
 | 
			
		||||
		
 | 
			
		||||
		// FPerm
 | 
			
		||||
		if (!FPerm.ACCESS.has(msender, hostFaction, true)) return;
 | 
			
		||||
		// MPerm
 | 
			
		||||
		if (!MPerm.getAccess().has(msender, hostFaction, true)) return;
 | 
			
		||||
		
 | 
			
		||||
		// Apply
 | 
			
		||||
		ta = ta.withFactionId(faction.getId(), newValue);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.FPerm;
 | 
			
		||||
import com.massivecraft.factions.Perm;
 | 
			
		||||
import com.massivecraft.factions.cmd.arg.ARMPlayer;
 | 
			
		||||
import com.massivecraft.factions.entity.BoardColl;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm;
 | 
			
		||||
import com.massivecraft.factions.entity.MPlayer;
 | 
			
		||||
import com.massivecraft.massivecore.cmd.arg.ARBoolean;
 | 
			
		||||
import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
 | 
			
		||||
@@ -41,8 +41,8 @@ public class CmdFactionsAccessPlayer extends CmdFactionsAccessAbstract
 | 
			
		||||
		Boolean newValue = this.arg(1, ARBoolean.get(), !ta.isPlayerIdGranted(mplayer.getId()));
 | 
			
		||||
		if (newValue == null) return;
 | 
			
		||||
		
 | 
			
		||||
		// FPerm
 | 
			
		||||
		if (!FPerm.ACCESS.has(msender, hostFaction, true)) return;
 | 
			
		||||
		// MPerm
 | 
			
		||||
		if (!MPerm.getAccess().has(msender, hostFaction, true)) return;
 | 
			
		||||
		
 | 
			
		||||
		// Apply
 | 
			
		||||
		ta = ta.withPlayerId(mplayer.getId(), newValue);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.FPerm;
 | 
			
		||||
import com.massivecraft.factions.Perm;
 | 
			
		||||
import com.massivecraft.factions.cmd.arg.ARFaction;
 | 
			
		||||
import com.massivecraft.factions.entity.Faction;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm;
 | 
			
		||||
import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
 | 
			
		||||
import com.massivecraft.massivecore.cmd.req.ReqIsPlayer;
 | 
			
		||||
import com.massivecraft.massivecore.ps.PS;
 | 
			
		||||
@@ -44,8 +44,8 @@ public class CmdFactionsAutoClaim extends FactionsCommand
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// FPerm
 | 
			
		||||
		if (forFaction.isNormal() && !FPerm.TERRITORY.has(msender, forFaction, true)) return;
 | 
			
		||||
		// MPerm
 | 
			
		||||
		if (forFaction.isNormal() && !MPerm.getTerritory().has(msender, forFaction, true)) return;
 | 
			
		||||
		
 | 
			
		||||
		msender.setAutoClaimFaction(forFaction);
 | 
			
		||||
		
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.FPerm;
 | 
			
		||||
import com.massivecraft.factions.Perm;
 | 
			
		||||
import com.massivecraft.factions.cmd.arg.ARFaction;
 | 
			
		||||
import com.massivecraft.factions.entity.Faction;
 | 
			
		||||
import com.massivecraft.factions.entity.MConf;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm;
 | 
			
		||||
import com.massivecraft.factions.task.SpiralTask;
 | 
			
		||||
import com.massivecraft.massivecore.cmd.arg.ARInteger;
 | 
			
		||||
import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
 | 
			
		||||
@@ -46,8 +46,8 @@ public class CmdFactionsClaim extends FactionsCommand
 | 
			
		||||
		final Faction forFaction = this.arg(1, ARFaction.get(), msenderFaction);
 | 
			
		||||
		if (forFaction == null) return;
 | 
			
		||||
		
 | 
			
		||||
		// FPerm
 | 
			
		||||
		if (forFaction.isNormal() && !FPerm.TERRITORY.has(msender, forFaction, true)) return;
 | 
			
		||||
		// MPerm
 | 
			
		||||
		if (forFaction.isNormal() && !MPerm.getTerritory().has(msender, forFaction, true)) return;
 | 
			
		||||
		
 | 
			
		||||
		// Validate
 | 
			
		||||
		if (radius < 1)
 | 
			
		||||
 
 | 
			
		||||
@@ -3,13 +3,13 @@ package com.massivecraft.factions.cmd;
 | 
			
		||||
import com.massivecraft.factions.cmd.arg.ARFaction;
 | 
			
		||||
import com.massivecraft.factions.entity.FactionColl;
 | 
			
		||||
import com.massivecraft.factions.entity.MFlag;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm;
 | 
			
		||||
import com.massivecraft.factions.entity.MPlayer;
 | 
			
		||||
import com.massivecraft.factions.entity.Faction;
 | 
			
		||||
import com.massivecraft.factions.entity.MConf;
 | 
			
		||||
import com.massivecraft.factions.event.EventFactionsDisband;
 | 
			
		||||
import com.massivecraft.factions.event.EventFactionsMembershipChange;
 | 
			
		||||
import com.massivecraft.factions.event.EventFactionsMembershipChange.MembershipChangeReason;
 | 
			
		||||
import com.massivecraft.factions.FPerm;
 | 
			
		||||
import com.massivecraft.factions.Factions;
 | 
			
		||||
import com.massivecraft.factions.Perm;
 | 
			
		||||
import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
 | 
			
		||||
@@ -45,8 +45,8 @@ public class CmdFactionsDisband extends FactionsCommand
 | 
			
		||||
		Faction faction = this.arg(0, ARFaction.get(), msenderFaction);
 | 
			
		||||
		if (faction == null) return;
 | 
			
		||||
		
 | 
			
		||||
		// FPerm
 | 
			
		||||
		if ( ! FPerm.DISBAND.has(msender, faction, true)) return;
 | 
			
		||||
		// MPerm
 | 
			
		||||
		if ( ! MPerm.getDisband().has(msender, faction, true)) return;
 | 
			
		||||
 | 
			
		||||
		// Verify
 | 
			
		||||
		if (faction.getFlag(MFlag.getPermanent()))
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.FPerm;
 | 
			
		||||
import com.massivecraft.factions.Perm;
 | 
			
		||||
import com.massivecraft.factions.cmd.arg.ARMFlag;
 | 
			
		||||
import com.massivecraft.factions.cmd.arg.ARFaction;
 | 
			
		||||
import com.massivecraft.factions.entity.Faction;
 | 
			
		||||
import com.massivecraft.factions.entity.MFlag;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm;
 | 
			
		||||
import com.massivecraft.factions.event.EventFactionsFlagChange;
 | 
			
		||||
import com.massivecraft.massivecore.cmd.arg.ARBoolean;
 | 
			
		||||
import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
 | 
			
		||||
@@ -67,7 +67,7 @@ public class CmdFactionsFlag extends FactionsCommand
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// Do the sender have the right to change flags for this faction?
 | 
			
		||||
		if ( ! FPerm.PERMS.has(msender, faction, true)) return;
 | 
			
		||||
		if ( ! MPerm.getFlags().has(msender, faction, true)) return;
 | 
			
		||||
		
 | 
			
		||||
		// Is this flag editable?
 | 
			
		||||
		if (!msender.isUsingAdminMode() && !mflag.isEditable())
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,6 @@ import org.bukkit.Location;
 | 
			
		||||
import org.bukkit.World;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.FPerm;
 | 
			
		||||
import com.massivecraft.factions.Factions;
 | 
			
		||||
import com.massivecraft.factions.Perm;
 | 
			
		||||
import com.massivecraft.factions.Rel;
 | 
			
		||||
@@ -12,6 +11,7 @@ import com.massivecraft.factions.cmd.arg.ARFaction;
 | 
			
		||||
import com.massivecraft.factions.entity.BoardColl;
 | 
			
		||||
import com.massivecraft.factions.entity.MConf;
 | 
			
		||||
import com.massivecraft.factions.entity.MFlag;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm;
 | 
			
		||||
import com.massivecraft.factions.entity.MPlayer;
 | 
			
		||||
import com.massivecraft.factions.entity.Faction;
 | 
			
		||||
import com.massivecraft.factions.event.EventFactionsHomeTeleport;
 | 
			
		||||
@@ -68,7 +68,7 @@ public class CmdFactionsHome extends FactionsCommandHome
 | 
			
		||||
		{
 | 
			
		||||
			msender.msg("<b>%s <b>does not have a home.", faction.describeTo(msender, true));
 | 
			
		||||
			
 | 
			
		||||
			if (FPerm.SETHOME.has(msender, faction, false))
 | 
			
		||||
			if (MPerm.getSethome().has(msender, faction, false))
 | 
			
		||||
			{
 | 
			
		||||
				msender.msg("<i>You should:");
 | 
			
		||||
				msender.sendMessage(Factions.get().getOuterCmdFactions().cmdFactionsSethome.getUseageTemplate());
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.FPerm;
 | 
			
		||||
import com.massivecraft.factions.Factions;
 | 
			
		||||
import com.massivecraft.factions.Perm;
 | 
			
		||||
import com.massivecraft.factions.cmd.arg.ARMPlayer;
 | 
			
		||||
import com.massivecraft.factions.cmd.req.ReqHasFaction;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm;
 | 
			
		||||
import com.massivecraft.factions.entity.MPlayer;
 | 
			
		||||
import com.massivecraft.factions.event.EventFactionsInvitedChange;
 | 
			
		||||
import com.massivecraft.massivecore.cmd.arg.ARBoolean;
 | 
			
		||||
@@ -54,8 +54,8 @@ public class CmdFactionsInvite extends FactionsCommand
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// FPerm
 | 
			
		||||
		if ( ! FPerm.INVITE.has(msender, msenderFaction, true)) return;
 | 
			
		||||
		// MPerm
 | 
			
		||||
		if ( ! MPerm.getInvite().has(msender, msenderFaction, true)) return;
 | 
			
		||||
		
 | 
			
		||||
		// Event
 | 
			
		||||
		EventFactionsInvitedChange event = new EventFactionsInvitedChange(sender, mplayer, msenderFaction, newInvited);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.FPerm;
 | 
			
		||||
import com.massivecraft.factions.Factions;
 | 
			
		||||
import com.massivecraft.factions.Perm;
 | 
			
		||||
import com.massivecraft.factions.Rel;
 | 
			
		||||
import com.massivecraft.factions.cmd.arg.ARMPlayer;
 | 
			
		||||
import com.massivecraft.factions.entity.FactionColl;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm;
 | 
			
		||||
import com.massivecraft.factions.entity.MPlayer;
 | 
			
		||||
import com.massivecraft.factions.entity.Faction;
 | 
			
		||||
import com.massivecraft.factions.entity.MConf;
 | 
			
		||||
@@ -63,9 +63,9 @@ public class CmdFactionsKick extends FactionsCommand
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// FPerm
 | 
			
		||||
		// MPerm
 | 
			
		||||
		Faction mplayerFaction = mplayer.getFaction();
 | 
			
		||||
		if (!FPerm.KICK.has(msender, mplayerFaction, true)) return;
 | 
			
		||||
		if ( ! MPerm.getKick().has(msender, mplayerFaction, true)) return;
 | 
			
		||||
 | 
			
		||||
		// Event
 | 
			
		||||
		EventFactionsMembershipChange event = new EventFactionsMembershipChange(sender, mplayer, FactionColl.get().getNone(), MembershipChangeReason.KICK);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,12 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.FPerm;
 | 
			
		||||
import com.massivecraft.factions.Perm;
 | 
			
		||||
import com.massivecraft.factions.Rel;
 | 
			
		||||
import com.massivecraft.factions.cmd.arg.ARFPerm;
 | 
			
		||||
import com.massivecraft.factions.cmd.arg.ARMPerm;
 | 
			
		||||
import com.massivecraft.factions.cmd.arg.ARFaction;
 | 
			
		||||
import com.massivecraft.factions.cmd.arg.ARRel;
 | 
			
		||||
import com.massivecraft.factions.entity.Faction;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm;
 | 
			
		||||
import com.massivecraft.massivecore.cmd.arg.ARBoolean;
 | 
			
		||||
import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
 | 
			
		||||
import com.massivecraft.massivecore.util.Txt;
 | 
			
		||||
@@ -40,60 +40,72 @@ public class CmdFactionsPerm extends FactionsCommand
 | 
			
		||||
	@Override
 | 
			
		||||
	public void perform()
 | 
			
		||||
	{
 | 
			
		||||
		// Arg: Faction
 | 
			
		||||
		Faction faction = this.arg(0, ARFaction.get(), msenderFaction);
 | 
			
		||||
		if (faction == null) return;
 | 
			
		||||
		
 | 
			
		||||
		// Case: Show All
 | 
			
		||||
		if ( ! this.argIsSet(1))
 | 
			
		||||
		{
 | 
			
		||||
			msg(Txt.titleize("Perms for " + faction.describeTo(msender, true)));
 | 
			
		||||
			msg(FPerm.getStateHeaders());
 | 
			
		||||
			for (FPerm perm : FPerm.values())
 | 
			
		||||
			msg(MPerm.getStateHeaders());
 | 
			
		||||
			for (MPerm perm : MPerm.getAll())
 | 
			
		||||
			{
 | 
			
		||||
				msg(perm.getStateInfo(faction.getPermittedRelations(perm), true));
 | 
			
		||||
			}
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		FPerm perm = this.arg(1, ARFPerm.get());
 | 
			
		||||
		if (perm == null) return;
 | 
			
		||||
		//System.out.println("perm = "+perm);
 | 
			
		||||
		// Arg: MPerm
 | 
			
		||||
		MPerm mperm = this.arg(1, ARMPerm.get());
 | 
			
		||||
		if (mperm == null) return;
 | 
			
		||||
		
 | 
			
		||||
		// Case: Show One
 | 
			
		||||
		if ( ! this.argIsSet(2))
 | 
			
		||||
		{
 | 
			
		||||
			msg(Txt.titleize("Perm for " + faction.describeTo(msender, true)));
 | 
			
		||||
			msg(FPerm.getStateHeaders());
 | 
			
		||||
			msg(perm.getStateInfo(faction.getPermittedRelations(perm), true));
 | 
			
		||||
			msg(MPerm.getStateHeaders());
 | 
			
		||||
			msg(mperm.getStateInfo(faction.getPermittedRelations(mperm), true));
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// Do the sender have the right to change perms for this faction?
 | 
			
		||||
		if ( ! FPerm.PERMS.has(msender, faction, true)) return;
 | 
			
		||||
		if ( ! MPerm.getPerms().has(msender, faction, true)) return;
 | 
			
		||||
		
 | 
			
		||||
		// Is this perm editable?
 | 
			
		||||
		if (!msender.isUsingAdminMode() && !mperm.isEditable())
 | 
			
		||||
		{
 | 
			
		||||
			msg("<b>The perm <h>%s <b>is not editable.", mperm.getName());
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Arg: Rel
 | 
			
		||||
		Rel rel = this.arg(2, ARRel.get());
 | 
			
		||||
		if (rel == null) return;
 | 
			
		||||
		
 | 
			
		||||
		if (!this.argIsSet(3))
 | 
			
		||||
		if ( ! this.argIsSet(3))
 | 
			
		||||
		{
 | 
			
		||||
			msg("<b>Should <h>%s <b>have the <h>%s <b>permission or not?\nYou must <h>add \"yes\" or \"no\" <b>at the end.", Txt.getNicedEnum(rel), Txt.getNicedEnum(perm));
 | 
			
		||||
			msg("<b>Should <h>%s <b>have the <h>%s <b>permission or not?\nYou must <h>add \"yes\" or \"no\" <b>at the end.", Txt.getNicedEnum(rel), Txt.upperCaseFirst(mperm.getName()));
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		Boolean val = this.arg(3, ARBoolean.get(), null);
 | 
			
		||||
		if (val == null) return;
 | 
			
		||||
		// Arg: Target Value
 | 
			
		||||
		Boolean targetValue = this.arg(3, ARBoolean.get(), null);
 | 
			
		||||
		if (targetValue == null) return;
 | 
			
		||||
		
 | 
			
		||||
		// Do the change
 | 
			
		||||
		//System.out.println("setRelationPermitted perm "+perm+", rel "+rel+", val "+val);
 | 
			
		||||
		faction.setRelationPermitted(perm, rel, val);
 | 
			
		||||
		// Apply
 | 
			
		||||
		faction.setRelationPermitted(mperm, rel, targetValue);
 | 
			
		||||
		
 | 
			
		||||
		// The following is to make sure the leader always has the right to change perms if that is our goal.
 | 
			
		||||
		if (perm == FPerm.PERMS && FPerm.PERMS.getDefault().contains(Rel.LEADER))
 | 
			
		||||
		if (mperm == MPerm.getPerms() && MPerm.getPerms().getStandard().contains(Rel.LEADER))
 | 
			
		||||
		{
 | 
			
		||||
			faction.setRelationPermitted(FPerm.PERMS, Rel.LEADER, true);
 | 
			
		||||
			faction.setRelationPermitted(MPerm.getPerms(), Rel.LEADER, true);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// Inform
 | 
			
		||||
		msg(Txt.titleize("Perm for " + faction.describeTo(msender, true)));
 | 
			
		||||
		msg(FPerm.getStateHeaders());
 | 
			
		||||
		msg(perm.getStateInfo(faction.getPermittedRelations(perm), true));
 | 
			
		||||
		msg(MPerm.getStateHeaders());
 | 
			
		||||
		msg(mperm.getStateInfo(faction.getPermittedRelations(mperm), true));
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.FPerm;
 | 
			
		||||
import com.massivecraft.factions.Factions;
 | 
			
		||||
import com.massivecraft.factions.Perm;
 | 
			
		||||
import com.massivecraft.factions.cmd.arg.ARFaction;
 | 
			
		||||
import com.massivecraft.factions.entity.Faction;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm;
 | 
			
		||||
import com.massivecraft.factions.event.EventFactionsHomeChange;
 | 
			
		||||
import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
 | 
			
		||||
import com.massivecraft.massivecore.cmd.req.ReqIsPlayer;
 | 
			
		||||
@@ -42,8 +42,8 @@ public class CmdFactionsSethome extends FactionsCommandHome
 | 
			
		||||
		
 | 
			
		||||
		PS newHome = PS.valueOf(me.getLocation());
 | 
			
		||||
		
 | 
			
		||||
		// FPerm
 | 
			
		||||
		if ( ! FPerm.SETHOME.has(msender, faction, true)) return;
 | 
			
		||||
		// MPerm
 | 
			
		||||
		if ( ! MPerm.getSethome().has(msender, faction, true)) return;
 | 
			
		||||
		
 | 
			
		||||
		// Verify
 | 
			
		||||
		if (!msender.isUsingAdminMode() && !faction.isValidHome(newHome))
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,6 @@ package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.FPerm;
 | 
			
		||||
import com.massivecraft.factions.Factions;
 | 
			
		||||
import com.massivecraft.factions.Perm;
 | 
			
		||||
import com.massivecraft.factions.Rel;
 | 
			
		||||
@@ -12,6 +11,7 @@ import com.massivecraft.factions.entity.BoardColl;
 | 
			
		||||
import com.massivecraft.factions.entity.Faction;
 | 
			
		||||
import com.massivecraft.factions.entity.FactionColl;
 | 
			
		||||
import com.massivecraft.factions.entity.MConf;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm;
 | 
			
		||||
import com.massivecraft.factions.event.EventFactionsChunkChange;
 | 
			
		||||
import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
 | 
			
		||||
import com.massivecraft.massivecore.ps.PS;
 | 
			
		||||
@@ -44,8 +44,8 @@ public class CmdFactionsUnclaimall extends FactionsCommand
 | 
			
		||||
		Faction faction = msenderFaction;
 | 
			
		||||
		Faction newFaction = FactionColl.get().getNone();
 | 
			
		||||
		
 | 
			
		||||
		// FPerm
 | 
			
		||||
		if (!FPerm.TERRITORY.has(msender, faction, true)) return;
 | 
			
		||||
		// MPerm
 | 
			
		||||
		if ( ! MPerm.getTerritory().has(msender, faction, true)) return;
 | 
			
		||||
 | 
			
		||||
		// Apply
 | 
			
		||||
		Set<PS> chunks = BoardColl.get().getChunks(faction);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.FPerm;
 | 
			
		||||
import com.massivecraft.factions.Perm;
 | 
			
		||||
import com.massivecraft.factions.cmd.arg.ARFaction;
 | 
			
		||||
import com.massivecraft.factions.entity.Faction;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm;
 | 
			
		||||
import com.massivecraft.factions.event.EventFactionsHomeChange;
 | 
			
		||||
import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
 | 
			
		||||
 | 
			
		||||
@@ -39,8 +39,8 @@ public class CmdFactionsUnsethome extends FactionsCommandHome
 | 
			
		||||
		// Other Perm
 | 
			
		||||
		if (faction != msenderFaction && !Perm.HOME_OTHER.has(sender, true)) return;
 | 
			
		||||
		
 | 
			
		||||
		// FPerm
 | 
			
		||||
		if ( ! FPerm.SETHOME.has(msender, faction, true)) return;
 | 
			
		||||
		// MPerm
 | 
			
		||||
		if ( ! MPerm.getSethome().has(msender, faction, true)) return;
 | 
			
		||||
		
 | 
			
		||||
		// NoChange
 | 
			
		||||
		if ( ! faction.hasHome())
 | 
			
		||||
 
 | 
			
		||||
@@ -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.FPerm;
 | 
			
		||||
import com.massivecraft.massivecore.cmd.arg.ARAbstractSelect;
 | 
			
		||||
import com.massivecraft.massivecore.util.Txt;
 | 
			
		||||
 | 
			
		||||
public class ARFPerm extends ARAbstractSelect<FPerm>
 | 
			
		||||
{
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// INSTANCE & CONSTRUCT
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	private static ARFPerm i = new ARFPerm();
 | 
			
		||||
	public static ARFPerm get() { return i; }
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// OVERRIDE
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public String typename()
 | 
			
		||||
	{
 | 
			
		||||
		return "faction permission";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public FPerm select(String str, CommandSender sender)
 | 
			
		||||
	{
 | 
			
		||||
		return FPerm.parse(str);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public Collection<String> altNames(CommandSender sender)
 | 
			
		||||
	{
 | 
			
		||||
		List<String> ret = new ArrayList<String>(); 
 | 
			
		||||
		
 | 
			
		||||
		for (FPerm fperm : FPerm.values())
 | 
			
		||||
		{
 | 
			
		||||
			ret.add(Txt.getNicedEnum(fperm));
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										88
									
								
								src/main/java/com/massivecraft/factions/cmd/arg/ARMPerm.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								src/main/java/com/massivecraft/factions/cmd/arg/ARMPerm.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.MPerm;
 | 
			
		||||
import com.massivecraft.massivecore.cmd.arg.ARAbstractSelect;
 | 
			
		||||
import com.massivecraft.massivecore.util.Txt;
 | 
			
		||||
 | 
			
		||||
public class ARMPerm extends ARAbstractSelect<MPerm>
 | 
			
		||||
{
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// INSTANCE & CONSTRUCT
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	private static ARMPerm i = new ARMPerm();
 | 
			
		||||
	public static ARMPerm get() { return i; }
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// OVERRIDE
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public String typename()
 | 
			
		||||
	{
 | 
			
		||||
		return "faction permission";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public MPerm select(String arg, CommandSender sender)
 | 
			
		||||
	{
 | 
			
		||||
		if (arg == null) return null;
 | 
			
		||||
		arg = getComparable(arg);
 | 
			
		||||
		
 | 
			
		||||
		// Algorithmic General Detection
 | 
			
		||||
		int startswithCount = 0;
 | 
			
		||||
		MPerm startswith = null;
 | 
			
		||||
		for (MPerm mperm : MPerm.getAll())
 | 
			
		||||
		{
 | 
			
		||||
			String comparable = getComparable(mperm);
 | 
			
		||||
			if (comparable.equals(arg)) return mperm;
 | 
			
		||||
			if (comparable.startsWith(arg))
 | 
			
		||||
			{
 | 
			
		||||
				startswith = mperm;
 | 
			
		||||
				startswithCount++;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		if (startswithCount == 1)
 | 
			
		||||
		{
 | 
			
		||||
			return startswith;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// Nothing found
 | 
			
		||||
		return null;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public Collection<String> altNames(CommandSender sender)
 | 
			
		||||
	{
 | 
			
		||||
		List<String> ret = new ArrayList<String>(); 
 | 
			
		||||
		
 | 
			
		||||
		for (MPerm mperm : MPerm.getAll())
 | 
			
		||||
		{
 | 
			
		||||
			ret.add(Txt.upperCaseFirst(mperm.getName()));
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// UTIL
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	public static String getComparable(String string)
 | 
			
		||||
	{
 | 
			
		||||
		return string.toLowerCase();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public static String getComparable(MPerm mperm)
 | 
			
		||||
	{
 | 
			
		||||
		return getComparable(mperm.getName());
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
@@ -9,7 +9,6 @@ import org.bukkit.command.CommandSender;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.EconomyParticipator;
 | 
			
		||||
import com.massivecraft.factions.FPerm;
 | 
			
		||||
import com.massivecraft.factions.FactionEqualsPredictate;
 | 
			
		||||
import com.massivecraft.factions.Factions;
 | 
			
		||||
import com.massivecraft.factions.Lang;
 | 
			
		||||
@@ -50,7 +49,7 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
 | 
			
		||||
		this.setInvitedPlayerIds(that.invitedPlayerIds);
 | 
			
		||||
		this.setRelationWishes(that.relationWishes);
 | 
			
		||||
		this.setFlagIds(that.flags);
 | 
			
		||||
		this.setPerms(that.perms);
 | 
			
		||||
		this.setPermIds(that.perms);
 | 
			
		||||
		
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
@@ -123,7 +122,7 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
 | 
			
		||||
 | 
			
		||||
	// The perm overrides are modifications to the default values.
 | 
			
		||||
	// Null means default.
 | 
			
		||||
	private Map<FPerm, Set<Rel>> perms = null;
 | 
			
		||||
	private Map<String, Set<Rel>> perms = null;
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// FIELD: id
 | 
			
		||||
@@ -546,15 +545,24 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
 | 
			
		||||
			ret.put(mflag, mflag.isStandard());
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// ... and if anything is explicitly set ...
 | 
			
		||||
		// ... and if anything is explicitly set we use that info ...
 | 
			
		||||
		if (this.flags != null)
 | 
			
		||||
		{
 | 
			
		||||
			// ... we we use that info.
 | 
			
		||||
			for (Entry<String, Boolean> entry : this.flags.entrySet())
 | 
			
		||||
			Iterator<Entry<String, Boolean>> iter = this.flags.entrySet().iterator();
 | 
			
		||||
			while (iter.hasNext())
 | 
			
		||||
			{
 | 
			
		||||
				String id = entry.getKey();
 | 
			
		||||
				if (id == null) continue;
 | 
			
		||||
				// ... for each entry ...
 | 
			
		||||
				Entry<String, Boolean> entry = iter.next();
 | 
			
		||||
				
 | 
			
		||||
				// ... extract id and remove null values ...
 | 
			
		||||
				String id = entry.getKey();					
 | 
			
		||||
				if (id == null)
 | 
			
		||||
				{
 | 
			
		||||
					iter.remove();
 | 
			
		||||
					continue;
 | 
			
		||||
				}
 | 
			
		||||
				
 | 
			
		||||
				// ... resolve object and skip unknowns ...
 | 
			
		||||
				MFlag mflag = MFlag.get(id);
 | 
			
		||||
				if (mflag == null) continue;
 | 
			
		||||
				
 | 
			
		||||
@@ -580,8 +588,18 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
 | 
			
		||||
				Iterator<Entry<String, Boolean>> iter = target.entrySet().iterator();
 | 
			
		||||
				while (iter.hasNext())
 | 
			
		||||
				{
 | 
			
		||||
					// For each entry ...
 | 
			
		||||
					Entry<String, Boolean> entry = iter.next();
 | 
			
		||||
					
 | 
			
		||||
					// ... extract id and remove null values ...
 | 
			
		||||
					String id = entry.getKey();
 | 
			
		||||
					if (id == null)
 | 
			
		||||
					{
 | 
			
		||||
						iter.remove();
 | 
			
		||||
						continue;
 | 
			
		||||
					}
 | 
			
		||||
						
 | 
			
		||||
					// ... remove if known and standard ...
 | 
			
		||||
					MFlag mflag = MFlag.get(id);
 | 
			
		||||
					if (mflag != null && mflag.isStandard() == entry.getValue())
 | 
			
		||||
					{
 | 
			
		||||
@@ -632,62 +650,76 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
 | 
			
		||||
	
 | 
			
		||||
	// RAW
 | 
			
		||||
	
 | 
			
		||||
	public Map<FPerm, Set<Rel>> getPerms()
 | 
			
		||||
	public Map<MPerm, Set<Rel>> getPerms()
 | 
			
		||||
	{
 | 
			
		||||
		Map<FPerm, Set<Rel>> ret = new LinkedHashMap<FPerm, Set<Rel>>();
 | 
			
		||||
		
 | 
			
		||||
		for (FPerm fperm : FPerm.values())
 | 
			
		||||
		// We start with default values ...
 | 
			
		||||
		Map<MPerm, Set<Rel>> ret = new LinkedHashMap<MPerm, Set<Rel>>();
 | 
			
		||||
		for (MPerm mperm : MPerm.getAll())
 | 
			
		||||
		{
 | 
			
		||||
			ret.put(fperm, fperm.getDefault());
 | 
			
		||||
			ret.put(mperm, new LinkedHashSet<Rel>(mperm.getStandard()));
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// ... and if anything is explicitly set we use that info ...
 | 
			
		||||
		if (this.perms != null)
 | 
			
		||||
		{
 | 
			
		||||
			for (Entry<FPerm, Set<Rel>> entry : this.perms.entrySet())
 | 
			
		||||
			Iterator<Entry<String, Set<Rel>>> iter = this.perms.entrySet().iterator();
 | 
			
		||||
			while (iter.hasNext())
 | 
			
		||||
			{
 | 
			
		||||
				ret.put(entry.getKey(), new LinkedHashSet<Rel>(entry.getValue()));
 | 
			
		||||
				// ... for each entry ...
 | 
			
		||||
				Entry<String, Set<Rel>> entry = iter.next();
 | 
			
		||||
				
 | 
			
		||||
				// ... extract id and remove null values ...
 | 
			
		||||
				String id = entry.getKey();					
 | 
			
		||||
				if (id == null)
 | 
			
		||||
				{
 | 
			
		||||
					iter.remove();
 | 
			
		||||
					continue;
 | 
			
		||||
				}
 | 
			
		||||
				
 | 
			
		||||
				// ... resolve object and skip unknowns ...
 | 
			
		||||
				MPerm mperm = MPerm.get(id);
 | 
			
		||||
				if (mperm == null) continue;
 | 
			
		||||
				
 | 
			
		||||
				ret.put(mperm, new LinkedHashSet<Rel>(entry.getValue()));
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void setPerms(Map<FPerm, Set<Rel>> perms)
 | 
			
		||||
	public void setPermIds(Map<String, Set<Rel>> perms)
 | 
			
		||||
	{
 | 
			
		||||
		// Clean input
 | 
			
		||||
		Map<FPerm, Set<Rel>> target;
 | 
			
		||||
		if (perms == null)
 | 
			
		||||
		Map<String, Set<Rel>> target = null;
 | 
			
		||||
		if (perms != null)
 | 
			
		||||
		{
 | 
			
		||||
			target = null;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			target = new LinkedHashMap<FPerm, Set<Rel>>();
 | 
			
		||||
			for (Entry<FPerm, Set<Rel>> entry : perms.entrySet())
 | 
			
		||||
			// We start out with what was suggested
 | 
			
		||||
			target = new LinkedHashMap<String, Set<Rel>>();
 | 
			
		||||
			for (Entry<String, Set<Rel>> entry : perms.entrySet())
 | 
			
		||||
			{
 | 
			
		||||
				target.put(entry.getKey(), new LinkedHashSet<Rel>(entry.getValue()));
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			// However if the context is fully live we try to throw some default values away.
 | 
			
		||||
			if (this.attached() && Factions.get().isDatabaseInitialized())
 | 
			
		||||
			{
 | 
			
		||||
				Iterator<Entry<FPerm, Set<Rel>>> iter = target.entrySet().iterator();
 | 
			
		||||
				Iterator<Entry<String, Set<Rel>>> iter = target.entrySet().iterator();
 | 
			
		||||
				while (iter.hasNext())
 | 
			
		||||
				{
 | 
			
		||||
					Entry<FPerm, Set<Rel>> entry = iter.next();
 | 
			
		||||
					// For each entry ...
 | 
			
		||||
					Entry<String, Set<Rel>> entry = iter.next();
 | 
			
		||||
					
 | 
			
		||||
					FPerm key = entry.getKey();					
 | 
			
		||||
					if (key == null)
 | 
			
		||||
					// ... extract id and remove null values ...
 | 
			
		||||
					String id = entry.getKey();					
 | 
			
		||||
					if (id == null)
 | 
			
		||||
					{
 | 
			
		||||
						// TODO: I have no idea why this key is null at times... Why?
 | 
			
		||||
						System.out.println("key was null :/");
 | 
			
		||||
						iter.remove();
 | 
			
		||||
						continue;
 | 
			
		||||
					}
 | 
			
		||||
					
 | 
			
		||||
					Set<Rel> keyDefault = key.getDefault();
 | 
			
		||||
					Set<Rel> value = entry.getValue();
 | 
			
		||||
					
 | 
			
		||||
					if (keyDefault.equals(value))
 | 
			
		||||
					// ... remove if known and standard ...
 | 
			
		||||
					MPerm mperm = MPerm.get(id);
 | 
			
		||||
					if (mperm != null && mperm.getStandard().equals(entry.getValue()))
 | 
			
		||||
					{
 | 
			
		||||
						iter.remove();
 | 
			
		||||
					}
 | 
			
		||||
@@ -707,33 +739,40 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
 | 
			
		||||
		this.changed();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void setPerms(Map<MPerm, Set<Rel>> perms)
 | 
			
		||||
	{
 | 
			
		||||
		Map<String, Set<Rel>> permIds = new LinkedHashMap<String, Set<Rel>>();
 | 
			
		||||
		for (Entry<MPerm, Set<Rel>> entry : perms.entrySet())
 | 
			
		||||
		{
 | 
			
		||||
			permIds.put(entry.getKey().getId(), entry.getValue());
 | 
			
		||||
		}
 | 
			
		||||
		setPermIds(permIds);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// FINER
 | 
			
		||||
	
 | 
			
		||||
	public Set<Rel> getPermittedRelations(FPerm perm)
 | 
			
		||||
	public Set<Rel> getPermittedRelations(MPerm perm)
 | 
			
		||||
	{
 | 
			
		||||
		return this.getPerms().get(perm);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void setPermittedRelations(FPerm perm, Set<Rel> rels)
 | 
			
		||||
	public void setPermittedRelations(MPerm perm, Set<Rel> rels)
 | 
			
		||||
	{
 | 
			
		||||
		Map<FPerm, Set<Rel>> perms = this.getPerms();
 | 
			
		||||
		Map<MPerm, Set<Rel>> perms = this.getPerms();
 | 
			
		||||
		perms.put(perm, rels);
 | 
			
		||||
		this.setPerms(perms);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void setPermittedRelations(FPerm perm, Rel... rels)
 | 
			
		||||
	public void setPermittedRelations(MPerm perm, Rel... rels)
 | 
			
		||||
	{
 | 
			
		||||
		Set<Rel> temp = new HashSet<Rel>();
 | 
			
		||||
		temp.addAll(Arrays.asList(rels));
 | 
			
		||||
		this.setPermittedRelations(perm, temp);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void setRelationPermitted(FPerm perm, Rel rel, boolean permitted)
 | 
			
		||||
	public void setRelationPermitted(MPerm perm, Rel rel, boolean permitted)
 | 
			
		||||
	{
 | 
			
		||||
		Map<FPerm, Set<Rel>> perms = this.getPerms();
 | 
			
		||||
		
 | 
			
		||||
		//System.out.println("setRelationPermitted before:");
 | 
			
		||||
		//System.out.println(Factions.get().gson.toJson(perms, new TypeToken<Map<FPerm, Set<Rel>>>(){}.getType()));
 | 
			
		||||
		Map<MPerm, Set<Rel>> perms = this.getPerms();
 | 
			
		||||
		
 | 
			
		||||
		Set<Rel> rels = perms.get(perm);
 | 
			
		||||
 | 
			
		||||
@@ -746,9 +785,6 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
 | 
			
		||||
			rels.remove(rel);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		//System.out.println("setRelationPermitted after:");
 | 
			
		||||
		//System.out.println(Factions.get().gson.toJson(perms, new TypeToken<Map<FPerm, Set<Rel>>>(){}.getType()));
 | 
			
		||||
		
 | 
			
		||||
		this.setPerms(perms);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,6 @@ import com.massivecraft.massivecore.store.Coll;
 | 
			
		||||
import com.massivecraft.massivecore.store.MStore;
 | 
			
		||||
import com.massivecraft.massivecore.util.Txt;
 | 
			
		||||
import com.massivecraft.factions.Const;
 | 
			
		||||
import com.massivecraft.factions.FPerm;
 | 
			
		||||
import com.massivecraft.factions.Factions;
 | 
			
		||||
import com.massivecraft.factions.Rel;
 | 
			
		||||
import com.massivecraft.factions.integration.Econ;
 | 
			
		||||
@@ -106,11 +105,11 @@ public class FactionColl extends Coll<Faction>
 | 
			
		||||
		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.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.BUTTON, Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
			
		||||
		faction.setPermittedRelations(FPerm.LEVER, Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
			
		||||
		faction.setPermittedRelations(MPerm.getBuild(), Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
			
		||||
		faction.setPermittedRelations(MPerm.getDoor(), Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
			
		||||
		faction.setPermittedRelations(MPerm.getContainer(), Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
			
		||||
		faction.setPermittedRelations(MPerm.getButton(), Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
			
		||||
		faction.setPermittedRelations(MPerm.getLever(), Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
			
		||||
		
 | 
			
		||||
		return faction;
 | 
			
		||||
	}
 | 
			
		||||
@@ -139,11 +138,11 @@ public class FactionColl extends Coll<Faction>
 | 
			
		||||
		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.CONTAINER, Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
			
		||||
		faction.setPermittedRelations(FPerm.BUTTON, Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
			
		||||
		faction.setPermittedRelations(FPerm.LEVER, Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
			
		||||
		faction.setPermittedRelations(FPerm.TERRITORY, Rel.LEADER, Rel.OFFICER, Rel.MEMBER);
 | 
			
		||||
		faction.setPermittedRelations(MPerm.getDoor(), Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
			
		||||
		faction.setPermittedRelations(MPerm.getContainer(), Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
			
		||||
		faction.setPermittedRelations(MPerm.getButton(), Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
			
		||||
		faction.setPermittedRelations(MPerm.getLever(), Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
			
		||||
		faction.setPermittedRelations(MPerm.getTerritory(), Rel.LEADER, Rel.OFFICER, Rel.MEMBER);
 | 
			
		||||
		
 | 
			
		||||
		return faction;
 | 
			
		||||
	}
 | 
			
		||||
@@ -172,11 +171,11 @@ public class FactionColl extends Coll<Faction>
 | 
			
		||||
		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.CONTAINER, Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
			
		||||
		faction.setPermittedRelations(FPerm.BUTTON, Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
			
		||||
		faction.setPermittedRelations(FPerm.LEVER, Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
			
		||||
		faction.setPermittedRelations(FPerm.TERRITORY, Rel.LEADER, Rel.OFFICER, Rel.MEMBER);
 | 
			
		||||
		faction.setPermittedRelations(MPerm.getDoor(), Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
			
		||||
		faction.setPermittedRelations(MPerm.getContainer(), Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
			
		||||
		faction.setPermittedRelations(MPerm.getButton(), Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
			
		||||
		faction.setPermittedRelations(MPerm.getLever(), Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY, Rel.TRUCE, Rel.NEUTRAL, Rel.ENEMY);
 | 
			
		||||
		faction.setPermittedRelations(MPerm.getTerritory(), Rel.LEADER, Rel.OFFICER, Rel.MEMBER);
 | 
			
		||||
		
 | 
			
		||||
		return faction;
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,6 @@ import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.entity.EntityType;
 | 
			
		||||
import org.bukkit.event.EventPriority;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.FPerm;
 | 
			
		||||
import com.massivecraft.factions.Factions;
 | 
			
		||||
import com.massivecraft.factions.Rel;
 | 
			
		||||
import com.massivecraft.factions.WorldExceptionSet;
 | 
			
		||||
@@ -103,8 +102,6 @@ public class MConf extends Entity<MConf>
 | 
			
		||||
	public String defaultPlayerFactionId = Factions.ID_NONE;
 | 
			
		||||
	public Rel defaultPlayerRole = Rel.RECRUIT;
 | 
			
		||||
	public double defaultPlayerPower = 0.0;
 | 
			
		||||
	
 | 
			
		||||
	public Map<FPerm, Set<Rel>> defaultFactionPerms = FPerm.getDefaultDefaults();
 | 
			
		||||
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// POWER
 | 
			
		||||
 
 | 
			
		||||
@@ -152,7 +152,7 @@ public class MFlag extends Entity<MFlag> implements Prioritized, Registerable
 | 
			
		||||
	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)
 | 
			
		||||
	// If it editable by the faction leader (or for who ever the 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; }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										325
									
								
								src/main/java/com/massivecraft/factions/entity/MPerm.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										325
									
								
								src/main/java/com/massivecraft/factions/entity/MPerm.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,325 @@
 | 
			
		||||
package com.massivecraft.factions.entity;
 | 
			
		||||
 | 
			
		||||
import java.util.LinkedHashSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.Factions;
 | 
			
		||||
import com.massivecraft.factions.Perm;
 | 
			
		||||
import com.massivecraft.factions.Rel;
 | 
			
		||||
import com.massivecraft.factions.TerritoryAccess;
 | 
			
		||||
import com.massivecraft.massivecore.PredictateIsRegistered;
 | 
			
		||||
import com.massivecraft.massivecore.Prioritized;
 | 
			
		||||
import com.massivecraft.massivecore.Registerable;
 | 
			
		||||
import com.massivecraft.massivecore.ps.PS;
 | 
			
		||||
import com.massivecraft.massivecore.store.Entity;
 | 
			
		||||
import com.massivecraft.massivecore.util.MUtil;
 | 
			
		||||
import com.massivecraft.massivecore.util.Txt;
 | 
			
		||||
 | 
			
		||||
public class MPerm extends Entity<MPerm> implements Prioritized, Registerable
 | 
			
		||||
{
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// CONSTANTS
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	public final static transient String ID_BUILD = "build";
 | 
			
		||||
	public final static transient String ID_PAINBUILD = "painbuild";
 | 
			
		||||
	public final static transient String ID_DOOR = "door";
 | 
			
		||||
	public final static transient String ID_BUTTON = "button";
 | 
			
		||||
	public final static transient String ID_LEVER = "lever";
 | 
			
		||||
	public final static transient String ID_CONTAINER = "container";
 | 
			
		||||
	public final static transient String ID_INVITE = "invite";
 | 
			
		||||
	public final static transient String ID_KICK = "kick";
 | 
			
		||||
	public final static transient String ID_SETHOME = "sethome";
 | 
			
		||||
	public final static transient String ID_WITHDRAW = "withdraw";
 | 
			
		||||
	public final static transient String ID_TERRITORY = "territory";
 | 
			
		||||
	public final static transient String ID_ACCESS = "access";
 | 
			
		||||
	public final static transient String ID_DISBAND = "disband";
 | 
			
		||||
	public final static transient String ID_FLAGS = "flags";
 | 
			
		||||
	public final static transient String ID_PERMS = "perms";
 | 
			
		||||
 | 
			
		||||
	public final static transient int PRIORITY_BUILD = 1000;
 | 
			
		||||
	public final static transient int PRIORITY_PAINBUILD = 2000;
 | 
			
		||||
	public final static transient int PRIORITY_DOOR = 3000;
 | 
			
		||||
	public final static transient int PRIORITY_BUTTON = 4000;
 | 
			
		||||
	public final static transient int PRIORITY_LEVER = 5000;
 | 
			
		||||
	public final static transient int PRIORITY_CONTAINER = 6000;
 | 
			
		||||
	public final static transient int PRIORITY_INVITE = 7000;
 | 
			
		||||
	public final static transient int PRIORITY_KICK = 8000;
 | 
			
		||||
	public final static transient int PRIORITY_SETHOME = 9000;
 | 
			
		||||
	public final static transient int PRIORITY_WITHDRAW = 10000;
 | 
			
		||||
	public final static transient int PRIORITY_TERRITORY = 12000;
 | 
			
		||||
	public final static transient int PRIORITY_ACCESS = 13000;
 | 
			
		||||
	public final static transient int PRIORITY_DISBAND = 14000;
 | 
			
		||||
	public final static transient int PRIORITY_FLAGS = 15000;
 | 
			
		||||
	public final static transient int PRIORITY_PERMS = 16000;
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// META: CORE
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	public static MPerm get(Object oid)
 | 
			
		||||
	{
 | 
			
		||||
		return MPermColl.get().get(oid);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public static List<MPerm> getAll()
 | 
			
		||||
	{
 | 
			
		||||
		return MPermColl.get().getAll(PredictateIsRegistered.get());
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public static void setupStandardPerms()
 | 
			
		||||
	{
 | 
			
		||||
		getBuild();
 | 
			
		||||
		getPainbuild();
 | 
			
		||||
		getDoor();
 | 
			
		||||
		getButton();
 | 
			
		||||
		getLever();
 | 
			
		||||
		getContainer();
 | 
			
		||||
		
 | 
			
		||||
		getInvite();
 | 
			
		||||
		getKick();
 | 
			
		||||
		getSethome();
 | 
			
		||||
		getWithdraw();
 | 
			
		||||
		getTerritory();
 | 
			
		||||
		getAccess();
 | 
			
		||||
		getDisband();
 | 
			
		||||
		getFlags();
 | 
			
		||||
		getPerms();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public static MPerm getBuild() { return getCreative(PRIORITY_BUILD, ID_BUILD, ID_BUILD, "edit the terrain", MUtil.set(Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.ALLY), true, true, true); }
 | 
			
		||||
	public static MPerm getPainbuild() { return getCreative(PRIORITY_PAINBUILD, ID_PAINBUILD, ID_PAINBUILD, "edit, take damage", new LinkedHashSet<Rel>(), true, true, true); }
 | 
			
		||||
	public static MPerm getDoor() { return getCreative(PRIORITY_DOOR, ID_DOOR, ID_DOOR, "use doors", MUtil.set(Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY), true, true, true); }
 | 
			
		||||
	public static MPerm getButton() { return getCreative(PRIORITY_BUTTON, ID_BUTTON, ID_BUTTON, "use stone buttons", MUtil.set(Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY), true, true, true); }
 | 
			
		||||
	public static MPerm getLever() { return getCreative(PRIORITY_LEVER, ID_LEVER, ID_LEVER, "use levers", MUtil.set(Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY), true, true, true); }
 | 
			
		||||
	public static MPerm getContainer() { return getCreative(PRIORITY_CONTAINER, ID_CONTAINER, ID_CONTAINER, "use containers", MUtil.set(Rel.LEADER, Rel.OFFICER, Rel.MEMBER), true, true, true); }
 | 
			
		||||
	
 | 
			
		||||
	public static MPerm getInvite() { return getCreative(PRIORITY_INVITE, ID_INVITE, ID_INVITE, "invite players", MUtil.set(Rel.LEADER, Rel.OFFICER), false, true, true); }
 | 
			
		||||
	public static MPerm getKick() { return getCreative(PRIORITY_KICK, ID_KICK, ID_KICK, "kick members", MUtil.set(Rel.LEADER, Rel.OFFICER), false, true, true); }
 | 
			
		||||
	public static MPerm getSethome() { return getCreative(PRIORITY_SETHOME, ID_SETHOME, ID_SETHOME, "set the home", MUtil.set(Rel.LEADER, Rel.OFFICER), false, true, true); }
 | 
			
		||||
	public static MPerm getWithdraw() { return getCreative(PRIORITY_WITHDRAW, ID_WITHDRAW, ID_WITHDRAW, "withdraw money", MUtil.set(Rel.LEADER, Rel.OFFICER), false, true, true); }
 | 
			
		||||
	public static MPerm getTerritory() { return getCreative(PRIORITY_TERRITORY, ID_TERRITORY, ID_TERRITORY, "claim or unclaim", MUtil.set(Rel.LEADER, Rel.OFFICER), false, true, true); }
 | 
			
		||||
	public static MPerm getAccess() { return getCreative(PRIORITY_ACCESS, ID_ACCESS, ID_ACCESS, "grant territory", MUtil.set(Rel.LEADER, Rel.OFFICER), false, true, true); }
 | 
			
		||||
	public static MPerm getDisband() { return getCreative(PRIORITY_DISBAND, ID_DISBAND, ID_DISBAND, "disband the faction", MUtil.set(Rel.LEADER), false, true, true); }
 | 
			
		||||
	public static MPerm getFlags() { return getCreative(PRIORITY_FLAGS, ID_FLAGS, ID_FLAGS, "manage flags", MUtil.set(Rel.LEADER), false, true, true); }
 | 
			
		||||
	public static MPerm getPerms() { return getCreative(PRIORITY_PERMS, ID_PERMS, ID_PERMS, "manage permissions", MUtil.set(Rel.LEADER), false, true, true); }
 | 
			
		||||
	
 | 
			
		||||
	public static MPerm getCreative(int priority, String id, String name, String desc, Set<Rel> standard, boolean territory, boolean editable, boolean visible)
 | 
			
		||||
	{
 | 
			
		||||
		MPerm ret = MPermColl.get().get(id, false);
 | 
			
		||||
		if (ret != null)
 | 
			
		||||
		{
 | 
			
		||||
			ret.setRegistered(true);
 | 
			
		||||
			return ret;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		ret = new MPerm(priority, name, desc, standard, territory, editable, visible);
 | 
			
		||||
		MPermColl.get().attach(ret, id);
 | 
			
		||||
		ret.setRegistered(true);
 | 
			
		||||
		ret.sync();
 | 
			
		||||
		
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// OVERRIDE
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public MPerm load(MPerm that)
 | 
			
		||||
	{
 | 
			
		||||
		this.priority = that.priority;
 | 
			
		||||
		this.name = that.name;
 | 
			
		||||
		this.desc = that.desc;
 | 
			
		||||
		this.standard = that.standard;
 | 
			
		||||
		this.territory = that.territory;
 | 
			
		||||
		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 MPerm setPriority(int priority) { this.priority = priority; this.changed(); return this; }
 | 
			
		||||
	
 | 
			
		||||
	// Nice name / Display name
 | 
			
		||||
	// Example: "build"
 | 
			
		||||
	private String name = "defaultName";
 | 
			
		||||
	public String getName() { return this.name; }
 | 
			
		||||
	public MPerm setName(String name) { this.name = name; this.changed(); return this; }
 | 
			
		||||
	
 | 
			
		||||
	// Short description
 | 
			
		||||
	// Example: "edit the terrain"
 | 
			
		||||
	private String desc = "defaultDesc";
 | 
			
		||||
	public String getDesc() { return this.desc; }
 | 
			
		||||
	public MPerm setDesc(String desc) { this.desc = desc; this.changed(); return this; }
 | 
			
		||||
	
 | 
			
		||||
	// Standard value
 | 
			
		||||
	// Example: ... set of relations ...
 | 
			
		||||
	private Set<Rel> standard = new LinkedHashSet<Rel>();
 | 
			
		||||
	public Set<Rel> getStandard() { return this.standard; }
 | 
			
		||||
	public MPerm setStandard(Set<Rel> standard) { this.standard = standard; this.changed(); return this; }
 | 
			
		||||
	
 | 
			
		||||
	// Is this a territory permission?
 | 
			
		||||
	private boolean territory = false;
 | 
			
		||||
	public boolean isTerritory() { return this.territory; }
 | 
			
		||||
	public MPerm setTerritory(boolean territory) { this.territory = territory; this.changed(); return this; }
 | 
			
		||||
	
 | 
			
		||||
	// If it editable by the faction leader (or for who ever the permission is configured)
 | 
			
		||||
	// Example: true (all perms are editable by default)
 | 
			
		||||
	private boolean editable = false;
 | 
			
		||||
	public boolean isEditable() { return this.editable; }
 | 
			
		||||
	public MPerm 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 permission)
 | 
			
		||||
	// Explanation: Some flags are rendered meaningless by other plugins.
 | 
			
		||||
	private boolean visible = true;
 | 
			
		||||
	public boolean isVisible() { return this.visible; }
 | 
			
		||||
	public MPerm setVisible(boolean visible) { this.visible = visible; this.changed(); return this; }
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// CONSTRUCT
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	public MPerm()
 | 
			
		||||
	{
 | 
			
		||||
		// No argument constructor for GSON
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public MPerm(int priority, String name, String desc, Set<Rel> standard, boolean territory, boolean editable, boolean visible)
 | 
			
		||||
	{
 | 
			
		||||
		this.priority = priority;
 | 
			
		||||
		this.name = name;
 | 
			
		||||
		this.desc = desc;
 | 
			
		||||
		this.standard = standard;
 | 
			
		||||
		this.territory = territory;
 | 
			
		||||
		this.editable = editable;
 | 
			
		||||
		this.visible = visible;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// EXTRAS
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	public String createDeniedMessage(MPlayer mplayer, Faction hostFaction)
 | 
			
		||||
	{
 | 
			
		||||
		String ret = Txt.parse("%s<b> does not allow you to %s<b>.", hostFaction.describeTo(mplayer, true), this.getDesc());
 | 
			
		||||
		if (Perm.ADMIN.has(mplayer.getPlayer()))
 | 
			
		||||
		{
 | 
			
		||||
			ret += Txt.parse("\n<i>You can bypass by using " + Factions.get().getOuterCmdFactions().cmdFactionsAdmin.getUseageTemplate(false));
 | 
			
		||||
		}
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public boolean has(Faction faction, Faction hostFaction)
 | 
			
		||||
	{
 | 
			
		||||
		Rel rel = faction.getRelationTo(hostFaction);
 | 
			
		||||
		return hostFaction.getPermittedRelations(this).contains(rel);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public boolean has(MPlayer mplayer, Faction hostFaction, boolean verboose)
 | 
			
		||||
	{
 | 
			
		||||
		if (mplayer.isUsingAdminMode()) return true;
 | 
			
		||||
		
 | 
			
		||||
		Rel rel = mplayer.getRelationTo(hostFaction);
 | 
			
		||||
		if (hostFaction.getPermittedRelations(this).contains(rel)) return true;
 | 
			
		||||
		
 | 
			
		||||
		if (verboose) mplayer.sendMessage(this.createDeniedMessage(mplayer, hostFaction));
 | 
			
		||||
		
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public boolean has(MPlayer mplayer, PS ps, boolean verboose)
 | 
			
		||||
	{
 | 
			
		||||
		if (mplayer.isUsingAdminMode()) return true;
 | 
			
		||||
		
 | 
			
		||||
		TerritoryAccess ta = BoardColl.get().getTerritoryAccessAt(ps);
 | 
			
		||||
		Faction hostFaction = ta.getHostFaction();
 | 
			
		||||
		
 | 
			
		||||
		if (this.isTerritory())
 | 
			
		||||
		{
 | 
			
		||||
			Boolean hasTerritoryAccess = ta.hasTerritoryAccess(mplayer);
 | 
			
		||||
			if (hasTerritoryAccess != null)
 | 
			
		||||
			{
 | 
			
		||||
				if (verboose && !hasTerritoryAccess)
 | 
			
		||||
				{
 | 
			
		||||
					mplayer.sendMessage(this.createDeniedMessage(mplayer, hostFaction));
 | 
			
		||||
				}
 | 
			
		||||
				return hasTerritoryAccess;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		return this.has(mplayer, hostFaction, verboose);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// UTIL: ASCII
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	public static String getStateHeaders()
 | 
			
		||||
	{
 | 
			
		||||
		String ret = "";
 | 
			
		||||
		for (Rel rel : Rel.values())
 | 
			
		||||
		{
 | 
			
		||||
			ret += rel.getColor().toString();
 | 
			
		||||
			ret += rel.toString().substring(0, 3);
 | 
			
		||||
			ret += " ";
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public String getStateInfo(Set<Rel> value, boolean withDesc)
 | 
			
		||||
	{
 | 
			
		||||
		String ret = "";
 | 
			
		||||
		
 | 
			
		||||
		for (Rel rel : Rel.values())
 | 
			
		||||
		{
 | 
			
		||||
			if (value.contains(rel))
 | 
			
		||||
			{
 | 
			
		||||
				ret += "<g>YES";
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				ret += "<b>NOO";
 | 
			
		||||
			}
 | 
			
		||||
			ret += " ";
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		String color = "<aqua>";
 | 
			
		||||
		if (!this.isVisible())
 | 
			
		||||
		{
 | 
			
		||||
			color = "<silver>";
 | 
			
		||||
		}
 | 
			
		||||
		else if (this.isEditable())
 | 
			
		||||
		{
 | 
			
		||||
			color = "<pink>";
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		ret += color;
 | 
			
		||||
		ret += this.getName();
 | 
			
		||||
		
 | 
			
		||||
		ret = Txt.parse(ret);
 | 
			
		||||
		
 | 
			
		||||
		if (withDesc) ret += " <i>" + this.getDesc();
 | 
			
		||||
		
 | 
			
		||||
		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 MPermColl extends Coll<MPerm>
 | 
			
		||||
{
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// INSTANCE & CONSTRUCT
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	private static MPermColl i = new MPermColl();
 | 
			
		||||
	public static MPermColl get() { return i; }
 | 
			
		||||
	private MPermColl()
 | 
			
		||||
	{
 | 
			
		||||
		super(Const.COLLECTION_MPERM, MPerm.class, MStore.getDb(), Factions.get(), false, false, true, null, PriorityComparator.get());
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// OVERRIDE
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public void init()
 | 
			
		||||
	{
 | 
			
		||||
		super.init();
 | 
			
		||||
		MPerm.setupStandardPerms();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// EXTRAS
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	public List<MPerm> getAll(boolean registered)
 | 
			
		||||
	{
 | 
			
		||||
		List<MPerm> ret = new ArrayList<MPerm>();
 | 
			
		||||
		for (MPerm mperm : this.getAll())
 | 
			
		||||
		{
 | 
			
		||||
			if (mperm.isRegistered() != registered) continue;
 | 
			
		||||
			ret.add(mperm);
 | 
			
		||||
		}
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
@@ -7,7 +7,6 @@ import org.bukkit.ChatColor;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.EconomyParticipator;
 | 
			
		||||
import com.massivecraft.factions.FPerm;
 | 
			
		||||
import com.massivecraft.factions.Factions;
 | 
			
		||||
import com.massivecraft.factions.Lang;
 | 
			
		||||
import com.massivecraft.factions.Perm;
 | 
			
		||||
@@ -711,7 +710,7 @@ public class MPlayer extends SenderEntity<MPlayer> implements EconomyParticipato
 | 
			
		||||
					return false;
 | 
			
		||||
				}
 | 
			
		||||
				
 | 
			
		||||
				if (!FPerm.TERRITORY.has(this, newFaction, true))
 | 
			
		||||
				if (!MPerm.getTerritory().has(this, newFaction, true))
 | 
			
		||||
				{
 | 
			
		||||
					return false;
 | 
			
		||||
				}
 | 
			
		||||
@@ -761,7 +760,7 @@ public class MPlayer extends SenderEntity<MPlayer> implements EconomyParticipato
 | 
			
		||||
			
 | 
			
		||||
			if (oldFaction.isNormal())
 | 
			
		||||
			{
 | 
			
		||||
				if (!FPerm.TERRITORY.has(this, oldFaction, false))
 | 
			
		||||
				if (!MPerm.getTerritory().has(this, oldFaction, false))
 | 
			
		||||
				{
 | 
			
		||||
					if (!mconf.claimingFromOthersAllowed)
 | 
			
		||||
					{
 | 
			
		||||
 
 | 
			
		||||
@@ -4,8 +4,8 @@ import java.util.HashSet;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.EconomyParticipator;
 | 
			
		||||
import com.massivecraft.factions.FPerm;
 | 
			
		||||
import com.massivecraft.factions.entity.MConf;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm;
 | 
			
		||||
import com.massivecraft.factions.entity.MPlayer;
 | 
			
		||||
import com.massivecraft.factions.entity.Faction;
 | 
			
		||||
import com.massivecraft.factions.util.RelationUtil;
 | 
			
		||||
@@ -88,8 +88,8 @@ public class Econ
 | 
			
		||||
		// Factions can be controlled by those that have permissions
 | 
			
		||||
		if (you instanceof Faction)
 | 
			
		||||
		{
 | 
			
		||||
			if (i instanceof Faction && FPerm.WITHDRAW.has((Faction)i, fYou)) return true;
 | 
			
		||||
			if (i instanceof MPlayer && FPerm.WITHDRAW.has((MPlayer)i, fYou, false)) return true;
 | 
			
		||||
			if (i instanceof Faction && MPerm.getWithdraw().has((Faction)i, fYou)) return true;
 | 
			
		||||
			if (i instanceof MPlayer && MPerm.getWithdraw().has((MPlayer)i, fYou, false)) return true;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// Otherwise you may not! ;,,;
 | 
			
		||||
 
 | 
			
		||||
@@ -54,12 +54,12 @@ import org.bukkit.event.player.PlayerMoveEvent;
 | 
			
		||||
import org.bukkit.event.player.PlayerRespawnEvent;
 | 
			
		||||
import org.bukkit.projectiles.ProjectileSource;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.FPerm;
 | 
			
		||||
import com.massivecraft.factions.Factions;
 | 
			
		||||
import com.massivecraft.factions.Rel;
 | 
			
		||||
import com.massivecraft.factions.TerritoryAccess;
 | 
			
		||||
import com.massivecraft.factions.entity.BoardColl;
 | 
			
		||||
import com.massivecraft.factions.entity.MFlag;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm;
 | 
			
		||||
import com.massivecraft.factions.entity.MPlayer;
 | 
			
		||||
import com.massivecraft.factions.entity.Faction;
 | 
			
		||||
import com.massivecraft.factions.entity.MConf;
 | 
			
		||||
@@ -717,7 +717,7 @@ public class FactionsListenerMain implements Listener
 | 
			
		||||
 | 
			
		||||
		if (mplayer.isUsingAdminMode()) return true;
 | 
			
		||||
 | 
			
		||||
		if (!FPerm.BUILD.has(mplayer, ps, false) && FPerm.PAINBUILD.has(mplayer, ps, false))
 | 
			
		||||
		if (!MPerm.getBuild().has(mplayer, ps, false) && MPerm.getPainbuild().has(mplayer, ps, false))
 | 
			
		||||
		{
 | 
			
		||||
			if (verboose)
 | 
			
		||||
			{
 | 
			
		||||
@@ -732,7 +732,7 @@ public class FactionsListenerMain implements Listener
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		return FPerm.BUILD.has(mplayer, ps, verboose);
 | 
			
		||||
		return MPerm.getBuild().has(mplayer, ps, verboose);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
 | 
			
		||||
@@ -822,7 +822,7 @@ public class FactionsListenerMain implements Listener
 | 
			
		||||
		if (targetFaction == pistonFaction) return;
 | 
			
		||||
 | 
			
		||||
		// if potentially pushing into air/water/lava in another territory, we need to check it out
 | 
			
		||||
		if ((targetBlock.isEmpty() || targetBlock.isLiquid()) && ! FPerm.BUILD.has(pistonFaction, targetFaction))
 | 
			
		||||
		if ((targetBlock.isEmpty() || targetBlock.isLiquid()) && ! MPerm.getBuild().has(pistonFaction, targetFaction))
 | 
			
		||||
		{
 | 
			
		||||
			event.setCancelled(true);
 | 
			
		||||
		}
 | 
			
		||||
@@ -852,7 +852,7 @@ public class FactionsListenerMain implements Listener
 | 
			
		||||
		Faction targetFaction = BoardColl.get().getFactionAt(retractPs);
 | 
			
		||||
		if (targetFaction == pistonFaction) return;
 | 
			
		||||
 | 
			
		||||
		if (!FPerm.BUILD.has(pistonFaction, targetFaction))
 | 
			
		||||
		if (!MPerm.getBuild().has(pistonFaction, targetFaction))
 | 
			
		||||
		{
 | 
			
		||||
			event.setCancelled(true);
 | 
			
		||||
		}
 | 
			
		||||
@@ -900,7 +900,7 @@ public class FactionsListenerMain implements Listener
 | 
			
		||||
		MPlayer mplayer = MPlayer.get(player);
 | 
			
		||||
		if (mplayer.isUsingAdminMode()) return true;
 | 
			
		||||
		
 | 
			
		||||
		return FPerm.BUILD.has(mplayer, ps, !justCheck);
 | 
			
		||||
		return MPerm.getBuild().has(mplayer, ps, !justCheck);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public static boolean canPlayerUseBlock(Player player, Block block, boolean justCheck)
 | 
			
		||||
@@ -914,11 +914,11 @@ public class FactionsListenerMain implements Listener
 | 
			
		||||
		PS ps = PS.valueOf(block);
 | 
			
		||||
		Material material = block.getType();
 | 
			
		||||
		
 | 
			
		||||
		if (MConf.get().materialsEditOnInteract.contains(material) && ! FPerm.BUILD.has(me, ps, ! justCheck)) return false;
 | 
			
		||||
		if (MConf.get().materialsContainer.contains(material) && ! FPerm.CONTAINER.has(me, ps, ! justCheck)) return false;
 | 
			
		||||
		if (MConf.get().materialsDoor.contains(material) && ! FPerm.DOOR.has(me, ps, ! justCheck)) return false;
 | 
			
		||||
		if (material == Material.STONE_BUTTON && ! FPerm.BUTTON.has(me, ps, ! justCheck)) return false;
 | 
			
		||||
		if (material == Material.LEVER && ! FPerm.LEVER.has(me, ps, ! justCheck)) return false;
 | 
			
		||||
		if (MConf.get().materialsEditOnInteract.contains(material) && ! MPerm.getBuild().has(me, ps, ! justCheck)) return false;
 | 
			
		||||
		if (MConf.get().materialsContainer.contains(material) && ! MPerm.getContainer().has(me, ps, ! justCheck)) return false;
 | 
			
		||||
		if (MConf.get().materialsDoor.contains(material) && ! MPerm.getDoor().has(me, ps, ! justCheck)) return false;
 | 
			
		||||
		if (material == Material.STONE_BUTTON && ! MPerm.getButton().has(me, ps, ! justCheck)) return false;
 | 
			
		||||
		if (material == Material.LEVER && ! MPerm.getLever().has(me, ps, ! justCheck)) return false;
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,11 +2,9 @@ package com.massivecraft.factions.update;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.event.EventPriority;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.FPerm;
 | 
			
		||||
import com.massivecraft.factions.Rel;
 | 
			
		||||
import com.massivecraft.factions.entity.MConf;
 | 
			
		||||
import com.massivecraft.factions.event.EventFactionsChunkChangeType;
 | 
			
		||||
@@ -29,7 +27,7 @@ public class OldConf extends Entity<OldConf>
 | 
			
		||||
		mconf.defaultPlayerPower = this.defaultPlayerPower;
 | 
			
		||||
		//mconf.defaultFactionOpen = this.defaultFactionOpen;
 | 
			
		||||
		//mconf.defaultFactionFlags = this.defaultFactionFlags;
 | 
			
		||||
		mconf.defaultFactionPerms = this.defaultFactionPerms;
 | 
			
		||||
		//mconf.defaultFactionPerms = this.defaultFactionPerms;
 | 
			
		||||
		mconf.powerMax = this.powerMax;
 | 
			
		||||
		mconf.powerMin = this.powerMin;
 | 
			
		||||
		mconf.powerPerHour = this.powerPerHour;
 | 
			
		||||
@@ -106,9 +104,9 @@ public class OldConf extends Entity<OldConf>
 | 
			
		||||
	public Rel defaultPlayerRole = null;
 | 
			
		||||
	public double defaultPlayerPower = 0.0;
 | 
			
		||||
	
 | 
			
		||||
	public boolean defaultFactionOpen = false;
 | 
			
		||||
	//public boolean defaultFactionOpen = false;
 | 
			
		||||
	//public Map<FFlag, Boolean> defaultFactionFlags = null;
 | 
			
		||||
	public Map<FPerm, Set<Rel>> defaultFactionPerms = null;
 | 
			
		||||
	//public Map<FPerm, Set<Rel>> defaultFactionPerms = null;
 | 
			
		||||
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// MESSAGES
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user