Added tip to /f set. Empowered board interface with extra methods.

This commit is contained in:
Olof Larsson 2014-10-22 07:50:30 +02:00
parent b1c0512b46
commit 2ac847fe14
6 changed files with 153 additions and 6 deletions

View File

@ -34,8 +34,12 @@ public class CmdFactionsSet extends FactionsCommand
this.addSubCommand(this.cmdFactionsSetCircle);
this.addSubCommand(this.cmdFactionsSetTransfer);
this.setHelp("Tip: Set faction <h>none <i>to unclaim.");
// Requirements
this.addRequirements(ReqHasPerm.get(Perm.SET.node));
}
}

View File

@ -17,6 +17,8 @@ import com.massivecraft.factions.Factions;
import com.massivecraft.factions.RelationParticipator;
import com.massivecraft.factions.TerritoryAccess;
import com.massivecraft.factions.util.AsciiCompass;
import com.massivecraft.massivecore.collections.MassiveMap;
import com.massivecraft.massivecore.collections.MassiveSet;
import com.massivecraft.massivecore.ps.PS;
import com.massivecraft.massivecore.store.Entity;
import com.massivecraft.massivecore.util.Txt;
@ -181,6 +183,7 @@ public class Board extends Entity<Board> implements BoardInterface
return this.getChunks(faction.getId());
}
@Override
public Set<PS> getChunks(String factionId)
{
Set<PS> ret = new HashSet<PS>();
@ -196,6 +199,35 @@ public class Board extends Entity<Board> implements BoardInterface
return ret;
}
@Override
public Map<Faction, Set<PS>> getFactionToChunks()
{
Map<Faction, Set<PS>> ret = new MassiveMap<>();
for (Entry<PS, TerritoryAccess> entry : this.map.entrySet())
{
// Get Faction
TerritoryAccess ta = entry.getValue();
Faction faction = ta.getHostFaction();
if (faction == null) continue;
// Get Chunks
Set<PS> chunks = ret.get(faction);
if (chunks == null)
{
chunks = new MassiveSet<>();
ret.put(faction, chunks);
}
// Add Chunk
PS chunk = entry.getKey();
chunk = chunk.withWorld(this.getId());
chunks.add(chunk);
}
return ret;
}
// COUNT
@Override
@ -216,6 +248,32 @@ public class Board extends Entity<Board> implements BoardInterface
return ret;
}
@Override
public Map<Faction, Integer> getFactionToCount()
{
Map<Faction, Integer> ret = new MassiveMap<>();
for (Entry<PS, TerritoryAccess> entry : this.map.entrySet())
{
// 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;
}
// NEARBY DETECTION
// Is this coord NOT completely surrounded by coords claimed by the same faction?

View File

@ -6,12 +6,14 @@ import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import com.massivecraft.factions.Const;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.RelationParticipator;
import com.massivecraft.factions.TerritoryAccess;
import com.massivecraft.massivecore.collections.MassiveMap;
import com.massivecraft.massivecore.ps.PS;
import com.massivecraft.massivecore.store.Coll;
import com.massivecraft.massivecore.store.MStore;
@ -128,6 +130,51 @@ public class BoardColl extends Coll<Board> implements BoardInterface
return ret;
}
@Override
public Set<PS> getChunks(String factionId)
{
Set<PS> ret = new HashSet<PS>();
for (Board board : this.getAll())
{
ret.addAll(board.getChunks(factionId));
}
return ret;
}
@Override
public Map<Faction, Set<PS>> getFactionToChunks()
{
Map<Faction, Set<PS>> ret = null;
for (Board board : this.getAll())
{
// Use the first board directly
Map<Faction, Set<PS>> factionToChunks = board.getFactionToChunks();
if (ret == null)
{
ret = factionToChunks;
continue;
}
// Merge the following boards
for (Entry<Faction, Set<PS>> entry : factionToChunks.entrySet())
{
Faction faction = entry.getKey();
Set<PS> chunks = ret.get(faction);
if (chunks == null)
{
ret.put(faction, entry.getValue());
}
else
{
chunks.addAll(entry.getValue());
}
}
}
if (ret == null) ret = new MassiveMap<>();
return ret;
}
// COUNT
@Override
@ -147,6 +194,40 @@ public class BoardColl extends Coll<Board> implements BoardInterface
return ret;
}
@Override
public Map<Faction, Integer> getFactionToCount()
{
Map<Faction, Integer> ret = null;
for (Board board : this.getAll())
{
// Use the first board directly
Map<Faction, Integer> factionToCount = board.getFactionToCount();
if (ret == null)
{
ret = factionToCount;
continue;
}
// 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;
}
// NEARBY DETECTION
@Override

View File

@ -1,6 +1,7 @@
package com.massivecraft.factions.entity;
import java.util.ArrayList;
import java.util.Map;
import java.util.Set;
import com.massivecraft.factions.RelationParticipator;
@ -24,10 +25,13 @@ public interface BoardInterface
// CHUNKS
public Set<PS> getChunks(Faction faction);
public Set<PS> getChunks(String factionId);
public Map<Faction, Set<PS>> getFactionToChunks();
// COUNT
public int getCount(Faction faction);
public int getCount(String factionId);
public Map<Faction, Integer> getFactionToCount();
// NEARBY DETECTION
public boolean isBorderPs(PS ps);

View File

@ -804,6 +804,7 @@ public class MPlayer extends SenderEntity<MPlayer> implements EconomyParticipato
{
return this.tryClaim(newFaction, pss, null, null);
}
public boolean tryClaim(Faction newFaction, Collection<PS> pss, String formatOne, String formatMany)
{
// Args
@ -875,15 +876,14 @@ public class MPlayer extends SenderEntity<MPlayer> implements EconomyParticipato
{
Set<MPlayer> ret = new HashSet<MPlayer>();
ret.add(msender);
if (msender != null) ret.add(msender);
for (Faction faction : factions)
{
if (faction.isNormal())
{
if (faction == null) continue;
if (faction.isNone()) continue;
ret.addAll(faction.getMPlayers());
}
}
if (MConf.get().logLandClaims)
{