222 lines
6.9 KiB
Java
222 lines
6.9 KiB
Java
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),
|
|
|
|
// 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;
|
|
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;
|
|
}
|
|
|
|
}
|