Allow naming of chunks
This commit is contained in:
parent
bc01275933
commit
bc62e17068
@ -26,6 +26,7 @@ permissions:
|
||||
factions.access.view: {description: view access, default: false}
|
||||
factions.override: {description: enable override mode, default: false}
|
||||
factions.basecommand: {description: use factions base command, default: false}
|
||||
factions.chunkname: {description: set chunk name, default: false}
|
||||
factions.claim: {description: claim faction territory, default: false}
|
||||
factions.claim.one: {description: claim a single chunk, default: false}
|
||||
factions.claim.auto: {description: claim as you walk around, default: false}
|
||||
@ -163,6 +164,7 @@ permissions:
|
||||
factions.access.view: true
|
||||
factions.override: true
|
||||
factions.basecommand: true
|
||||
factions.chunkname: true
|
||||
factions.claim: true
|
||||
factions.claim.one: true
|
||||
factions.claim.auto: true
|
||||
@ -344,6 +346,7 @@ permissions:
|
||||
factions.access.inspect: true
|
||||
factions.access.view: true
|
||||
factions.basecommand: true
|
||||
factions.chunkname: true
|
||||
factions.claim: true
|
||||
factions.claim.one: true
|
||||
factions.claim.auto: true
|
||||
|
@ -29,6 +29,10 @@ public class TerritoryAccess
|
||||
private final Set<String> grantedIds;
|
||||
public Set<String> getGrantedIds() { return this.grantedIds; }
|
||||
|
||||
// default is null
|
||||
private final String chunkName;
|
||||
public String getChunkName() { return this.chunkName; }
|
||||
|
||||
// -------------------------------------------- //
|
||||
// FIELDS: VERSION
|
||||
// -------------------------------------------- //
|
||||
@ -40,9 +44,10 @@ public class TerritoryAccess
|
||||
// -------------------------------------------- //
|
||||
|
||||
// The simple ones
|
||||
public TerritoryAccess withHostFactionId(String hostFactionId) { return valueOf(hostFactionId, hostFactionAllowed, grantedIds); }
|
||||
public TerritoryAccess withHostFactionAllowed(Boolean hostFactionAllowed) { return valueOf(hostFactionId, hostFactionAllowed, grantedIds); }
|
||||
public TerritoryAccess withGrantedIds(Collection<String> grantedIds) { return valueOf(hostFactionId, hostFactionAllowed, grantedIds); }
|
||||
public TerritoryAccess withHostFactionId(String hostFactionId) { return valueOf(hostFactionId, hostFactionAllowed, grantedIds, chunkName); }
|
||||
public TerritoryAccess withHostFactionAllowed(Boolean hostFactionAllowed) { return valueOf(hostFactionId, hostFactionAllowed, grantedIds, chunkName); }
|
||||
public TerritoryAccess withGrantedIds(Collection<String> grantedIds) { return valueOf(hostFactionId, hostFactionAllowed, grantedIds, chunkName); }
|
||||
public TerritoryAccess withChunkName(String chunkName) { return valueOf(hostFactionId, hostFactionAllowed, grantedIds, chunkName); }
|
||||
|
||||
// The intermediate ones
|
||||
public TerritoryAccess withGranted(MPermable mpermable, boolean with)
|
||||
@ -54,7 +59,7 @@ public class TerritoryAccess
|
||||
{
|
||||
if (this.getHostFactionId().equals(grantedId))
|
||||
{
|
||||
return valueOf(hostFactionId, with, grantedIds);
|
||||
return valueOf(hostFactionId, with, grantedIds, chunkName);
|
||||
}
|
||||
|
||||
Set<String> grantedIds = new MassiveSet<>(this.getGrantedIds());
|
||||
@ -66,7 +71,7 @@ public class TerritoryAccess
|
||||
{
|
||||
grantedIds.remove(grantedId);
|
||||
}
|
||||
return valueOf(hostFactionId, hostFactionAllowed, grantedIds);
|
||||
return valueOf(hostFactionId, hostFactionAllowed, grantedIds, chunkName);
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
@ -95,9 +100,10 @@ public class TerritoryAccess
|
||||
this.hostFactionId = null;
|
||||
this.hostFactionAllowed = true;
|
||||
this.grantedIds = null;
|
||||
this.chunkName = null;
|
||||
}
|
||||
|
||||
private TerritoryAccess(String hostFactionId, Boolean hostFactionAllowed, Collection<String> grantedIds)
|
||||
private TerritoryAccess(String hostFactionId, Boolean hostFactionAllowed, Collection<String> grantedIds, String chunkName)
|
||||
{
|
||||
if (hostFactionId == null) throw new NullPointerException("hostFactionId");
|
||||
if (grantedIds == null) throw new NullPointerException("grantedIds");
|
||||
@ -112,23 +118,25 @@ public class TerritoryAccess
|
||||
this.grantedIds = Collections.unmodifiableSet(grantedIdsInner);
|
||||
|
||||
this.hostFactionAllowed = (hostFactionAllowed == null || hostFactionAllowed);
|
||||
|
||||
this.chunkName = chunkName;
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// FACTORY: VALUE OF
|
||||
// -------------------------------------------- //
|
||||
|
||||
public static TerritoryAccess valueOf(String hostFactionId, Boolean hostFactionAllowed, Collection<String> grantedIds)
|
||||
public static TerritoryAccess valueOf(String hostFactionId, Boolean hostFactionAllowed, Collection<String> grantedIds, String chunkName)
|
||||
{
|
||||
if (hostFactionId == null) throw new NullPointerException("hostFactionId");
|
||||
if (grantedIds == null) throw new NullPointerException("grantedIds");
|
||||
return new TerritoryAccess(hostFactionId, hostFactionAllowed, grantedIds);
|
||||
return new TerritoryAccess(hostFactionId, hostFactionAllowed, grantedIds, chunkName);
|
||||
}
|
||||
|
||||
public static TerritoryAccess valueOf(String hostFactionId)
|
||||
{
|
||||
if (hostFactionId == null) throw new NullPointerException("hostFactionId");
|
||||
return valueOf(hostFactionId, null, Collections.emptySet());
|
||||
return valueOf(hostFactionId, null, Collections.emptySet(), null);
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
@ -150,7 +158,7 @@ public class TerritoryAccess
|
||||
// The host faction is still allowed (default) and no faction or player has been granted explicit access (default).
|
||||
public boolean isDefault()
|
||||
{
|
||||
return this.isHostFactionAllowed() && this.getGrantedIds().isEmpty();
|
||||
return this.isHostFactionAllowed() && this.getGrantedIds().isEmpty() && this.getChunkName() == null;
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
|
@ -26,6 +26,7 @@ public class TerritoryAccessAdapter implements JsonDeserializer<TerritoryAccess>
|
||||
public static final String HOST_FACTION_ID = "hostFactionId";
|
||||
public static final String HOST_FACTION_ALLOWED = "hostFactionAllowed";
|
||||
public static final String GRANTED_IDS = "grantedIds";
|
||||
public static final String CHUNK_NAME = "chunkName";
|
||||
|
||||
public static final Type SET_OF_STRING_TYPE = new TypeToken<Set<String>>(){}.getType();
|
||||
|
||||
@ -57,7 +58,8 @@ public class TerritoryAccessAdapter implements JsonDeserializer<TerritoryAccess>
|
||||
String hostFactionId = null;
|
||||
Boolean hostFactionAllowed = null;
|
||||
Set<String> grantedIds = Collections.emptySet();
|
||||
|
||||
String chunkName = null;
|
||||
|
||||
// Read variables (test old values first)
|
||||
JsonElement element = null;
|
||||
|
||||
@ -69,8 +71,11 @@ public class TerritoryAccessAdapter implements JsonDeserializer<TerritoryAccess>
|
||||
|
||||
element = obj.get(GRANTED_IDS);
|
||||
if (element != null) grantedIds = context.deserialize(element, SET_OF_STRING_TYPE);
|
||||
|
||||
element = obj.get(CHUNK_NAME);
|
||||
if (element != null) chunkName = element.getAsString();
|
||||
|
||||
return TerritoryAccess.valueOf(hostFactionId, hostFactionAllowed, grantedIds);
|
||||
return TerritoryAccess.valueOf(hostFactionId, hostFactionAllowed, grantedIds, chunkName);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -99,6 +104,11 @@ public class TerritoryAccessAdapter implements JsonDeserializer<TerritoryAccess>
|
||||
obj.add(GRANTED_IDS, context.serialize(src.getGrantedIds(), SET_OF_STRING_TYPE));
|
||||
}
|
||||
|
||||
if (src.getChunkName() != null)
|
||||
{
|
||||
obj.addProperty(CHUNK_NAME, src.getChunkName());
|
||||
}
|
||||
|
||||
obj.add(MigratorUtil.VERSION_FIELD_NAME, new JsonPrimitive(src.version));
|
||||
|
||||
return obj;
|
||||
|
@ -46,6 +46,7 @@ public class CmdFactions extends FactionsCommand
|
||||
public CmdFactionsClaim cmdFactionsClaim = new CmdFactionsClaim();
|
||||
public CmdFactionsUnclaim cmdFactionsUnclaim = new CmdFactionsUnclaim();
|
||||
public CmdFactionsAccess cmdFactionsAccess = new CmdFactionsAccess();
|
||||
public CmdFactionsChunkname cmdFactionsChunkname = new CmdFactionsChunkname();
|
||||
public CmdFactionsRelation cmdFactionsRelation = new CmdFactionsRelation();
|
||||
public CmdFactionsRelationOld cmdFactionsRelationOldAlly = new CmdFactionsRelationOld("ally");
|
||||
public CmdFactionsRelationOld cmdFactionsRelationOldTruce = new CmdFactionsRelationOld("truce");
|
||||
|
@ -8,7 +8,6 @@ import com.massivecraft.factions.entity.MPerm.MPermable;
|
||||
import com.massivecraft.factions.util.AsciiMap;
|
||||
import com.massivecraft.massivecore.command.requirement.RequirementIsPlayer;
|
||||
import com.massivecraft.massivecore.ps.PS;
|
||||
import com.massivecraft.massivecore.ps.PSFormatHumanSpace;
|
||||
import com.massivecraft.massivecore.util.Txt;
|
||||
|
||||
import java.util.Collection;
|
||||
@ -59,7 +58,7 @@ public abstract class CmdFactionsAccessAbstract extends FactionsCommand
|
||||
|
||||
public void sendAccessInfo()
|
||||
{
|
||||
String chunkDesc = AsciiMap.showChunkCoords(chunk) ? " at " + chunk.toString(PSFormatHumanSpace.get()) : "";
|
||||
String chunkDesc = AsciiMap.getChunkDescWithName(chunk, ta);
|
||||
Object title = "Access" + chunkDesc;
|
||||
title = Txt.titleize(title);
|
||||
message(title);
|
||||
@ -80,7 +79,7 @@ public abstract class CmdFactionsAccessAbstract extends FactionsCommand
|
||||
Faction faction = ta.getHostFaction();
|
||||
|
||||
|
||||
String chunkDesc = AsciiMap.showChunkCoords(chunk) ? " at " + chunk.toString(PSFormatHumanSpace.get()) : "";
|
||||
String chunkDesc = AsciiMap.getChunkDescWithName(chunk, ta);
|
||||
String grantedDenied = granted ? "granted" : "denied";
|
||||
String mpermableDesc = mpermable.getDisplayName(msender);
|
||||
|
||||
|
81
src/com/massivecraft/factions/cmd/CmdFactionsChunkname.java
Normal file
81
src/com/massivecraft/factions/cmd/CmdFactionsChunkname.java
Normal file
@ -0,0 +1,81 @@
|
||||
package com.massivecraft.factions.cmd;
|
||||
|
||||
import com.massivecraft.factions.TerritoryAccess;
|
||||
import com.massivecraft.factions.entity.BoardColl;
|
||||
import com.massivecraft.factions.entity.MPerm;
|
||||
import com.massivecraft.factions.util.AsciiMap;
|
||||
import com.massivecraft.massivecore.MassiveException;
|
||||
import com.massivecraft.massivecore.command.requirement.RequirementIsPlayer;
|
||||
import com.massivecraft.massivecore.command.type.TypeNullable;
|
||||
import com.massivecraft.massivecore.command.type.primitive.TypeString;
|
||||
import com.massivecraft.massivecore.ps.PS;
|
||||
import com.massivecraft.massivecore.util.MUtil;
|
||||
import com.massivecraft.massivecore.util.Txt;
|
||||
|
||||
public class CmdFactionsChunkname extends FactionsCommand
|
||||
{
|
||||
// -------------------------------------------- //
|
||||
// CONSTRUCT
|
||||
// -------------------------------------------- //
|
||||
|
||||
public CmdFactionsChunkname()
|
||||
{
|
||||
// Parameters
|
||||
this.addParameter(TypeNullable.get(TypeString.get()), "name", "read");
|
||||
|
||||
this.addRequirements(RequirementIsPlayer.get());
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// OVERRIDE
|
||||
// -------------------------------------------- //
|
||||
|
||||
@Override
|
||||
public void perform() throws MassiveException
|
||||
{
|
||||
PS chunk = PS.valueOf(me.getLocation()).getChunk(true);
|
||||
TerritoryAccess ta = BoardColl.get().getTerritoryAccessAt(chunk);
|
||||
|
||||
if (!this.argIsSet(0))
|
||||
{
|
||||
String name = ta.getChunkName();
|
||||
if (name == null)
|
||||
{
|
||||
msg("<i>This chunk has no name.");
|
||||
}
|
||||
else
|
||||
{
|
||||
msg("<i>This chunk is called <h>%s<i>.", name);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// MPerm
|
||||
if (!MPerm.getPermTerritory().has(msender, msenderFaction, true)) return;
|
||||
|
||||
// Args
|
||||
String target = this.readArg();
|
||||
|
||||
target = target.trim();
|
||||
target = Txt.parse(target);
|
||||
|
||||
String old = ta.getChunkName();
|
||||
|
||||
// NoChange
|
||||
if (MUtil.equals(old, target))
|
||||
{
|
||||
if (old == null)
|
||||
{
|
||||
throw new MassiveException().addMsg("<b>This chunk already has no name.");
|
||||
}
|
||||
throw new MassiveException().addMsg("<b>The name for this chunk is already <h>%s<b>.", old);
|
||||
}
|
||||
|
||||
ta = ta.withChunkName(target);
|
||||
BoardColl.get().setTerritoryAccessAt(chunk, ta);
|
||||
|
||||
String chunkDesc = AsciiMap.getChunkDesc(chunk);
|
||||
msg("<i>The chunk name%s<i> is now %s.", chunkDesc, target);
|
||||
}
|
||||
|
||||
}
|
@ -1,12 +1,14 @@
|
||||
package com.massivecraft.factions.util;
|
||||
|
||||
import com.massivecraft.factions.RelationParticipator;
|
||||
import com.massivecraft.factions.TerritoryAccess;
|
||||
import com.massivecraft.factions.entity.Board;
|
||||
import com.massivecraft.factions.entity.BoardColl;
|
||||
import com.massivecraft.factions.entity.Faction;
|
||||
import com.massivecraft.massivecore.collections.MassiveList;
|
||||
import com.massivecraft.massivecore.mson.Mson;
|
||||
import com.massivecraft.massivecore.ps.PS;
|
||||
import com.massivecraft.massivecore.ps.PSFormatHumanSpace;
|
||||
import com.massivecraft.massivecore.util.Txt;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.GameRule;
|
||||
@ -112,7 +114,7 @@ public class AsciiMap
|
||||
ret.add(this.getTitle());
|
||||
ret.addAll(this.getLines());
|
||||
ret.add(this.getFactionLegend());
|
||||
|
||||
|
||||
// Return
|
||||
return ret;
|
||||
}
|
||||
@ -164,31 +166,42 @@ public class AsciiMap
|
||||
for (int deltaX = startX; deltaX < WIDTH; deltaX++)
|
||||
{
|
||||
boolean isMiddle = deltaX == WIDTH_HALF && deltaZ == this.getHeightHalf();
|
||||
factionChar = isMiddle ? KEY_MIDDLE : this.getCharFaction(deltaZ, deltaX);
|
||||
factionChar = isMiddle ? KEY_MIDDLE : this.getCharChunk(deltaZ, deltaX);
|
||||
ret = ret.add(factionChar);
|
||||
}
|
||||
|
||||
// Return
|
||||
return ret;
|
||||
}
|
||||
|
||||
private Mson getCharChunk(int deltaZ, int deltaX)
|
||||
{
|
||||
PS herePs = this.getTopLeft().plusChunkCoords(deltaX, deltaZ);
|
||||
Faction hereFaction = this.getBoard().getFactionAt(herePs);
|
||||
|
||||
String chunkName = this.getBoard().getTerritoryAccessAt(herePs).getChunkName();
|
||||
Mson charFaction = getCharFaction(hereFaction);
|
||||
String tooltip = charFaction.getTooltip();
|
||||
if (chunkName != null) tooltip += "\n" + ChatColor.WHITE + chunkName;
|
||||
Mson charChunk = charFaction.tooltip(tooltip);
|
||||
return charChunk;
|
||||
}
|
||||
|
||||
private Mson getCharFaction(int deltaZ, int deltaX)
|
||||
private Mson getCharFaction(Faction faction)
|
||||
{
|
||||
// Calculate overflow
|
||||
int index = this.getFactionChars().size();
|
||||
if (!this.isOverflown() && index >= KEY_SIZE) this.setOverflown(true);
|
||||
|
||||
PS herePs = this.getTopLeft().plusChunkCoords(deltaX, deltaZ);
|
||||
Faction hereFaction = this.getBoard().getFactionAt(herePs);
|
||||
Mson factionChar = this.getFactionChars().get(hereFaction);
|
||||
|
||||
Mson factionChar = this.getFactionChars().get(faction);
|
||||
|
||||
// Is Wilderness or known?
|
||||
if (hereFaction.isNone()) return KEY_WILDERNESS;
|
||||
if (faction.isNone()) return KEY_WILDERNESS;
|
||||
if (factionChar != null) return factionChar;
|
||||
|
||||
// Create descriptions
|
||||
ChatColor color = hereFaction.getColorTo(this.getRelationParticipator());
|
||||
String name = hereFaction.getName(this.getRelationParticipator());
|
||||
ChatColor color = faction.getColorTo(this.getRelationParticipator());
|
||||
String name = faction.getName(this.getRelationParticipator());
|
||||
String tooltip = color.toString() + name;
|
||||
|
||||
// Is overflown?
|
||||
@ -199,7 +212,7 @@ public class AsciiMap
|
||||
factionChar = factionChar.tooltip(tooltip);
|
||||
|
||||
// Store for later use
|
||||
this.getFactionChars().put(hereFaction, factionChar);
|
||||
this.getFactionChars().put(faction, factionChar);
|
||||
|
||||
// Return
|
||||
return factionChar;
|
||||
@ -237,4 +250,22 @@ public class AsciiMap
|
||||
return ! w.getGameRuleValue(GameRule.REDUCED_DEBUG_INFO);
|
||||
}
|
||||
|
||||
public static String getChunkDesc(PS chunk)
|
||||
{
|
||||
return showChunkCoords(chunk) ? " at " + chunk.toString(PSFormatHumanSpace.get()) : "";
|
||||
}
|
||||
|
||||
public static String getChunkDescWithName(PS chunk, TerritoryAccess ta)
|
||||
{
|
||||
String name = ta.getChunkName();
|
||||
if (name == null) return getChunkDesc(chunk);
|
||||
|
||||
String ret = Txt.parse(" at <h>%s", name);
|
||||
if (showChunkCoords(chunk))
|
||||
{
|
||||
ret += Txt.parse(" <i>(%s<i>)", chunk.toString(PSFormatHumanSpace.get()));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user