Fixing faction permOverides and making use of a predictate to send faction messages.
This commit is contained in:
parent
818c051ae1
commit
0776e5ae55
@ -1,8 +1,9 @@
|
||||
package com.massivecraft.factions;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Location;
|
||||
@ -18,6 +19,10 @@ import com.massivecraft.mcore.ps.PS;
|
||||
*/
|
||||
public enum FPerm
|
||||
{
|
||||
// -------------------------------------------- //
|
||||
// ENUM
|
||||
// -------------------------------------------- //
|
||||
|
||||
BUILD("build", "edit the terrain", Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY),
|
||||
PAINBUILD("painbuild", "edit but take damage"),
|
||||
DOOR("door", "use doors", Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.RECRUIT, Rel.ALLY),
|
||||
@ -33,35 +38,47 @@ public enum FPerm
|
||||
ACCESS("access", "grant territory access", Rel.LEADER, Rel.OFFICER),
|
||||
DISBAND("disband", "disband the faction", Rel.LEADER),
|
||||
PERMS("perms", "manage permissions", Rel.LEADER),
|
||||
|
||||
// END OF LIST
|
||||
;
|
||||
|
||||
// -------------------------------------------- //
|
||||
// FIELDS
|
||||
// -------------------------------------------- //
|
||||
|
||||
private final String nicename;
|
||||
public String getNicename() { return this.nicename; }
|
||||
|
||||
private final String desc;
|
||||
public String getDescription() { return this.desc; }
|
||||
|
||||
public final Set<Rel> defaultDefaultValue;
|
||||
|
||||
// -------------------------------------------- //
|
||||
// CONSTRUCT
|
||||
// -------------------------------------------- //
|
||||
|
||||
private FPerm(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));
|
||||
|
||||
Set<Rel> defaultDefaultValue = new LinkedHashSet<Rel>();
|
||||
defaultDefaultValue.addAll(Arrays.asList(rels));
|
||||
defaultDefaultValue = Collections.unmodifiableSet(defaultDefaultValue);
|
||||
this.defaultDefaultValue = defaultDefaultValue;
|
||||
}
|
||||
|
||||
public String getNicename()
|
||||
{
|
||||
return this.nicename;
|
||||
}
|
||||
|
||||
public String getDescription()
|
||||
{
|
||||
return this.desc;
|
||||
}
|
||||
// -------------------------------------------- //
|
||||
// FROOODLDLLD
|
||||
// -------------------------------------------- //
|
||||
|
||||
public Set<Rel> getDefault()
|
||||
{
|
||||
Set<Rel> ret = ConfServer.factionPermDefaults.get(this);
|
||||
if (ret == null) return this.defaultDefaultValue;
|
||||
return ret;
|
||||
if (ret == null) ret = this.defaultDefaultValue;
|
||||
ret = new LinkedHashSet<Rel>(ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static FPerm parse(String str)
|
||||
|
@ -13,6 +13,7 @@ import com.massivecraft.factions.iface.RelationParticipator;
|
||||
import com.massivecraft.factions.integration.Econ;
|
||||
import com.massivecraft.factions.integration.SpoutFeatures;
|
||||
import com.massivecraft.factions.util.*;
|
||||
import com.massivecraft.mcore.mixin.Mixin;
|
||||
import com.massivecraft.mcore.ps.PS;
|
||||
import com.massivecraft.mcore.store.Entity;
|
||||
import com.massivecraft.mcore.util.SenderUtil;
|
||||
@ -46,7 +47,7 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
|
||||
this.setInvitedPlayerIds(that.invitedPlayerIds);
|
||||
this.setRelationWishes(that.relationWish);
|
||||
this.setFlags(that.flagOverrides);
|
||||
this.permOverrides = that.permOverrides;
|
||||
this.setPerms(that.permOverrides);
|
||||
|
||||
return this;
|
||||
}
|
||||
@ -54,7 +55,6 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
|
||||
// -------------------------------------------- //
|
||||
// FIELDS: RAW
|
||||
// -------------------------------------------- //
|
||||
// TODO
|
||||
// In this section of the source code we place the field declarations only.
|
||||
// Each field has it's own section further down since even the getter and setter logic takes up quite some place.
|
||||
|
||||
@ -92,66 +92,11 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
|
||||
// The keys in this map are factionIds.
|
||||
private Map<String, Rel> relationWish = null;
|
||||
|
||||
// The flag overrides are the modifications to the default values.
|
||||
private Map<FFlag, Boolean> flagOverrides;
|
||||
// The flag overrides are modifications to the default values.
|
||||
private Map<FFlag, Boolean> flagOverrides = null;
|
||||
|
||||
// FIELDS: Permission <-> Groups management
|
||||
private Map<FPerm, Set<Rel>> permOverrides; // Contains the modifications to the default values
|
||||
public Set<Rel> getPermittedRelations(FPerm perm)
|
||||
{
|
||||
Set<Rel> ret = this.permOverrides.get(perm);
|
||||
if (ret == null) ret = perm.getDefault();
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
public void addPermittedRelation(FPerm perm, Rel rel)
|
||||
{
|
||||
Set<Rel> newPermittedRelations = EnumSet.noneOf(Rel.class);
|
||||
newPermittedRelations.addAll(this.getPermittedRelations(perm));
|
||||
newPermittedRelations.add(rel);
|
||||
this.setPermittedRelations(perm, newPermittedRelations);
|
||||
}
|
||||
|
||||
public void removePermittedRelation(FPerm perm, Rel rel)
|
||||
{
|
||||
Set<Rel> newPermittedRelations = EnumSet.noneOf(Rel.class);
|
||||
newPermittedRelations.addAll(this.getPermittedRelations(perm));
|
||||
newPermittedRelations.remove(rel);
|
||||
this.setPermittedRelations(perm, newPermittedRelations);
|
||||
}*/
|
||||
|
||||
public void setRelationPermitted(FPerm perm, Rel rel, boolean permitted)
|
||||
{
|
||||
Set<Rel> newPermittedRelations = EnumSet.noneOf(Rel.class);
|
||||
newPermittedRelations.addAll(this.getPermittedRelations(perm));
|
||||
if (permitted)
|
||||
{
|
||||
newPermittedRelations.add(rel);
|
||||
}
|
||||
else
|
||||
{
|
||||
newPermittedRelations.remove(rel);
|
||||
}
|
||||
this.setPermittedRelations(perm, newPermittedRelations);
|
||||
}
|
||||
|
||||
public void setPermittedRelations(FPerm perm, Set<Rel> rels)
|
||||
{
|
||||
if (perm.getDefault().equals(rels))
|
||||
{
|
||||
this.permOverrides.remove(perm);
|
||||
return;
|
||||
}
|
||||
this.permOverrides.put(perm, rels);
|
||||
}
|
||||
|
||||
public void setPermittedRelations(FPerm perm, Rel... rels)
|
||||
{
|
||||
Set<Rel> temp = new HashSet<Rel>();
|
||||
temp.addAll(Arrays.asList(rels));
|
||||
this.setPermittedRelations(perm, temp);
|
||||
}
|
||||
// The perm overrides are modifications to the default values.
|
||||
private Map<FPerm, Set<Rel>> permOverrides = null;
|
||||
|
||||
// -------------------------------------------- //
|
||||
// CONSTRUCT
|
||||
@ -159,8 +104,7 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
|
||||
|
||||
public Faction()
|
||||
{
|
||||
this.flagOverrides = new LinkedHashMap<FFlag, Boolean>();
|
||||
this.permOverrides = new LinkedHashMap<FPerm, Set<Rel>>();
|
||||
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
@ -275,8 +219,6 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
|
||||
// FIELD: home
|
||||
// -------------------------------------------- //
|
||||
|
||||
// TODO: Checkery is a bit weird?
|
||||
|
||||
public PS getHome()
|
||||
{
|
||||
this.verifyHomeIsValid();
|
||||
@ -592,7 +534,104 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// RELATION AND COLORS
|
||||
// FIELD: permOverrides
|
||||
// -------------------------------------------- //
|
||||
|
||||
// RAW
|
||||
|
||||
public Map<FPerm, Set<Rel>> getPerms()
|
||||
{
|
||||
Map<FPerm, Set<Rel>> ret = new LinkedHashMap<FPerm, Set<Rel>>();
|
||||
|
||||
for (FPerm fperm : FPerm.values())
|
||||
{
|
||||
ret.put(fperm, fperm.getDefault());
|
||||
}
|
||||
|
||||
if (this.permOverrides != null)
|
||||
{
|
||||
for (Entry<FPerm, Set<Rel>> entry : this.permOverrides.entrySet())
|
||||
{
|
||||
ret.put(entry.getKey(), new LinkedHashSet<Rel>(entry.getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
public void setPerms(Map<FPerm, Set<Rel>> perms)
|
||||
{
|
||||
Map<FPerm, Set<Rel>> target = new LinkedHashMap<FPerm, Set<Rel>>();
|
||||
|
||||
if (perms != null)
|
||||
{
|
||||
for (Entry<FPerm, Set<Rel>> entry : perms.entrySet())
|
||||
{
|
||||
target.put(entry.getKey(), new LinkedHashSet<Rel>(entry.getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
Iterator<Entry<FPerm, Set<Rel>>> iter = target.entrySet().iterator();
|
||||
while (iter.hasNext())
|
||||
{
|
||||
Entry<FPerm, Set<Rel>> entry = iter.next();
|
||||
if (entry.getKey().getDefault().equals(entry.getValue()))
|
||||
{
|
||||
iter.remove();
|
||||
}
|
||||
}
|
||||
|
||||
if (target == null || target.isEmpty())
|
||||
{
|
||||
this.permOverrides = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.permOverrides = target;
|
||||
}
|
||||
this.changed();
|
||||
}
|
||||
|
||||
// FINER
|
||||
|
||||
public Set<Rel> getPermittedRelations(FPerm perm)
|
||||
{
|
||||
return this.getPerms().get(perm);
|
||||
}
|
||||
|
||||
public void setPermittedRelations(FPerm perm, Set<Rel> rels)
|
||||
{
|
||||
Map<FPerm, Set<Rel>> perms = this.getPerms();
|
||||
perms.put(perm, rels);
|
||||
this.setPerms(perms);
|
||||
}
|
||||
|
||||
public void setPermittedRelations(FPerm 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)
|
||||
{
|
||||
Map<FPerm, Set<Rel>> perms = this.getPerms();
|
||||
Set<Rel> rels = perms.get(perm);
|
||||
|
||||
if (permitted)
|
||||
{
|
||||
rels.add(rel);
|
||||
}
|
||||
else
|
||||
{
|
||||
rels.remove(rel);
|
||||
}
|
||||
|
||||
this.setPerms(perms);
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// OVERRIDE: RelationParticipator
|
||||
// -------------------------------------------- //
|
||||
|
||||
@Override
|
||||
@ -693,7 +732,7 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// FPLAYERS
|
||||
// FOREIGN KEYS: FPLAYERS
|
||||
// -------------------------------------------- //
|
||||
|
||||
public List<FPlayer> getFPlayers()
|
||||
@ -821,64 +860,40 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
|
||||
// -------------------------------------------- //
|
||||
// MESSAGES
|
||||
// -------------------------------------------- //
|
||||
// These methods are simply proxied in from the SenderEntity class using a for loop.
|
||||
// These methods are simply proxied in from the Mixin.
|
||||
|
||||
// CONVENIENCE SEND MESSAGE
|
||||
|
||||
public boolean sendMessage(String message)
|
||||
{
|
||||
for (FPlayer fplayer : this.getFPlayers())
|
||||
{
|
||||
fplayer.sendMessage(message);
|
||||
}
|
||||
return true;
|
||||
return Mixin.message(new FactionEqualsPredictate(this), message);
|
||||
}
|
||||
|
||||
public boolean sendMessage(String... messages)
|
||||
{
|
||||
for (FPlayer fplayer : this.getFPlayers())
|
||||
{
|
||||
fplayer.sendMessage(messages);
|
||||
}
|
||||
return true;
|
||||
return Mixin.message(new FactionEqualsPredictate(this), messages);
|
||||
}
|
||||
|
||||
public boolean sendMessage(Collection<String> messages)
|
||||
{
|
||||
for (FPlayer fplayer : this.getFPlayers())
|
||||
{
|
||||
fplayer.sendMessage(messages);
|
||||
}
|
||||
return true;
|
||||
return Mixin.message(new FactionEqualsPredictate(this), messages);
|
||||
}
|
||||
|
||||
// CONVENIENCE MSG
|
||||
|
||||
public boolean msg(String msg)
|
||||
{
|
||||
for (FPlayer fplayer : this.getFPlayers())
|
||||
{
|
||||
fplayer.msg(msg);
|
||||
}
|
||||
return true;
|
||||
return Mixin.msg(new FactionEqualsPredictate(this), msg);
|
||||
}
|
||||
|
||||
public boolean msg(String msg, Object... args)
|
||||
{
|
||||
for (FPlayer fplayer : this.getFPlayers())
|
||||
{
|
||||
fplayer.msg(msg, args);
|
||||
}
|
||||
return true;
|
||||
return Mixin.msg(new FactionEqualsPredictate(this), msg, args);
|
||||
}
|
||||
|
||||
public boolean msg(Collection<String> msgs)
|
||||
{
|
||||
for (FPlayer fplayer : this.getFPlayers())
|
||||
{
|
||||
fplayer.msg(msgs);
|
||||
}
|
||||
return true;
|
||||
return Mixin.msg(new FactionEqualsPredictate(this), msgs);
|
||||
}
|
||||
|
||||
}
|
||||
|
40
src/com/massivecraft/factions/FactionEqualsPredictate.java
Normal file
40
src/com/massivecraft/factions/FactionEqualsPredictate.java
Normal file
@ -0,0 +1,40 @@
|
||||
package com.massivecraft.factions;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
import com.massivecraft.mcore.Predictate;
|
||||
|
||||
public class FactionEqualsPredictate implements Predictate<CommandSender>, Serializable
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
// -------------------------------------------- //
|
||||
// FIELDS
|
||||
// -------------------------------------------- //
|
||||
|
||||
private final String factionId;
|
||||
public String getFactionId() { return this.factionId; }
|
||||
|
||||
// -------------------------------------------- //
|
||||
// CONSTRUCT
|
||||
// -------------------------------------------- //
|
||||
|
||||
public FactionEqualsPredictate(Faction faction)
|
||||
{
|
||||
this.factionId = faction.getId();
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// OVERRIDE
|
||||
// -------------------------------------------- //
|
||||
|
||||
@Override
|
||||
public boolean apply(CommandSender sender)
|
||||
{
|
||||
FPlayer fplayer = FPlayer.get(sender);
|
||||
return this.getFactionId().equals(fplayer.getFactionId());
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user