Working on the faction perms as well now
This commit is contained in:
parent
21783ef9d4
commit
371261a07f
@ -33,6 +33,7 @@ permissions:
|
|||||||
factions.kit.fullplayer: true
|
factions.kit.fullplayer: true
|
||||||
factions.bypass: true
|
factions.bypass: true
|
||||||
factions.flag.any: true
|
factions.flag.any: true
|
||||||
|
factions.perm.any: true
|
||||||
factions.kick.any: true
|
factions.kick.any: true
|
||||||
factions.ownershipbypass: true
|
factions.ownershipbypass: true
|
||||||
factions.kit.fullplayer:
|
factions.kit.fullplayer:
|
||||||
@ -52,6 +53,7 @@ permissions:
|
|||||||
factions.description: true
|
factions.description: true
|
||||||
factions.disband: true
|
factions.disband: true
|
||||||
factions.flag: true
|
factions.flag: true
|
||||||
|
factions.perm: true
|
||||||
factions.help: true
|
factions.help: true
|
||||||
factions.home: true
|
factions.home: true
|
||||||
factions.invite: true
|
factions.invite: true
|
||||||
@ -102,6 +104,10 @@ permissions:
|
|||||||
description: change faction flags
|
description: change faction flags
|
||||||
factions.flag.any:
|
factions.flag.any:
|
||||||
description: change all flags for all factions
|
description: change all flags for all factions
|
||||||
|
factions.perm:
|
||||||
|
description: change faction permissions
|
||||||
|
factions.perm.any:
|
||||||
|
description: change all permissions for all factions
|
||||||
factions.help:
|
factions.help:
|
||||||
description: display a help page
|
description: display a help page
|
||||||
factions.home:
|
factions.home:
|
||||||
|
@ -6,6 +6,8 @@ import org.bukkit.*;
|
|||||||
import org.bukkit.entity.CreatureType;
|
import org.bukkit.entity.CreatureType;
|
||||||
|
|
||||||
import com.massivecraft.factions.struct.FactionFlag;
|
import com.massivecraft.factions.struct.FactionFlag;
|
||||||
|
import com.massivecraft.factions.struct.FactionPerm;
|
||||||
|
import com.massivecraft.factions.struct.Rel;
|
||||||
|
|
||||||
public class Conf
|
public class Conf
|
||||||
{
|
{
|
||||||
@ -27,6 +29,8 @@ public class Conf
|
|||||||
// REFACTOR ASJDKJASDKFJKASDF
|
// REFACTOR ASJDKJASDKFJKASDF
|
||||||
public static Map<FactionFlag, Boolean> factionFlagDefaults;
|
public static Map<FactionFlag, Boolean> factionFlagDefaults;
|
||||||
public static Map<FactionFlag, Boolean> factionFlagIsChangeable;
|
public static Map<FactionFlag, Boolean> factionFlagIsChangeable;
|
||||||
|
public static Map<FactionPerm, Set<Rel>> factionPermDefaults;
|
||||||
|
|
||||||
|
|
||||||
// REFACTOR ASJDKJASDKFJKASDF EEEEEENNNNDD
|
// REFACTOR ASJDKJASDKFJKASDF EEEEEENNNNDD
|
||||||
|
|
||||||
@ -285,6 +289,12 @@ public class Conf
|
|||||||
factionFlagIsChangeable.put(flag, flag.defaultDefaultChangeable);
|
factionFlagIsChangeable.put(flag, flag.defaultDefaultChangeable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
factionPermDefaults = new LinkedHashMap<FactionPerm, Set<Rel>>();
|
||||||
|
for (FactionPerm perm: FactionPerm.values())
|
||||||
|
{
|
||||||
|
factionPermDefaults.put(perm, perm.defaultDefaultValue);
|
||||||
|
}
|
||||||
|
|
||||||
territoryEnemyDenyCommands.add("home");
|
territoryEnemyDenyCommands.add("home");
|
||||||
territoryEnemyDenyCommands.add("sethome");
|
territoryEnemyDenyCommands.add("sethome");
|
||||||
territoryEnemyDenyCommands.add("spawn");
|
territoryEnemyDenyCommands.add("spawn");
|
||||||
|
@ -12,6 +12,7 @@ import com.massivecraft.factions.iface.EconomyParticipator;
|
|||||||
import com.massivecraft.factions.iface.RelationParticipator;
|
import com.massivecraft.factions.iface.RelationParticipator;
|
||||||
import com.massivecraft.factions.integration.Econ;
|
import com.massivecraft.factions.integration.Econ;
|
||||||
import com.massivecraft.factions.struct.FactionFlag;
|
import com.massivecraft.factions.struct.FactionFlag;
|
||||||
|
import com.massivecraft.factions.struct.FactionPerm;
|
||||||
import com.massivecraft.factions.struct.Permission;
|
import com.massivecraft.factions.struct.Permission;
|
||||||
import com.massivecraft.factions.struct.Rel;
|
import com.massivecraft.factions.struct.Rel;
|
||||||
import com.massivecraft.factions.util.*;
|
import com.massivecraft.factions.util.*;
|
||||||
@ -39,25 +40,6 @@ public class Faction extends Entity implements EconomyParticipator
|
|||||||
public boolean getOpen() { return open; }
|
public boolean getOpen() { return open; }
|
||||||
public void setOpen(boolean isOpen) { open = isOpen; }
|
public void setOpen(boolean isOpen) { open = isOpen; }
|
||||||
|
|
||||||
// FIELD: peaceful
|
|
||||||
// "peaceful" status can only be set by server admins/moderators/ops, and prevents PvP and land capture to/from the faction
|
|
||||||
//private boolean peaceful;
|
|
||||||
//public boolean isPeaceful() { return this.peaceful; }
|
|
||||||
//public void setPeaceful(boolean isPeaceful) { this.peaceful = isPeaceful; }
|
|
||||||
|
|
||||||
// FIELD: peacefulExplosionsEnabled
|
|
||||||
//private boolean peacefulExplosionsEnabled;
|
|
||||||
//public void setPeacefulExplosionsEnabled(boolean val) { peacefulExplosionsEnabled = val; }
|
|
||||||
//public boolean getPeacefulExplosionsEnabled(){ return this.peacefulExplosionsEnabled; }
|
|
||||||
|
|
||||||
//public boolean noExplosionsInTerritory() { return this.peaceful && ! peacefulExplosionsEnabled; }
|
|
||||||
|
|
||||||
// FIELD: permanent
|
|
||||||
// "permanent" status can only be set by server admins/moderators/ops, and allows the faction to remain even with 0 members
|
|
||||||
//private boolean permanent;
|
|
||||||
//public boolean isPermanent() { return permanent; }
|
|
||||||
//public void setPermanent(boolean isPermanent) { permanent = isPermanent; }
|
|
||||||
|
|
||||||
// FIELD: tag
|
// FIELD: tag
|
||||||
private String tag;
|
private String tag;
|
||||||
public String getTag() { return this.tag; }
|
public String getTag() { return this.tag; }
|
||||||
@ -140,7 +122,7 @@ public class Faction extends Entity implements EconomyParticipator
|
|||||||
}
|
}
|
||||||
public void setFlag(FactionFlag flag, boolean value)
|
public void setFlag(FactionFlag flag, boolean value)
|
||||||
{
|
{
|
||||||
if (Conf.factionFlagDefaults.get(flag) == value)
|
if (Conf.factionFlagDefaults.get(flag).equals(value))
|
||||||
{
|
{
|
||||||
this.flagOverrides.remove(flag);
|
this.flagOverrides.remove(flag);
|
||||||
return;
|
return;
|
||||||
@ -149,6 +131,22 @@ public class Faction extends Entity implements EconomyParticipator
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FIELDS: Permission <-> Groups management
|
// FIELDS: Permission <-> Groups management
|
||||||
|
private Map<FactionPerm, Set<Rel>> permOverrides; // Contains the modifications to the default values
|
||||||
|
public Set<Rel> getPerm(FactionPerm perm)
|
||||||
|
{
|
||||||
|
Set<Rel> ret = this.permOverrides.get(perm);
|
||||||
|
if (ret == null) ret = perm.getDefault();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
public void setPerm(FactionPerm perm, Set<Rel> value)
|
||||||
|
{
|
||||||
|
if (Conf.factionPermDefaults.get(perm).equals(value))
|
||||||
|
{
|
||||||
|
this.permOverrides.remove(perm);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.permOverrides.put(perm, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -169,15 +167,6 @@ public class Faction extends Entity implements EconomyParticipator
|
|||||||
this.flagOverrides = new LinkedHashMap<FactionFlag, Boolean>();
|
this.flagOverrides = new LinkedHashMap<FactionFlag, Boolean>();
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// Extra Getters And Setters
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
//public boolean noPvPInTerritory() { return isSafeZone() || (peaceful && Conf.peacefulTerritoryDisablePVP); }
|
|
||||||
|
|
||||||
//public boolean noMonstersInTerritory() { return isSafeZone() || (peaceful && Conf.peacefulTerritoryDisableMonsters); }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
// Understand the types
|
// Understand the types
|
||||||
@ -196,22 +185,6 @@ public class Faction extends Entity implements EconomyParticipator
|
|||||||
return this.getId().equals("0");
|
return this.getId().equals("0");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*public boolean isSafeZone()
|
|
||||||
{
|
|
||||||
return this.getId().equals("-1");
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isWarZone()
|
|
||||||
{
|
|
||||||
return this.getId().equals("-2");
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isPlayerFreeType()
|
|
||||||
{
|
|
||||||
return this.isSafeZone() || this.isWarZone();
|
|
||||||
}*/
|
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
// Relation and relation colors
|
// Relation and relation colors
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
|
88
src/com/massivecraft/factions/cmd/CmdPerm.java
Normal file
88
src/com/massivecraft/factions/cmd/CmdPerm.java
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
package com.massivecraft.factions.cmd;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.Faction;
|
||||||
|
import com.massivecraft.factions.struct.FactionPerm;
|
||||||
|
import com.massivecraft.factions.struct.Permission;
|
||||||
|
import com.massivecraft.factions.struct.Rel;
|
||||||
|
import com.massivecraft.factions.zcore.util.TextUtil;
|
||||||
|
|
||||||
|
public class CmdPerm extends FCommand
|
||||||
|
{
|
||||||
|
|
||||||
|
public CmdPerm()
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
this.aliases.add("perm");
|
||||||
|
|
||||||
|
//this.requiredArgs.add("");
|
||||||
|
this.optionalArgs.put("faction", "your");
|
||||||
|
this.optionalArgs.put("perm", "all");
|
||||||
|
this.optionalArgs.put("relationdelta", "read");
|
||||||
|
|
||||||
|
this.permission = Permission.PERM.node;
|
||||||
|
this.disableOnLock = true;
|
||||||
|
|
||||||
|
this.errorOnToManyArgs = false;
|
||||||
|
|
||||||
|
senderMustBePlayer = false;
|
||||||
|
senderMustBeMember = false;
|
||||||
|
senderMustBeOfficer = false;
|
||||||
|
senderMustBeLeader = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void perform()
|
||||||
|
{
|
||||||
|
Faction faction = myFaction;
|
||||||
|
if (this.argIsSet(0))
|
||||||
|
{
|
||||||
|
faction = this.argAsFaction(0);
|
||||||
|
}
|
||||||
|
if (faction == null) return;
|
||||||
|
|
||||||
|
msg(p.txt.titleize("Perm(s) for " + faction.describeTo(fme)));
|
||||||
|
|
||||||
|
if ( ! this.argIsSet(1))
|
||||||
|
{
|
||||||
|
for (FactionPerm perm : FactionPerm.values())
|
||||||
|
{
|
||||||
|
msg(perm.getStateInfo(faction.getPerm(perm), true));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
FactionPerm perm = this.argAsFactionPerm(1);
|
||||||
|
if (perm == null) return;
|
||||||
|
if ( ! this.argIsSet(2))
|
||||||
|
{
|
||||||
|
msg(perm.getStateInfo(faction.getPerm(perm), true));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Awesomesause parser for deltas...
|
||||||
|
Set<Rel> targetValue = FactionPerm.parseRelDeltas(TextUtil.implode(args.subList(2, args.size()-1), " "), faction.getPerm(perm));
|
||||||
|
|
||||||
|
// Do the sender have the right to change perms for this faction?
|
||||||
|
if (Permission.PERM_ANY.has(sender))
|
||||||
|
{
|
||||||
|
// This sender may modify any perm for anyone
|
||||||
|
}
|
||||||
|
else if (faction != myFaction)
|
||||||
|
{
|
||||||
|
msg("<b>You are not a member in that faction.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (fme.getRole().isLessThan(Rel.OFFICER))
|
||||||
|
{
|
||||||
|
msg("<b>You must be faction leader or officer to change your faction permissions.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do the change
|
||||||
|
faction.setPerm(perm, targetValue);
|
||||||
|
msg(perm.getStateInfo(faction.getPerm(perm), true));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -31,6 +31,7 @@ public class FCmdRoot extends FCommand
|
|||||||
public CmdOpen cmdOpen = new CmdOpen();
|
public CmdOpen cmdOpen = new CmdOpen();
|
||||||
public CmdOwner cmdOwner = new CmdOwner();
|
public CmdOwner cmdOwner = new CmdOwner();
|
||||||
public CmdOwnerList cmdOwnerList = new CmdOwnerList();
|
public CmdOwnerList cmdOwnerList = new CmdOwnerList();
|
||||||
|
public CmdPerm cmdPerm = new CmdPerm();
|
||||||
public CmdPower cmdPower = new CmdPower();
|
public CmdPower cmdPower = new CmdPower();
|
||||||
public CmdRelationAlly cmdRelationAlly = new CmdRelationAlly();
|
public CmdRelationAlly cmdRelationAlly = new CmdRelationAlly();
|
||||||
public CmdRelationEnemy cmdRelationEnemy = new CmdRelationEnemy();
|
public CmdRelationEnemy cmdRelationEnemy = new CmdRelationEnemy();
|
||||||
@ -93,6 +94,7 @@ public class FCmdRoot extends FCommand
|
|||||||
this.addSubCommand(this.cmdOpen);
|
this.addSubCommand(this.cmdOpen);
|
||||||
this.addSubCommand(this.cmdOwner);
|
this.addSubCommand(this.cmdOwner);
|
||||||
this.addSubCommand(this.cmdOwnerList);
|
this.addSubCommand(this.cmdOwnerList);
|
||||||
|
this.addSubCommand(this.cmdPerm);
|
||||||
this.addSubCommand(this.cmdPower);
|
this.addSubCommand(this.cmdPower);
|
||||||
this.addSubCommand(this.cmdRelationAlly);
|
this.addSubCommand(this.cmdRelationAlly);
|
||||||
this.addSubCommand(this.cmdRelationEnemy);
|
this.addSubCommand(this.cmdRelationEnemy);
|
||||||
|
@ -13,6 +13,7 @@ import com.massivecraft.factions.Faction;
|
|||||||
import com.massivecraft.factions.Factions;
|
import com.massivecraft.factions.Factions;
|
||||||
import com.massivecraft.factions.P;
|
import com.massivecraft.factions.P;
|
||||||
import com.massivecraft.factions.struct.FactionFlag;
|
import com.massivecraft.factions.struct.FactionFlag;
|
||||||
|
import com.massivecraft.factions.struct.FactionPerm;
|
||||||
import com.massivecraft.factions.struct.Rel;
|
import com.massivecraft.factions.struct.Rel;
|
||||||
import com.massivecraft.factions.zcore.MCommand;
|
import com.massivecraft.factions.zcore.MCommand;
|
||||||
|
|
||||||
@ -308,6 +309,40 @@ public abstract class FCommand extends MCommand<P>
|
|||||||
return this.argAsFactionFlag(idx, null);
|
return this.argAsFactionFlag(idx, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FACTION PERM ======================
|
||||||
|
public FactionPerm strAsFactionPerm(String name, FactionPerm def, boolean msg)
|
||||||
|
{
|
||||||
|
FactionPerm ret = def;
|
||||||
|
|
||||||
|
if (name != null)
|
||||||
|
{
|
||||||
|
FactionPerm perm = FactionPerm.parse(name);
|
||||||
|
if (perm != null)
|
||||||
|
{
|
||||||
|
ret = perm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msg && ret == null)
|
||||||
|
{
|
||||||
|
this.msg("<b>The faction-perm \"<p>%s<b>\" could not be found.", name);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
public FactionPerm argAsFactionPerm(int idx, FactionPerm def, boolean msg)
|
||||||
|
{
|
||||||
|
return this.strAsFactionPerm(this.argAsString(idx), def, msg);
|
||||||
|
}
|
||||||
|
public FactionPerm argAsFactionPerm(int idx, FactionPerm def)
|
||||||
|
{
|
||||||
|
return this.argAsFactionPerm(idx, def, true);
|
||||||
|
}
|
||||||
|
public FactionPerm argAsFactionPerm(int idx)
|
||||||
|
{
|
||||||
|
return this.argAsFactionPerm(idx, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// Commonly used logic
|
// Commonly used logic
|
||||||
|
@ -1,16 +1,119 @@
|
|||||||
package com.massivecraft.factions.struct;
|
package com.massivecraft.factions.struct;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.Conf;
|
||||||
|
import com.massivecraft.factions.zcore.util.TextUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Permissions that you (a player) may or may not have in the territory of a certain faction.
|
* 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.
|
* Each faction have many Rel's assigned to each one of these Perms.
|
||||||
*/
|
*/
|
||||||
public enum FactionPerm
|
public enum FactionPerm
|
||||||
{
|
{
|
||||||
BUILD, // This player can build in the faction
|
BUILD("build", "edit the terrain", Rel.MEMBER),
|
||||||
PAINBUILD, // This player can build in the faction BUT will take damage each time. This is overridden by BUILD if player has both
|
PAINBUILD("painbuild", "edit but take damage", Rel.ALLY),
|
||||||
DOOR,
|
DOOR("door", "use doors etc.", Rel.MEMBER, Rel.ALLY),
|
||||||
WORKBENCH,
|
CONTAINER("container", "use chests etc.", Rel.MEMBER),
|
||||||
CONTAINER,
|
BUTTON("button", "use stone buttons", Rel.MEMBER, Rel.ALLY),
|
||||||
BUTTON,
|
LEVER("lever", "use levers", Rel.MEMBER, Rel.ALLY),
|
||||||
LEVER,
|
;
|
||||||
|
|
||||||
|
private final String nicename;
|
||||||
|
private final String desc;
|
||||||
|
public final Set<Rel> defaultDefaultValue;
|
||||||
|
|
||||||
|
private FactionPerm(final String nicename, final String desc, final Rel... rels)
|
||||||
|
{
|
||||||
|
this.nicename = nicename;
|
||||||
|
this.desc = desc;
|
||||||
|
this.defaultDefaultValue = new HashSet<Rel>();
|
||||||
|
this.defaultDefaultValue.addAll(Arrays.asList(rels));
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNicename()
|
||||||
|
{
|
||||||
|
return this.nicename;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription()
|
||||||
|
{
|
||||||
|
return this.desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<Rel> getDefault()
|
||||||
|
{
|
||||||
|
Set<Rel> ret = Conf.factionPermDefaults.get(this);
|
||||||
|
if (ret == null) return this.defaultDefaultValue;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static FactionPerm parse(String str)
|
||||||
|
{
|
||||||
|
str = str.toLowerCase();
|
||||||
|
if (str.startsWith("bui")) return BUILD;
|
||||||
|
if (str.startsWith("p")) return PAINBUILD;
|
||||||
|
if (str.startsWith("d")) return DOOR;
|
||||||
|
if (str.startsWith("c")) return CONTAINER;
|
||||||
|
if (str.startsWith("but")) return BUTTON;
|
||||||
|
if (str.startsWith("l")) return LEVER;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStateInfo(Set<Rel> value, boolean withDesc)
|
||||||
|
{
|
||||||
|
String ret = "<h>"+this.getNicename()+ " ";
|
||||||
|
|
||||||
|
List<String> rels = new ArrayList<String>();
|
||||||
|
for (Rel rel : value)
|
||||||
|
{
|
||||||
|
rels.add("<i>"+rel.nicename);
|
||||||
|
}
|
||||||
|
ret += TextUtil.implode(rels, "<n> ,");
|
||||||
|
|
||||||
|
if (withDesc)
|
||||||
|
{
|
||||||
|
ret += " " + this.getDescription();
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Set<Rel> parseRelDeltas(String str, Set<Rel> current)
|
||||||
|
{
|
||||||
|
Set<Rel> ret = new HashSet<Rel>();
|
||||||
|
ret.addAll(current);
|
||||||
|
|
||||||
|
List<String> nodes = new ArrayList<String>(Arrays.asList(str.split("\\s+")));
|
||||||
|
|
||||||
|
for (String node : nodes)
|
||||||
|
{
|
||||||
|
boolean add = true;
|
||||||
|
if (node.startsWith("-"))
|
||||||
|
{
|
||||||
|
add = false;
|
||||||
|
node = node.substring(1);
|
||||||
|
}
|
||||||
|
else if (node.startsWith("+"))
|
||||||
|
{
|
||||||
|
node = node.substring(1);
|
||||||
|
}
|
||||||
|
Rel rel = Rel.parse(node);
|
||||||
|
|
||||||
|
if (rel == null) continue;
|
||||||
|
|
||||||
|
if (add)
|
||||||
|
{
|
||||||
|
ret.add(rel);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret.remove(rel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,8 @@ public enum Permission
|
|||||||
DISBAND_ANY("disband.any"),
|
DISBAND_ANY("disband.any"),
|
||||||
FLAG("flag"),
|
FLAG("flag"),
|
||||||
FLAG_ANY("flag.any"),
|
FLAG_ANY("flag.any"),
|
||||||
|
PERM("perm"),
|
||||||
|
PERM_ANY("perm.any"),
|
||||||
HELP("help"),
|
HELP("help"),
|
||||||
HOME("home"),
|
HOME("home"),
|
||||||
INVITE("invite"),
|
INVITE("invite"),
|
||||||
|
Loading…
Reference in New Issue
Block a user