Refactor boards
This commit is contained in:
		@@ -96,7 +96,7 @@ public class CmdFactionsWarpGo extends FactionsCommandWarp
 | 
				
			|||||||
			{
 | 
								{
 | 
				
			||||||
				if (MUtil.isntPlayer(p)) continue;
 | 
									if (MUtil.isntPlayer(p)) continue;
 | 
				
			||||||
				
 | 
									
 | 
				
			||||||
				if (p == null || !p.isOnline() || p.isDead() || p == me || p.getWorld() != w) continue;
 | 
									if (!p.isOnline() || p.isDead() || p == me || p.getWorld() != w) continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				MPlayer fp = MPlayer.get(p);
 | 
									MPlayer fp = MPlayer.get(p);
 | 
				
			||||||
				if (msender.getRelationTo(fp) != Rel.ENEMY) continue;
 | 
									if (msender.getRelationTo(fp) != Rel.ENEMY) continue;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,18 +3,17 @@ package com.massivecraft.factions.entity;
 | 
				
			|||||||
import com.google.gson.reflect.TypeToken;
 | 
					import com.google.gson.reflect.TypeToken;
 | 
				
			||||||
import com.massivecraft.factions.Factions;
 | 
					import com.massivecraft.factions.Factions;
 | 
				
			||||||
import com.massivecraft.factions.TerritoryAccess;
 | 
					import com.massivecraft.factions.TerritoryAccess;
 | 
				
			||||||
import com.massivecraft.massivecore.collections.MassiveMap;
 | 
					 | 
				
			||||||
import com.massivecraft.massivecore.collections.MassiveSet;
 | 
					 | 
				
			||||||
import com.massivecraft.massivecore.ps.PS;
 | 
					import com.massivecraft.massivecore.ps.PS;
 | 
				
			||||||
import com.massivecraft.massivecore.store.Entity;
 | 
					import com.massivecraft.massivecore.store.Entity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.lang.reflect.Type;
 | 
					import java.lang.reflect.Type;
 | 
				
			||||||
import java.util.Collections;
 | 
					import java.util.Collections;
 | 
				
			||||||
import java.util.HashSet;
 | 
					 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
import java.util.Map.Entry;
 | 
					import java.util.Map.Entry;
 | 
				
			||||||
import java.util.Set;
 | 
					import java.util.Set;
 | 
				
			||||||
import java.util.concurrent.ConcurrentSkipListMap;
 | 
					import java.util.concurrent.ConcurrentSkipListMap;
 | 
				
			||||||
 | 
					import java.util.function.Function;
 | 
				
			||||||
 | 
					import java.util.stream.Collectors;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class Board extends Entity<Board> implements BoardInterface
 | 
					public class Board extends Entity<Board> implements BoardInterface
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -82,7 +81,8 @@ public class Board extends Entity<Board> implements BoardInterface
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public TerritoryAccess getTerritoryAccessAt(PS ps)
 | 
						public TerritoryAccess getTerritoryAccessAt(PS ps)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (ps == null) return null;
 | 
							if (ps == null) throw new NullPointerException("ps");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ps = ps.getChunkCoords(true);
 | 
							ps = ps.getChunkCoords(true);
 | 
				
			||||||
		TerritoryAccess ret = this.map.get(ps);
 | 
							TerritoryAccess ret = this.map.get(ps);
 | 
				
			||||||
		if (ret == null || ret.getHostFaction() == null) ret = TerritoryAccess.valueOf(Factions.ID_NONE);
 | 
							if (ret == null || ret.getHostFaction() == null) ret = TerritoryAccess.valueOf(Factions.ID_NONE);
 | 
				
			||||||
@@ -92,9 +92,7 @@ public class Board extends Entity<Board> implements BoardInterface
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Faction getFactionAt(PS ps)
 | 
						public Faction getFactionAt(PS ps)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (ps == null) return null;
 | 
							return this.getTerritoryAccessAt(ps).getHostFaction();
 | 
				
			||||||
		TerritoryAccess ta = this.getTerritoryAccessAt(ps);
 | 
					 | 
				
			||||||
		return ta.getHostFaction();
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// SET
 | 
						// SET
 | 
				
			||||||
@@ -138,16 +136,7 @@ public class Board extends Entity<Board> implements BoardInterface
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public void removeAll(Faction faction)
 | 
						public void removeAll(Faction faction)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		String factionId = faction.getId();
 | 
							this.getChunks(faction).forEach(this::removeAt);
 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		for (Entry<PS, TerritoryAccess> entry : this.map.entrySet())
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			TerritoryAccess territoryAccess = entry.getValue();
 | 
					 | 
				
			||||||
			if ( ! territoryAccess.getHostFactionId().equals(factionId)) continue;
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
			PS ps = entry.getKey();
 | 
					 | 
				
			||||||
			this.removeAt(ps);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// CHUNKS
 | 
						// CHUNKS
 | 
				
			||||||
@@ -161,46 +150,36 @@ public class Board extends Entity<Board> implements BoardInterface
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Set<PS> getChunks(String factionId)
 | 
						public Set<PS> getChunks(String factionId)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		Set<PS> ret = new HashSet<>();
 | 
							return this.map.entrySet().stream()
 | 
				
			||||||
		for (Entry<PS, TerritoryAccess> entry : this.map.entrySet())
 | 
								.filter(e -> e.getValue().getHostFactionId().equals(factionId))
 | 
				
			||||||
		{
 | 
								.map(Entry::getKey)
 | 
				
			||||||
			TerritoryAccess ta = entry.getValue();
 | 
								.map(ps -> ps.withWorld(this.getId()))
 | 
				
			||||||
			if (!ta.getHostFactionId().equals(factionId)) continue;
 | 
								.collect(Collectors.toSet());
 | 
				
			||||||
			
 | 
					 | 
				
			||||||
			PS ps = entry.getKey();
 | 
					 | 
				
			||||||
			ps = ps.withWorld(this.getId());
 | 
					 | 
				
			||||||
			ret.add(ps);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return ret;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
 | 
						@Deprecated
 | 
				
			||||||
	public Map<Faction, Set<PS>> getFactionToChunks()
 | 
						public Map<Faction, Set<PS>> getFactionToChunks()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		Map<Faction, Set<PS>> ret = new MassiveMap<>();
 | 
							return this.getFactionToChunks(true);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
		for (Entry<PS, TerritoryAccess> entry : this.map.entrySet())
 | 
						@Override
 | 
				
			||||||
		{
 | 
						public Map<Faction, Set<PS>> getFactionToChunks(boolean withWorld)
 | 
				
			||||||
			// Get Faction
 | 
						{
 | 
				
			||||||
			TerritoryAccess ta = entry.getValue();
 | 
							Function<Entry<PS, TerritoryAccess>, PS> mapper = Entry::getKey;
 | 
				
			||||||
			Faction faction = ta.getHostFaction();
 | 
							if (withWorld) mapper = mapper.andThen(ps -> ps.withWorld(this.getId()));
 | 
				
			||||||
			if (faction == null) continue;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// Get Chunks
 | 
							return map.entrySet().stream().collect(Collectors.groupingBy(
 | 
				
			||||||
			Set<PS> chunks = ret.get(faction);
 | 
								entry -> entry.getValue().getHostFaction(), // This specifies how to get the key
 | 
				
			||||||
			if (chunks == null)
 | 
								Collectors.mapping(mapper, Collectors.toSet()) // This maps the entries and puts them in the collection
 | 
				
			||||||
			{
 | 
							));
 | 
				
			||||||
				chunks = new MassiveSet<>();
 | 
						}
 | 
				
			||||||
				ret.put(faction, chunks);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// Add Chunk
 | 
						@Override
 | 
				
			||||||
			PS chunk = entry.getKey();
 | 
						public Map<String, Map<Faction, Set<PS>>> getWorldToFactionToChunks(boolean withWorld)
 | 
				
			||||||
			chunk = chunk.withWorld(this.getId());
 | 
						{
 | 
				
			||||||
			chunks.add(chunk);
 | 
							return Collections.singletonMap(this.getId(), this.getFactionToChunks(withWorld));
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		return ret;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// COUNT
 | 
						// COUNT
 | 
				
			||||||
@@ -208,45 +187,30 @@ public class Board extends Entity<Board> implements BoardInterface
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public int getCount(Faction faction)
 | 
						public int getCount(Faction faction)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
							if (faction == null) throw new NullPointerException("faction");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return this.getCount(faction.getId());
 | 
							return this.getCount(faction.getId());
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public int getCount(String factionId)
 | 
						public int getCount(String factionId)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		int ret = 0;
 | 
							if (factionId == null) throw new NullPointerException("factionId");
 | 
				
			||||||
		for (TerritoryAccess ta : this.map.values())
 | 
					
 | 
				
			||||||
		{
 | 
							return (int) this.map.values().stream()
 | 
				
			||||||
			if (!ta.getHostFactionId().equals(factionId)) continue;
 | 
									   .map(TerritoryAccess::getHostFactionId)
 | 
				
			||||||
			ret += 1;
 | 
									   .filter(factionId::equals)
 | 
				
			||||||
		}
 | 
									   .count();
 | 
				
			||||||
		return ret;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Map<Faction, Integer> getFactionToCount()
 | 
						public Map<Faction, Long> getFactionToCount()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		Map<Faction, Integer> ret = new MassiveMap<>();
 | 
							return this.map.entrySet().stream()
 | 
				
			||||||
		
 | 
								.collect(Collectors.groupingBy(
 | 
				
			||||||
		for (Entry<PS, TerritoryAccess> entry : this.map.entrySet())
 | 
									e -> e.getValue().getHostFaction(),
 | 
				
			||||||
		{
 | 
									Collectors.counting()
 | 
				
			||||||
			// Get Faction
 | 
								));
 | 
				
			||||||
			TerritoryAccess ta = entry.getValue();
 | 
					 | 
				
			||||||
			Faction faction = ta.getHostFaction();
 | 
					 | 
				
			||||||
			if (faction == null) continue;
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
			// Get Count
 | 
					 | 
				
			||||||
			Integer count = ret.get(faction);
 | 
					 | 
				
			||||||
			if (count == null)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				count = 0;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
			// Add Chunk
 | 
					 | 
				
			||||||
			ret.put(faction, count + 1);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		return ret;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// CLAIMED
 | 
						// CLAIMED
 | 
				
			||||||
@@ -260,12 +224,9 @@ public class Board extends Entity<Board> implements BoardInterface
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public boolean hasClaimed(String factionId)
 | 
						public boolean hasClaimed(String factionId)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		for (TerritoryAccess ta : this.map.values())
 | 
							return this.map.values().stream()
 | 
				
			||||||
		{
 | 
								.map(TerritoryAccess::getHostFactionId)
 | 
				
			||||||
			if ( ! ta.getHostFactionId().equals(factionId)) continue;
 | 
								.anyMatch(factionId::equals);
 | 
				
			||||||
			return true;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return false;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// NEARBY DETECTION
 | 
						// NEARBY DETECTION
 | 
				
			||||||
@@ -298,11 +259,7 @@ public class Board extends Entity<Board> implements BoardInterface
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public boolean isAnyBorderPs(Set<PS> pss)
 | 
						public boolean isAnyBorderPs(Set<PS> pss)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		for (PS ps : pss)
 | 
							return pss.stream().anyMatch(this::isBorderPs);
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			if (this.isBorderPs(ps)) return true;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return false;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Is this coord connected to any coord claimed by the specified faction?
 | 
						// Is this coord connected to any coord claimed by the specified faction?
 | 
				
			||||||
@@ -331,11 +288,7 @@ public class Board extends Entity<Board> implements BoardInterface
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public boolean isAnyConnectedPs(Set<PS> pss, Faction faction)
 | 
						public boolean isAnyConnectedPs(Set<PS> pss, Faction faction)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		for (PS ps : pss)
 | 
							return pss.stream().anyMatch(ps -> this.isConnectedPs(ps, faction));
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			if (this.isConnectedPs(ps, faction)) return true;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return false;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,12 +8,10 @@ import com.massivecraft.massivecore.store.Coll;
 | 
				
			|||||||
import com.massivecraft.massivecore.util.MUtil;
 | 
					import com.massivecraft.massivecore.util.MUtil;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.Collection;
 | 
					import java.util.Collection;
 | 
				
			||||||
import java.util.HashSet;
 | 
					 | 
				
			||||||
import java.util.LinkedHashMap;
 | 
					 | 
				
			||||||
import java.util.LinkedHashSet;
 | 
					 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
import java.util.Map.Entry;
 | 
					import java.util.Map.Entry;
 | 
				
			||||||
import java.util.Set;
 | 
					import java.util.Set;
 | 
				
			||||||
 | 
					import java.util.stream.Collectors;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class BoardColl extends Coll<Board> implements BoardInterface
 | 
					public class BoardColl extends Coll<Board> implements BoardInterface
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -60,7 +58,7 @@ public class BoardColl extends Coll<Board> implements BoardInterface
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public TerritoryAccess getTerritoryAccessAt(PS ps)
 | 
						public TerritoryAccess getTerritoryAccessAt(PS ps)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (ps == null) return null;
 | 
							if (ps == null) throw new NullPointerException("ps");
 | 
				
			||||||
		Board board = this.get(ps.getWorld());
 | 
							Board board = this.get(ps.getWorld());
 | 
				
			||||||
		if (board == null) return null;
 | 
							if (board == null) return null;
 | 
				
			||||||
		return board.getTerritoryAccessAt(ps);
 | 
							return board.getTerritoryAccessAt(ps);
 | 
				
			||||||
@@ -69,7 +67,7 @@ public class BoardColl extends Coll<Board> implements BoardInterface
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Faction getFactionAt(PS ps)
 | 
						public Faction getFactionAt(PS ps)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (ps == null) return null;
 | 
							if (ps == null) throw new NullPointerException("ps");
 | 
				
			||||||
		Board board = this.get(ps.getWorld());
 | 
							Board board = this.get(ps.getWorld());
 | 
				
			||||||
		if (board == null) return null;
 | 
							if (board == null) return null;
 | 
				
			||||||
		return board.getFactionAt(ps);
 | 
							return board.getFactionAt(ps);
 | 
				
			||||||
@@ -80,7 +78,7 @@ public class BoardColl extends Coll<Board> implements BoardInterface
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public void setTerritoryAccessAt(PS ps, TerritoryAccess territoryAccess)
 | 
						public void setTerritoryAccessAt(PS ps, TerritoryAccess territoryAccess)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (ps == null) return;
 | 
							if (ps == null) throw new NullPointerException("ps");
 | 
				
			||||||
		Board board = this.get(ps.getWorld());
 | 
							Board board = this.get(ps.getWorld());
 | 
				
			||||||
		if (board == null) return;
 | 
							if (board == null) return;
 | 
				
			||||||
		board.setTerritoryAccessAt(ps, territoryAccess);
 | 
							board.setTerritoryAccessAt(ps, territoryAccess);
 | 
				
			||||||
@@ -89,7 +87,7 @@ public class BoardColl extends Coll<Board> implements BoardInterface
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public void setFactionAt(PS ps, Faction faction)
 | 
						public void setFactionAt(PS ps, Faction faction)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (ps == null) return;
 | 
							if (ps == null) throw new NullPointerException("ps");
 | 
				
			||||||
		Board board = this.get(ps.getWorld());
 | 
							Board board = this.get(ps.getWorld());
 | 
				
			||||||
		if (board == null) return;
 | 
							if (board == null) return;
 | 
				
			||||||
		board.setFactionAt(ps, faction);
 | 
							board.setFactionAt(ps, faction);
 | 
				
			||||||
@@ -100,7 +98,7 @@ public class BoardColl extends Coll<Board> implements BoardInterface
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public void removeAt(PS ps)
 | 
						public void removeAt(PS ps)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (ps == null) return;
 | 
							if (ps == null) throw new NullPointerException("ps");
 | 
				
			||||||
		Board board = this.get(ps.getWorld());
 | 
							Board board = this.get(ps.getWorld());
 | 
				
			||||||
		if (board == null) return;
 | 
							if (board == null) return;
 | 
				
			||||||
		board.removeAt(ps);
 | 
							board.removeAt(ps);
 | 
				
			||||||
@@ -120,37 +118,28 @@ public class BoardColl extends Coll<Board> implements BoardInterface
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Set<PS> getChunks(Faction faction)
 | 
						public Set<PS> getChunks(Faction faction)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		// Create
 | 
							return this.getAll().stream()
 | 
				
			||||||
		Set<PS> ret = new HashSet<>();
 | 
								.flatMap(board -> board.getChunks(faction).stream())
 | 
				
			||||||
		
 | 
								.collect(Collectors.toSet());
 | 
				
			||||||
		// Fill
 | 
					 | 
				
			||||||
		for (Board board : this.getAll())
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			ret.addAll(board.getChunks(faction));
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		// Return
 | 
					 | 
				
			||||||
		return ret;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Set<PS> getChunks(String factionId)
 | 
						public Set<PS> getChunks(String factionId)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		// Create
 | 
							return this.getAll().stream()
 | 
				
			||||||
		Set<PS> ret = new HashSet<>();
 | 
								.flatMap(board -> board.getChunks(factionId).stream())
 | 
				
			||||||
		
 | 
								.collect(Collectors.toSet());
 | 
				
			||||||
		// Fill
 | 
					 | 
				
			||||||
		for (Board board : this.getAll())
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			ret.addAll(board.getChunks(factionId));
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		// Return
 | 
					 | 
				
			||||||
		return ret;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
 | 
						@Deprecated
 | 
				
			||||||
	public Map<Faction, Set<PS>> getFactionToChunks()
 | 
						public Map<Faction, Set<PS>> getFactionToChunks()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return this.getFactionToChunks(false);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public Map<Faction, Set<PS>> getFactionToChunks(boolean withWorld)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		// Create
 | 
							// Create
 | 
				
			||||||
		Map<Faction, Set<PS>> ret = null;
 | 
							Map<Faction, Set<PS>> ret = null;
 | 
				
			||||||
@@ -159,7 +148,7 @@ public class BoardColl extends Coll<Board> implements BoardInterface
 | 
				
			|||||||
		for (Board board : this.getAll())
 | 
							for (Board board : this.getAll())
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			// Use the first board directly
 | 
								// Use the first board directly
 | 
				
			||||||
			Map<Faction, Set<PS>> factionToChunks = board.getFactionToChunks();
 | 
								Map<Faction, Set<PS>> factionToChunks = board.getFactionToChunks(withWorld);
 | 
				
			||||||
			if (ret == null)
 | 
								if (ret == null)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				ret = factionToChunks;
 | 
									ret = factionToChunks;
 | 
				
			||||||
@@ -189,6 +178,13 @@ public class BoardColl extends Coll<Board> implements BoardInterface
 | 
				
			|||||||
		return ret;
 | 
							return ret;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public Map<String, Map<Faction, Set<PS>>> getWorldToFactionToChunks(boolean withWorld)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return this.getAll().stream()
 | 
				
			||||||
 | 
								.collect(Collectors.toMap(Board::getId, board -> board.getFactionToChunks(withWorld)));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	// COUNT
 | 
						// COUNT
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
@@ -200,46 +196,25 @@ public class BoardColl extends Coll<Board> implements BoardInterface
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public int getCount(String factionId)
 | 
						public int getCount(String factionId)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		int ret = 0;
 | 
							return this.getAll().stream()
 | 
				
			||||||
		for (Board board : this.getAll())
 | 
								.mapToInt(board -> board.getCount(factionId))
 | 
				
			||||||
		{
 | 
								.sum();
 | 
				
			||||||
			ret += board.getCount(factionId);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return ret;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Map<Faction, Integer> getFactionToCount()
 | 
						public Map<Faction, Long> getFactionToCount()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		Map<Faction, Integer> ret = null;
 | 
							// Get them all and map them to sets of entries
 | 
				
			||||||
		for (Board board : this.getAll())
 | 
							return this.getAll().stream()
 | 
				
			||||||
		{
 | 
								.map(Board::getFactionToCount)
 | 
				
			||||||
			// Use the first board directly
 | 
								.map(Map::entrySet)
 | 
				
			||||||
			Map<Faction, Integer> factionToCount = board.getFactionToCount();
 | 
								.flatMap(Set::stream)
 | 
				
			||||||
			if (ret == null)
 | 
							// Collect the entries in a map of <Faction, Long> by summing the values
 | 
				
			||||||
			{
 | 
								.collect(Collectors.groupingBy(
 | 
				
			||||||
				ret = factionToCount;
 | 
									Entry::getKey,
 | 
				
			||||||
				continue;
 | 
									Collectors.summingLong(Entry::getValue)
 | 
				
			||||||
			}
 | 
								))
 | 
				
			||||||
			
 | 
							;
 | 
				
			||||||
			// Merge the following boards
 | 
					 | 
				
			||||||
			for (Entry<Faction, Integer> entry : factionToCount.entrySet())
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				Faction faction = entry.getKey();
 | 
					 | 
				
			||||||
				Integer count = ret.get(faction);
 | 
					 | 
				
			||||||
				if (count == null)
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					ret.put(faction, entry.getValue());
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				else
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					ret.put(faction, count + entry.getValue());
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		if (ret == null) ret = new MassiveMap<>();
 | 
					 | 
				
			||||||
		return ret;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// COUNT
 | 
						// COUNT
 | 
				
			||||||
@@ -253,11 +228,8 @@ public class BoardColl extends Coll<Board> implements BoardInterface
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public boolean hasClaimed(String factionId)
 | 
						public boolean hasClaimed(String factionId)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		for (Board board : this.getAll())
 | 
							return this.getAll().stream()
 | 
				
			||||||
		{
 | 
								.anyMatch(board -> board.hasClaimed(factionId));
 | 
				
			||||||
			if (board.hasClaimed(factionId)) return true;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return false;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// NEARBY DETECTION
 | 
						// NEARBY DETECTION
 | 
				
			||||||
@@ -265,7 +237,7 @@ public class BoardColl extends Coll<Board> implements BoardInterface
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public boolean isBorderPs(PS ps)
 | 
						public boolean isBorderPs(PS ps)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (ps == null) return false;
 | 
							if (ps == null) throw new NullPointerException("ps");
 | 
				
			||||||
		Board board = this.get(ps.getWorld());
 | 
							Board board = this.get(ps.getWorld());
 | 
				
			||||||
		if (board == null) return false;
 | 
							if (board == null) return false;
 | 
				
			||||||
		return board.isBorderPs(ps);
 | 
							return board.isBorderPs(ps);
 | 
				
			||||||
@@ -274,17 +246,13 @@ public class BoardColl extends Coll<Board> implements BoardInterface
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public boolean isAnyBorderPs(Set<PS> pss)
 | 
						public boolean isAnyBorderPs(Set<PS> pss)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		for (PS ps : pss)
 | 
							return pss.stream().anyMatch(this::isBorderPs);
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			if (this.isBorderPs(ps)) return true;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return false;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public boolean isConnectedPs(PS ps, Faction faction)
 | 
						public boolean isConnectedPs(PS ps, Faction faction)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (ps == null) return false;
 | 
							if (ps == null) throw new NullPointerException("ps");
 | 
				
			||||||
		Board board = this.get(ps.getWorld());
 | 
							Board board = this.get(ps.getWorld());
 | 
				
			||||||
		if (board == null) return false;
 | 
							if (board == null) return false;
 | 
				
			||||||
		return board.isConnectedPs(ps, faction);
 | 
							return board.isConnectedPs(ps, faction);
 | 
				
			||||||
@@ -311,17 +279,11 @@ public class BoardColl extends Coll<Board> implements BoardInterface
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	public Set<String> getClaimedWorlds(String factionId)
 | 
						public Set<String> getClaimedWorlds(String factionId)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		// Create
 | 
							if (factionId == null) throw new NullPointerException("factionId");
 | 
				
			||||||
		Set<String> ret = new MassiveSet<>();
 | 
							return this.getAll().stream()
 | 
				
			||||||
		
 | 
								.filter(board -> board.hasClaimed(factionId))
 | 
				
			||||||
		// Fill
 | 
								.map(Board::getId)
 | 
				
			||||||
		for (Board board : this.getAll())
 | 
								.collect(Collectors.toSet());
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			if (board.hasClaimed(factionId)) ret.add(board.getId());
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		// Return
 | 
					 | 
				
			||||||
		return ret;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,12 +23,14 @@ public interface BoardInterface
 | 
				
			|||||||
	// CHUNKS
 | 
						// CHUNKS
 | 
				
			||||||
	Set<PS> getChunks(Faction faction);
 | 
						Set<PS> getChunks(Faction faction);
 | 
				
			||||||
	Set<PS> getChunks(String factionId);
 | 
						Set<PS> getChunks(String factionId);
 | 
				
			||||||
	Map<Faction, Set<PS>> getFactionToChunks();
 | 
						@Deprecated Map<Faction, Set<PS>> getFactionToChunks();
 | 
				
			||||||
 | 
						Map<Faction, Set<PS>> getFactionToChunks(boolean withWorld);
 | 
				
			||||||
 | 
						Map<String, Map<Faction, Set<PS>>> getWorldToFactionToChunks(boolean withWorld);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// COUNT
 | 
						// COUNT
 | 
				
			||||||
	int getCount(Faction faction);
 | 
						int getCount(Faction faction);
 | 
				
			||||||
	int getCount(String factionId);
 | 
						int getCount(String factionId);
 | 
				
			||||||
	Map<Faction, Integer> getFactionToCount();
 | 
						Map<Faction, Long> getFactionToCount();
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// CLAIMED
 | 
						// CLAIMED
 | 
				
			||||||
	boolean hasClaimed(Faction faction);
 | 
						boolean hasClaimed(Faction faction);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1092,6 +1092,11 @@ public class Faction extends Entity<Faction> implements FactionsParticipator, MP
 | 
				
			|||||||
		return ret.get(0);
 | 
							return ret.get(0);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public Set<String> getMPlayerIds()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return this.getMPlayers().stream().map(MPlayer::getId).collect(Collectors.toSet());
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public List<CommandSender> getOnlineCommandSenders()
 | 
						public List<CommandSender> getOnlineCommandSenders()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		// Create Ret
 | 
							// Create Ret
 | 
				
			||||||
@@ -1141,7 +1146,7 @@ public class Faction extends Entity<Faction> implements FactionsParticipator, MP
 | 
				
			|||||||
		MPlayer oldLeader = this.getLeader();
 | 
							MPlayer oldLeader = this.getLeader();
 | 
				
			||||||
		Rank leaderRank = oldLeader.getRank();
 | 
							Rank leaderRank = oldLeader.getRank();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		List<MPlayer> replacements = Collections.<MPlayer>emptyList();
 | 
							List<MPlayer> replacements = Collections.emptyList();
 | 
				
			||||||
		for (Rank rank = leaderRank; rank != null; rank = rank.getRankBelow())
 | 
							for (Rank rank = leaderRank; rank != null; rank = rank.getRankBelow())
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			//Skip first
 | 
								//Skip first
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user