Perm rework
This commit is contained in:
		@@ -158,7 +158,7 @@ public class Faction extends Entity<Faction> implements FactionsParticipator, MP
 | 
			
		||||
 | 
			
		||||
	// The perm overrides are modifications to the default values.
 | 
			
		||||
	// Null means default.
 | 
			
		||||
	private Map<String, Set<String>> perms = new MassiveMap<>();
 | 
			
		||||
	private Map<String, Set<String>> perms = this.createNewPermMap();
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// FIELD: id
 | 
			
		||||
@@ -751,7 +751,7 @@ public class Faction extends Entity<Faction> implements FactionsParticipator, MP
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// FIELD: permOverrides
 | 
			
		||||
	// FIELD: perms
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
 | 
			
		||||
	public Map<String, Set<String>> getPerms()
 | 
			
		||||
@@ -759,6 +759,32 @@ public class Faction extends Entity<Faction> implements FactionsParticipator, MP
 | 
			
		||||
		return this.perms;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public Map<String, Set<String>> createNewPermMap()
 | 
			
		||||
	{
 | 
			
		||||
		Map<String, Set<String>> ret = new MassiveMap<>();
 | 
			
		||||
 | 
			
		||||
		var leaderId = this.getRanks().getAll().stream().filter(r -> r.getName().equalsIgnoreCase("leader")).map(Rank::getId).findFirst();
 | 
			
		||||
		var officerId = this.getRanks().getAll().stream().filter(r -> r.getName().equalsIgnoreCase("officer")).map(Rank::getId).findFirst();
 | 
			
		||||
		var memberId = this.getRanks().getAll().stream().filter(r -> r.getName().equalsIgnoreCase("member")).map(Rank::getId).findFirst();
 | 
			
		||||
		var recruitId = this.getRanks().getAll().stream().filter(r -> r.getName().equalsIgnoreCase("recruit")).map(Rank::getId).findAny();
 | 
			
		||||
 | 
			
		||||
		for (var mperm : MPerm.getAll())
 | 
			
		||||
		{
 | 
			
		||||
			var id = mperm.getId();
 | 
			
		||||
			var value = new MassiveSet<>(mperm.getStandard());
 | 
			
		||||
 | 
			
		||||
			if (value.remove("LEADER") && leaderId.isPresent()) value.add(leaderId.get());
 | 
			
		||||
			if (value.remove("OFFICER") && officerId.isPresent()) value.add(officerId.get());
 | 
			
		||||
			if (value.remove("MEMBER") && memberId.isPresent()) value.add(memberId.get());
 | 
			
		||||
			if (value.remove("RECRUIT") && recruitId.isPresent()) value.add(recruitId.get());
 | 
			
		||||
 | 
			
		||||
			ret.put(mperm.getId(), value);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	// IS PERMITTED
 | 
			
		||||
 | 
			
		||||
	public boolean isPlayerPermitted(MPlayer mplayer, String permId)
 | 
			
		||||
@@ -789,19 +815,30 @@ public class Faction extends Entity<Faction> implements FactionsParticipator, MP
 | 
			
		||||
		return isFactionPermitted(faction, mperm.getId());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Deprecated
 | 
			
		||||
	public boolean isPermablePermitted(MPerm.MPermable permable, String permId)
 | 
			
		||||
	public Set<String> getPermitted(String permId)
 | 
			
		||||
	{
 | 
			
		||||
		return isPermitted(permable.getId(), permId);
 | 
			
		||||
		if (permId == null) throw new NullPointerException("permId");
 | 
			
		||||
		var permables = this.perms.get(permId);
 | 
			
		||||
 | 
			
		||||
		if (permables == null)
 | 
			
		||||
		{
 | 
			
		||||
			// No perms was found, but likely this is just a new MPerm.
 | 
			
		||||
			// So if this does not exist in the database, throw an error.
 | 
			
		||||
			if (!doesPermExist(permId)) throw new NullPointerException(permId + " caused null");
 | 
			
		||||
 | 
			
		||||
			permables = new MassiveSet<>();
 | 
			
		||||
			this.perms.put(permId, permables);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return permables;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Deprecated
 | 
			
		||||
	public boolean isPermablePermitted(MPerm.MPermable permable, MPerm mperm)
 | 
			
		||||
	public Set<String> getPermitted(MPerm mperm)
 | 
			
		||||
	{
 | 
			
		||||
		return isPermablePermitted(permable, mperm.getId());
 | 
			
		||||
		return getPermitted(mperm.getId());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private boolean isPermitted(String permableId, String permId)
 | 
			
		||||
	public boolean isPermitted(String permableId, String permId)
 | 
			
		||||
	{
 | 
			
		||||
		if (permableId == null) throw new NullPointerException("permableId");
 | 
			
		||||
		if (permId == null) throw new NullPointerException("permId");
 | 
			
		||||
@@ -817,7 +854,7 @@ public class Faction extends Entity<Faction> implements FactionsParticipator, MP
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return permables.contains(permableId);
 | 
			
		||||
		return getPermitted(permId).contains(permableId);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// SET PERMITTED
 | 
			
		||||
@@ -873,7 +910,6 @@ public class Faction extends Entity<Faction> implements FactionsParticipator, MP
 | 
			
		||||
		return MPermColl.get().getFixed(permId) != null;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// OVERRIDE: RelationParticipator
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
@@ -907,7 +943,20 @@ public class Faction extends Entity<Faction> implements FactionsParticipator, MP
 | 
			
		||||
	{
 | 
			
		||||
		return RelationUtil.getColorOfThatToMe(this, observer);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// OVERRIDE: permable
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public String getDisplayName(Object senderObject)
 | 
			
		||||
	{
 | 
			
		||||
		MPlayer mplayer = MPlayer.get(senderObject);
 | 
			
		||||
		if (mplayer == null) return this.getName();
 | 
			
		||||
 | 
			
		||||
		return this.describeTo(mplayer);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// POWER
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
 
 | 
			
		||||
@@ -280,14 +280,14 @@ public class MConf extends Entity<MConf>
 | 
			
		||||
	// PERMS
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
 | 
			
		||||
	public List<String> defaultPermsEnemy = MUtil.list(MPerm.ID_DEPOSIT);
 | 
			
		||||
	/*public List<String> defaultPermsEnemy = MUtil.list(MPerm.ID_DEPOSIT);
 | 
			
		||||
	public List<String> defaultPermsNeutral = MUtil.list(MPerm.ID_DEPOSIT);
 | 
			
		||||
	public List<String> defaultPermsTruce = MUtil.list(MPerm.ID_DEPOSIT);
 | 
			
		||||
	public List<String> defaultPermsAlly = MUtil.list(MPerm.ID_DOOR, MPerm.ID_BUTTON, MPerm.ID_LEVER, MPerm.ID_HOME, MPerm.ID_CLAIMNEAR);
 | 
			
		||||
	public List<String> defaultPermsRecruit = MUtil.list(MPerm.ID_DOOR, MPerm.ID_BUTTON, MPerm.ID_LEVER, MPerm.ID_LEVER, MPerm.ID_HOME, MPerm.ID_CLAIMNEAR);
 | 
			
		||||
	public List<String> defaultPermsMember = MUtil.list(MPerm.ID_BUILD, MPerm.ID_DOOR, MPerm.ID_BUTTON, MPerm.ID_LEVER, MPerm.ID_LEVER, MPerm.ID_CONTAINER, MPerm.ID_HOME, MPerm.ID_CLAIMNEAR);
 | 
			
		||||
	public List<String> defaultPermsOfficer = MUtil.list(MPerm.ID_BUILD, MPerm.ID_DOOR, MPerm.ID_BUTTON, MPerm.ID_LEVER, MPerm.ID_LEVER, MPerm.ID_CONTAINER, MPerm.ID_DESC, MPerm.ID_MOTD, MPerm.ID_INVITE, MPerm.ID_KICK, MPerm.ID_RANK, MPerm.ID_TITLE, MPerm.ID_HOME, MPerm.ID_SETHOME, MPerm.ID_TERRITORY, MPerm.ID_ACCESS, MPerm.ID_CLAIMNEAR, MPerm.ID_REL);
 | 
			
		||||
	public List<String> defaultPermsLeader = MUtil.list(MPerm.ID_BUILD, MPerm.ID_DOOR, MPerm.ID_BUTTON, MPerm.ID_LEVER, MPerm.ID_LEVER, MPerm.ID_CONTAINER, MPerm.ID_NAME, MPerm.ID_DESC, MPerm.ID_MOTD, MPerm.ID_INVITE, MPerm.ID_KICK, MPerm.ID_RANK, MPerm.ID_TITLE, MPerm.ID_HOME, MPerm.ID_SETHOME, MPerm.ID_WITHDRAW, MPerm.ID_TERRITORY, MPerm.ID_ACCESS, MPerm.ID_CLAIMNEAR, MPerm.ID_REL, MPerm.ID_DISBAND, MPerm.ID_FLAGS, MPerm.ID_FLAGS);
 | 
			
		||||
	public List<String> defaultPermsLeader = MUtil.list(MPerm.ID_BUILD, MPerm.ID_DOOR, MPerm.ID_BUTTON, MPerm.ID_LEVER, MPerm.ID_LEVER, MPerm.ID_CONTAINER, MPerm.ID_NAME, MPerm.ID_DESC, MPerm.ID_MOTD, MPerm.ID_INVITE, MPerm.ID_KICK, MPerm.ID_RANK, MPerm.ID_TITLE, MPerm.ID_HOME, MPerm.ID_SETHOME, MPerm.ID_WITHDRAW, MPerm.ID_TERRITORY, MPerm.ID_ACCESS, MPerm.ID_CLAIMNEAR, MPerm.ID_REL, MPerm.ID_DISBAND, MPerm.ID_FLAGS, MPerm.ID_FLAGS);*/
 | 
			
		||||
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// TERRITORY INFO
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,6 @@ import com.massivecraft.massivecore.ps.PS;
 | 
			
		||||
import com.massivecraft.massivecore.store.Entity;
 | 
			
		||||
import com.massivecraft.massivecore.util.MUtil;
 | 
			
		||||
import com.massivecraft.massivecore.util.Txt;
 | 
			
		||||
import org.bukkit.ChatColor;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
@@ -417,7 +416,7 @@ public class MPerm extends Entity<MPerm> implements Prioritized, Registerable, N
 | 
			
		||||
		return list;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public static String getStateHeaders(Faction faction)
 | 
			
		||||
	/*public static String getStateHeaders(Faction faction)
 | 
			
		||||
	{
 | 
			
		||||
		if (faction == null) throw new NullPointerException("faction");
 | 
			
		||||
 | 
			
		||||
@@ -469,7 +468,7 @@ public class MPerm extends Entity<MPerm> implements Prioritized, Registerable, N
 | 
			
		||||
		if (withDesc) ret += " <i>" + this.getDesc();
 | 
			
		||||
		
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
	}*/
 | 
			
		||||
 | 
			
		||||
	public interface MPermable extends Named, Identified
 | 
			
		||||
	{
 | 
			
		||||
@@ -488,22 +487,7 @@ public class MPerm extends Entity<MPerm> implements Prioritized, Registerable, N
 | 
			
		||||
			return this.getName().substring(0, 3).toUpperCase();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		default ChatColor getColor()
 | 
			
		||||
		{
 | 
			
		||||
			if (this.isRelation())
 | 
			
		||||
			{
 | 
			
		||||
				throw new RuntimeException();
 | 
			
		||||
			}
 | 
			
		||||
			else if (this.isRank())
 | 
			
		||||
			{
 | 
			
		||||
				return MConf.get().colorMember;
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				throw new RuntimeException();
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		String getDisplayName(Object senderObject);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,8 @@
 | 
			
		||||
package com.massivecraft.factions.entity;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.massivecore.store.EntityInternal;
 | 
			
		||||
import com.massivecraft.massivecore.store.EntityInternalMap;
 | 
			
		||||
import com.massivecraft.massivecore.util.Txt;
 | 
			
		||||
import org.bukkit.ChatColor;
 | 
			
		||||
 | 
			
		||||
public class Rank extends EntityInternal<Rank> implements MPerm.MPermable
 | 
			
		||||
@@ -17,6 +19,20 @@ public class Rank extends EntityInternal<Rank> implements MPerm.MPermable
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void preDetach(String id)
 | 
			
		||||
	{
 | 
			
		||||
		for (var f : FactionColl.get().getAll())
 | 
			
		||||
		{
 | 
			
		||||
			for (var it = f.getPerms().entrySet().iterator(); it.hasNext();)
 | 
			
		||||
			{
 | 
			
		||||
				var entry = it.next();
 | 
			
		||||
				var value = entry.getValue();
 | 
			
		||||
				value.remove(id);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// FIELDS
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
@@ -33,6 +49,13 @@ public class Rank extends EntityInternal<Rank> implements MPerm.MPermable
 | 
			
		||||
	public String getPrefix() { return this.prefix; }
 | 
			
		||||
	public void setPrefix(String prefix) { this.prefix = prefix; this.changed(); }
 | 
			
		||||
 | 
			
		||||
	public Faction getFaction()
 | 
			
		||||
	{
 | 
			
		||||
		var internalMap = (EntityInternalMap<Rank>) this.getContainer();
 | 
			
		||||
		var faction = (Faction) internalMap.getEntity();
 | 
			
		||||
		return faction;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// CONSTRUCT
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
@@ -54,6 +77,14 @@ public class Rank extends EntityInternal<Rank> implements MPerm.MPermable
 | 
			
		||||
	// VISUAL
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public String getDisplayName(Object senderObject)
 | 
			
		||||
	{
 | 
			
		||||
		String ret = this.getVisual();
 | 
			
		||||
		ret += Txt.parse(" of ") + this.getFaction().getDisplayName(senderObject);
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public String getVisual()
 | 
			
		||||
	{
 | 
			
		||||
		String ret = "";
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user