New command structure. Todo fix broken circle claim.

This commit is contained in:
Olof Larsson 2014-10-13 15:14:34 +02:00
parent c690d33ad6
commit 8d31a0d4a0
17 changed files with 592 additions and 238 deletions

View File

@ -15,9 +15,6 @@ public enum Perm
ACCESS_PLAYER("access.player"), ACCESS_PLAYER("access.player"),
ACCESS_FACTION("access.faction"), ACCESS_FACTION("access.faction"),
ADMIN("admin"), ADMIN("admin"),
AUTOCLAIM("autoclaim"),
CLAIM("claim"),
CLAIM_RADIUS("claim.radius"),
CREATE("create"), CREATE("create"),
DEMOTE("demote"), DEMOTE("demote"),
DESCRIPTION("description"), DESCRIPTION("description"),
@ -54,12 +51,17 @@ public enum Perm
RELATION("relation"), RELATION("relation"),
SEECHUNK("seechunk"), SEECHUNK("seechunk"),
SEECHUNKOLD("seechunkold"), SEECHUNKOLD("seechunkold"),
SET("set"),
SET_ONE("set.one"),
SET_AUTO("set.auto"),
SET_FILL("set.fill"),
SET_SQUARE("set.square"),
SET_CIRCLE("set.circle"),
SET_TRANSFER("set.transfer"),
SETHOME("sethome"), SETHOME("sethome"),
NAME("name"), NAME("name"),
TITLE("title"), TITLE("title"),
TITLE_COLOR("title.color"), TITLE_COLOR("title.color"),
UNCLAIM("unclaim"),
UNCLAIM_ALL("unclaimall"),
UNSETHOME("unsethome"), UNSETHOME("unsethome"),
VERSION("version"), VERSION("version"),

View File

@ -25,6 +25,7 @@ public class CmdFactions extends FactionsCommand
public CmdFactionsName cmdFactionsName = new CmdFactionsName(); public CmdFactionsName cmdFactionsName = new CmdFactionsName();
public CmdFactionsDescription cmdFactionsDescription = new CmdFactionsDescription(); public CmdFactionsDescription cmdFactionsDescription = new CmdFactionsDescription();
public CmdFactionsMotd cmdFactionsMotd = new CmdFactionsMotd(); public CmdFactionsMotd cmdFactionsMotd = new CmdFactionsMotd();
public CmdFactionsSet cmdFactionsSet = new CmdFactionsSet();
public CmdFactionsSethome cmdFactionsSethome = new CmdFactionsSethome(); public CmdFactionsSethome cmdFactionsSethome = new CmdFactionsSethome();
public CmdFactionsUnsethome cmdFactionsUnsethome = new CmdFactionsUnsethome(); public CmdFactionsUnsethome cmdFactionsUnsethome = new CmdFactionsUnsethome();
public CmdFactionsInvite cmdFactionsInvite = new CmdFactionsInvite(); public CmdFactionsInvite cmdFactionsInvite = new CmdFactionsInvite();
@ -37,10 +38,6 @@ public class CmdFactions extends FactionsCommand
public CmdFactionsMoney cmdFactionsMoney = new CmdFactionsMoney(); public CmdFactionsMoney cmdFactionsMoney = new CmdFactionsMoney();
public CmdFactionsSeeChunk cmdFactionsSeeChunk = new CmdFactionsSeeChunk(); public CmdFactionsSeeChunk cmdFactionsSeeChunk = new CmdFactionsSeeChunk();
public CmdFactionsSeeChunkOld cmdFactionsSeeChunkOld = new CmdFactionsSeeChunkOld(); public CmdFactionsSeeChunkOld cmdFactionsSeeChunkOld = new CmdFactionsSeeChunkOld();
public CmdFactionsClaim cmdFactionsClaim = new CmdFactionsClaim();
public CmdFactionsAutoClaim cmdFactionsAutoClaim = new CmdFactionsAutoClaim();
public CmdFactionsUnclaim cmdFactionsUnclaim = new CmdFactionsUnclaim();
public CmdFactionsUnclaimall cmdFactionsUnclaimall = new CmdFactionsUnclaimall();
public CmdFactionsAccess cmdFactionsAccess = new CmdFactionsAccess(); public CmdFactionsAccess cmdFactionsAccess = new CmdFactionsAccess();
public CmdFactionsRelationAlly cmdFactionsRelationAlly = new CmdFactionsRelationAlly(); public CmdFactionsRelationAlly cmdFactionsRelationAlly = new CmdFactionsRelationAlly();
public CmdFactionsRelationTruce cmdFactionsRelationTruce = new CmdFactionsRelationTruce(); public CmdFactionsRelationTruce cmdFactionsRelationTruce = new CmdFactionsRelationTruce();
@ -72,6 +69,7 @@ public class CmdFactions extends FactionsCommand
this.addSubCommand(this.cmdFactionsName); this.addSubCommand(this.cmdFactionsName);
this.addSubCommand(this.cmdFactionsDescription); this.addSubCommand(this.cmdFactionsDescription);
this.addSubCommand(this.cmdFactionsMotd); this.addSubCommand(this.cmdFactionsMotd);
this.addSubCommand(this.cmdFactionsSet);
this.addSubCommand(this.cmdFactionsSethome); this.addSubCommand(this.cmdFactionsSethome);
this.addSubCommand(this.cmdFactionsUnsethome); this.addSubCommand(this.cmdFactionsUnsethome);
this.addSubCommand(this.cmdFactionsInvite); this.addSubCommand(this.cmdFactionsInvite);
@ -84,10 +82,6 @@ public class CmdFactions extends FactionsCommand
this.addSubCommand(this.cmdFactionsMoney); this.addSubCommand(this.cmdFactionsMoney);
this.addSubCommand(this.cmdFactionsSeeChunk); this.addSubCommand(this.cmdFactionsSeeChunk);
this.addSubCommand(this.cmdFactionsSeeChunkOld); this.addSubCommand(this.cmdFactionsSeeChunkOld);
this.addSubCommand(this.cmdFactionsClaim);
this.addSubCommand(this.cmdFactionsAutoClaim);
this.addSubCommand(this.cmdFactionsUnclaim);
this.addSubCommand(this.cmdFactionsUnclaimall);
this.addSubCommand(this.cmdFactionsAccess); this.addSubCommand(this.cmdFactionsAccess);
this.addSubCommand(this.cmdFactionsRelationAlly); this.addSubCommand(this.cmdFactionsRelationAlly);
this.addSubCommand(this.cmdFactionsRelationTruce); this.addSubCommand(this.cmdFactionsRelationTruce);

View File

@ -1,96 +0,0 @@
package com.massivecraft.factions.cmd;
import java.util.LinkedHashSet;
import java.util.Set;
import com.massivecraft.factions.Perm;
import com.massivecraft.factions.cmd.arg.ARFaction;
import com.massivecraft.factions.entity.Faction;
import com.massivecraft.factions.entity.MConf;
import com.massivecraft.factions.entity.MPerm;
import com.massivecraft.massivecore.cmd.arg.ARInteger;
import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
import com.massivecraft.massivecore.cmd.req.ReqIsPlayer;
import com.massivecraft.massivecore.ps.PS;
public class CmdFactionsClaim extends FactionsCommand
{
// -------------------------------------------- //
// CONSTRUCT
// -------------------------------------------- //
public CmdFactionsClaim()
{
// Aliases
this.addAliases("claim");
// Args
this.addOptionalArg("radius", "1");
this.addOptionalArg("faction", "you");
// Requirements
this.addRequirements(ReqIsPlayer.get());
this.addRequirements(ReqHasPerm.get(Perm.CLAIM.node));
}
// -------------------------------------------- //
// OVERRIDE
// -------------------------------------------- //
@Override
public void perform()
{
// Args
Integer radius = this.arg(0, ARInteger.get(), 1);
if (radius == null) return;
final Faction newFaction = this.arg(1, ARFaction.get(), msenderFaction);
if (newFaction == null) return;
// MPerm
if (newFaction.isNormal() && ! MPerm.getPermTerritory().has(msender, newFaction, true)) return;
// Radius Claim Min
if (radius < 1)
{
msg("<b>If you specify a radius, it must be at least 1.");
return;
}
// Radius Claim Perm
if (radius > 1 && ! Perm.CLAIM_RADIUS.has(sender, false))
{
msg("<b>You do not have permission to claim in a radius.");
return;
}
// Radius Claim Max
if (radius > MConf.get().radiusClaimRadiusLimit && ! msender.isUsingAdminMode())
{
msg("<b>The maximum radius allowed is <h>%s<b>.", MConf.get().radiusClaimRadiusLimit);
return;
}
// Get Chunks
final int radiusZero = radius -1;
final PS chunk = PS.valueOf(me).getChunk(true);
final int xmin = chunk.getChunkX() - radiusZero;
final int xmax = chunk.getChunkX() + radiusZero;
final int zmin = chunk.getChunkZ() - radiusZero;
final int zmax = chunk.getChunkZ() + radiusZero;
Set<PS> chunks = new LinkedHashSet<PS>();
chunks.add(chunk); // The center should come first for pretty messages
for (int x = xmin; x <= xmax; x++)
{
for (int z = zmin; z <= zmax; z++)
{
chunks.add(chunk.withChunkX(x).withChunkZ(z));
}
}
// Apply / Inform
msender.tryClaim(newFaction, chunks);
}
}

View File

@ -0,0 +1,43 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Perm;
import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
import com.massivecraft.massivecore.cmd.req.ReqIsPlayer;
public class CmdFactionsSet extends FactionsCommand
{
// -------------------------------------------- //
// FIELDS
// -------------------------------------------- //
public CmdFactionsSetOne cmdFactionsSetOne = new CmdFactionsSetOne();
public CmdFactionsSetAuto cmdFactionsSetAuto = new CmdFactionsSetAuto();
public CmdFactionsSetFill cmdFactionsSetFill = new CmdFactionsSetFill();
public CmdFactionsSetSquare cmdFactionsSetSquare = new CmdFactionsSetSquare();
public CmdFactionsSetCircle cmdFactionsSetCircle = new CmdFactionsSetCircle();
public CmdFactionsSetTransfer cmdFactionsSetTransfer = new CmdFactionsSetTransfer();
// -------------------------------------------- //
// CONSTRUCT
// -------------------------------------------- //
public CmdFactionsSet()
{
// Aliases
this.addAliases("s", "set");
// Add SubCommands
this.addSubCommand(this.cmdFactionsSetOne);
this.addSubCommand(this.cmdFactionsSetAuto);
this.addSubCommand(this.cmdFactionsSetFill);
this.addSubCommand(this.cmdFactionsSetSquare);
this.addSubCommand(this.cmdFactionsSetCircle);
this.addSubCommand(this.cmdFactionsSetTransfer);
// Requirements
this.addRequirements(ReqIsPlayer.get());
this.addRequirements(ReqHasPerm.get(Perm.SET.node));
}
}

View File

@ -1,6 +1,7 @@
package com.massivecraft.factions.cmd; package com.massivecraft.factions.cmd;
import java.util.Collections; import java.util.Collections;
import java.util.Set;
import com.massivecraft.factions.Perm; import com.massivecraft.factions.Perm;
import com.massivecraft.factions.cmd.arg.ARFaction; import com.massivecraft.factions.cmd.arg.ARFaction;
@ -10,23 +11,24 @@ import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
import com.massivecraft.massivecore.cmd.req.ReqIsPlayer; import com.massivecraft.massivecore.cmd.req.ReqIsPlayer;
import com.massivecraft.massivecore.ps.PS; import com.massivecraft.massivecore.ps.PS;
public class CmdFactionsAutoClaim extends FactionsCommand
public class CmdFactionsSetAuto extends FactionsCommand
{ {
// -------------------------------------------- // // -------------------------------------------- //
// CONSTRUCT // CONSTRUCT
// -------------------------------------------- // // -------------------------------------------- //
public CmdFactionsAutoClaim() public CmdFactionsSetAuto()
{ {
// Aliases // Aliases
this.addAliases("autoclaim"); this.addAliases("a", "auto");
// Args // Args
this.addOptionalArg("faction", "you"); this.addOptionalArg("faction", "you");
// Requirements // Requirements
this.addRequirements(ReqHasPerm.get(Perm.AUTOCLAIM.node));
this.addRequirements(ReqIsPlayer.get()); this.addRequirements(ReqIsPlayer.get());
this.addRequirements(ReqHasPerm.get(Perm.SET_AUTO.node));
} }
// -------------------------------------------- // // -------------------------------------------- //
@ -37,23 +39,29 @@ public class CmdFactionsAutoClaim extends FactionsCommand
public void perform() public void perform()
{ {
// Args // Args
Faction forFaction = this.arg(0, ARFaction.get(), msenderFaction); final Faction newFaction = this.arg(0, ARFaction.get(), msenderFaction);
if (forFaction == null || forFaction == msender.getAutoClaimFaction()) // Disable?
if (newFaction == null || newFaction == msender.getAutoClaimFaction())
{ {
msender.setAutoClaimFaction(null); msender.setAutoClaimFaction(null);
msg("<i>Auto-claiming of land disabled."); msg("<i>Disabled auto-setting as you walk around.");
return; return;
} }
// MPerm // MPerm Preemptive Check
if (forFaction.isNormal() && !MPerm.getPermTerritory().has(msender, forFaction, true)) return; if (newFaction.isNormal() && ! MPerm.getPermTerritory().has(msender, newFaction, true)) return;
msender.setAutoClaimFaction(forFaction); // Apply / Inform
msender.setAutoClaimFaction(newFaction);
msg("<i>Now auto-setting <h>%s<i> land.", newFaction.describeTo(msender));
msg("<i>Now auto-claiming land for <h>%s<i>.", forFaction.describeTo(msender)); // Chunks
final PS chunk = PS.valueOf(me).getChunk(true);
Set<PS> chunks = Collections.singleton(chunk);
msender.tryClaim(forFaction, Collections.singletonList(PS.valueOf(me).getChunk(true))); // Apply / Inform
msender.tryClaim(newFaction, chunks);
} }
} }

View File

@ -0,0 +1,66 @@
package com.massivecraft.factions.cmd;
import java.util.LinkedHashSet;
import java.util.Set;
import com.massivecraft.factions.Perm;
import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
import com.massivecraft.massivecore.cmd.req.ReqIsPlayer;
import com.massivecraft.massivecore.ps.PS;
public class CmdFactionsSetCircle extends CmdFactionsSetXRadius
{
// -------------------------------------------- //
// CONSTRUCT
// -------------------------------------------- //
public CmdFactionsSetCircle()
{
// Aliases
this.addAliases("c", "circle");
// Requirements
this.addRequirements(ReqIsPlayer.get());
this.addRequirements(ReqHasPerm.get(Perm.SET_CIRCLE.node));
}
// -------------------------------------------- //
// OVERRIDE
// -------------------------------------------- //
@Override
public Set<PS> getChunks()
{
// Common Startup
final PS chunk = PS.valueOf(me).getChunk(true);
final Set<PS> chunks = new LinkedHashSet<PS>();
Integer radiusZero = this.getRadiusZero();
if (radiusZero == null) return null;
double radius = radiusZero + 1.5; // Tweak ze magic constant to get ze requested behavior.
double radiusSquared = radius * radius;
chunks.add(chunk); // The center should come first for pretty messages
final int xmin = chunk.getChunkX() - radiusZero;
final int xmax = chunk.getChunkX() + radiusZero;
final int zmin = chunk.getChunkZ() - radiusZero;
final int zmax = chunk.getChunkZ() + radiusZero;
for (int x = xmin; x <= xmax; x++)
{
for (int z = zmin; z <= zmax; z++)
{
double dx = x - chunk.getChunkX();
double dz = z - chunk.getChunkZ();
if (dx*dx + dz*dz > radiusSquared) continue;
chunks.add(chunk.withChunkX(x).withChunkZ(z));
}
}
return chunks;
}
}

View File

@ -0,0 +1,107 @@
package com.massivecraft.factions.cmd;
import java.util.LinkedHashSet;
import java.util.Set;
import com.massivecraft.factions.Perm;
import com.massivecraft.factions.entity.BoardColl;
import com.massivecraft.factions.entity.Faction;
import com.massivecraft.factions.entity.MConf;
import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
import com.massivecraft.massivecore.cmd.req.ReqIsPlayer;
import com.massivecraft.massivecore.ps.PS;
import com.massivecraft.massivecore.util.MUtil;
public class CmdFactionsSetFill extends CmdFactionsSetXSimple
{
// -------------------------------------------- //
// CONSTRUCT
// -------------------------------------------- //
public CmdFactionsSetFill()
{
// Aliases
this.addAliases("f", "fill");
// Requirements
this.addRequirements(ReqIsPlayer.get());
this.addRequirements(ReqHasPerm.get(Perm.SET_FILL.node));
}
// -------------------------------------------- //
// OVERRIDE
// -------------------------------------------- //
@Override
public Set<PS> getChunks()
{
// Common Startup
final PS chunk = PS.valueOf(me).getChunk(true);
final Set<PS> chunks = new LinkedHashSet<PS>();
// What faction (aka color) resides there?
// NOTE: Wilderness/None is valid.
final Faction color = BoardColl.get().getFactionAt(chunk);
// We start where we are!
chunks.add(chunk);
// Flood!
int max = MConf.get().setFillMax;
floodSearch(chunks, color, max);
// Limit Reached?
if (chunks.size() >= max)
{
msg("<b>Fill limit of <h>%d <b>reached.", max);
return null;
}
// OK!
return chunks;
}
// -------------------------------------------- //
// FLOOD FILL
// -------------------------------------------- //
public static void floodSearch(Set<PS> set, Faction color, int max)
{
// Clean
if (set == null) throw new NullPointerException("set");
if (color == null) throw new NullPointerException("color");
// Expand
Set<PS> expansion = new LinkedHashSet<PS>();
for (PS chunk : set)
{
Set<PS> neighbours = MUtil.set(
chunk.withChunkX(chunk.getChunkX() + 1),
chunk.withChunkX(chunk.getChunkX() - 1),
chunk.withChunkZ(chunk.getChunkZ() + 1),
chunk.withChunkZ(chunk.getChunkZ() - 1)
);
for (PS neighbour : neighbours)
{
if (set.contains(neighbour)) continue;
Faction faction = BoardColl.get().getFactionAt(neighbour);
if (faction == null) continue;
if (faction != color) continue;
expansion.add(neighbour);
}
}
set.addAll(expansion);
// No Expansion?
if (expansion.isEmpty()) return;
// Reached Max?
if (set.size() >= max) return;
// Recurse
floodSearch(set, color, max);
}
}

View File

@ -1,30 +1,28 @@
package com.massivecraft.factions.cmd; package com.massivecraft.factions.cmd;
import java.util.Collections; import java.util.Collections;
import java.util.Set;
import com.massivecraft.factions.cmd.req.ReqHasFaction;
import com.massivecraft.factions.entity.Faction;
import com.massivecraft.factions.entity.FactionColl;
import com.massivecraft.factions.Perm; import com.massivecraft.factions.Perm;
import com.massivecraft.massivecore.cmd.req.ReqHasPerm; import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
import com.massivecraft.massivecore.cmd.req.ReqIsPlayer; import com.massivecraft.massivecore.cmd.req.ReqIsPlayer;
import com.massivecraft.massivecore.ps.PS; import com.massivecraft.massivecore.ps.PS;
public class CmdFactionsUnclaim extends FactionsCommand
public class CmdFactionsSetOne extends CmdFactionsSetXSimple
{ {
// -------------------------------------------- // // -------------------------------------------- //
// CONSTRUCT // CONSTRUCT
// -------------------------------------------- // // -------------------------------------------- //
public CmdFactionsUnclaim() public CmdFactionsSetOne()
{ {
// Aliases // Aliases
this.addAliases("unclaim"); this.addAliases("o", "one");
// Requirements // Requirements
this.addRequirements(ReqHasPerm.get(Perm.UNCLAIM.node));
this.addRequirements(ReqHasFaction.get());
this.addRequirements(ReqIsPlayer.get()); this.addRequirements(ReqIsPlayer.get());
this.addRequirements(ReqHasPerm.get(Perm.SET_ONE.node));
} }
// -------------------------------------------- // // -------------------------------------------- //
@ -32,14 +30,11 @@ public class CmdFactionsUnclaim extends FactionsCommand
// -------------------------------------------- // // -------------------------------------------- //
@Override @Override
public void perform() public Set<PS> getChunks()
{ {
// Args final PS chunk = PS.valueOf(me).getChunk(true);
PS chunk = PS.valueOf(me).getChunk(true); final Set<PS> chunks = Collections.singleton(chunk);
Faction newFaction = FactionColl.get().getNone(); return chunks;
// Apply
if (msender.tryClaim(newFaction, Collections.singletonList(chunk))) return;
} }
} }

View File

@ -0,0 +1,60 @@
package com.massivecraft.factions.cmd;
import java.util.LinkedHashSet;
import java.util.Set;
import com.massivecraft.factions.Perm;
import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
import com.massivecraft.massivecore.cmd.req.ReqIsPlayer;
import com.massivecraft.massivecore.ps.PS;
public class CmdFactionsSetSquare extends CmdFactionsSetXRadius
{
// -------------------------------------------- //
// CONSTRUCT
// -------------------------------------------- //
public CmdFactionsSetSquare()
{
// Aliases
this.addAliases("s", "square");
// Requirements
this.addRequirements(ReqIsPlayer.get());
this.addRequirements(ReqHasPerm.get(Perm.SET_SQUARE.node));
}
// -------------------------------------------- //
// OVERRIDE
// -------------------------------------------- //
@Override
public Set<PS> getChunks()
{
// Common Startup
final PS chunk = PS.valueOf(me).getChunk(true);
final Set<PS> chunks = new LinkedHashSet<PS>();
Integer radiusZero = this.getRadiusZero();
if (radiusZero == null) return null;
chunks.add(chunk); // The center should come first for pretty messages
final int xmin = chunk.getChunkX() - radiusZero;
final int xmax = chunk.getChunkX() + radiusZero;
final int zmin = chunk.getChunkZ() - radiusZero;
final int zmax = chunk.getChunkZ() + radiusZero;
for (int x = xmin; x <= xmax; x++)
{
for (int z = zmin; z <= zmax; z++)
{
chunks.add(chunk.withChunkX(x).withChunkZ(z));
}
}
return chunks;
}
}

View File

@ -0,0 +1,76 @@
package com.massivecraft.factions.cmd;
import java.util.Set;
import com.massivecraft.factions.Perm;
import com.massivecraft.factions.entity.Board;
import com.massivecraft.factions.entity.BoardColl;
import com.massivecraft.factions.entity.Faction;
import com.massivecraft.massivecore.cmd.arg.ARWorldId;
import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
import com.massivecraft.massivecore.ps.PS;
import com.massivecraft.massivecore.util.MUtil;
public class CmdFactionsSetTransfer extends CmdFactionsSetXTransfer
{
// -------------------------------------------- //
// CONSTRUCT
// -------------------------------------------- //
public CmdFactionsSetTransfer()
{
// Aliases
this.addAliases("t", "transfer");
// Requirements
this.addRequirements(ReqHasPerm.get(Perm.SET_TRANSFER.node));
}
// -------------------------------------------- //
// OVERRIDE
// -------------------------------------------- //
@Override
public Set<PS> getChunks()
{
// Create Ret
Set<PS> chunks = null;
// Args
Faction oldFaction = this.getOldFaction();
if (oldFaction == null) return null;
if (MUtil.list("a", "al", "all").contains(this.arg(0).toLowerCase()))
{
chunks = BoardColl.get().getChunks(oldFaction);
}
else
{
String worldId = null;
if (MUtil.list("map").contains(this.arg(0).toLowerCase()))
{
if (me != null)
{
worldId = me.getWorld().getName();
}
else
{
msg("<b>You must specify which map from console.");
return null;
}
}
else
{
worldId = this.arg(0, ARWorldId.get());
if (worldId == null) return null;
}
Board board = BoardColl.get().get(worldId);
chunks = board.getChunks(oldFaction);
}
// Return Ret
return chunks;
}
}

View File

@ -0,0 +1,47 @@
package com.massivecraft.factions.cmd;
import java.util.Set;
import com.massivecraft.factions.cmd.arg.ARFaction;
import com.massivecraft.factions.entity.Faction;
import com.massivecraft.massivecore.ps.PS;
public abstract class CmdFactionsSetX extends FactionsCommand
{
// -------------------------------------------- //
// OVERRIDE
// -------------------------------------------- //
@Override
public void perform()
{
// Args
final Faction newFaction = this.getNewFaction();
if (newFaction == null) return;
final Set<PS> chunks = this.getChunks();
if (chunks == null) return;
// Apply / Inform
msender.tryClaim(newFaction, chunks);
}
// -------------------------------------------- //
// ABSTRACT
// -------------------------------------------- //
public abstract int getFactionArgIndex();
public abstract Set<PS> getChunks();
// -------------------------------------------- //
// EXTRAS
// -------------------------------------------- //
public Faction getNewFaction()
{
return this.arg(this.getFactionArgIndex(), ARFaction.get(), msenderFaction);
}
}

View File

@ -0,0 +1,63 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.entity.MConf;
import com.massivecraft.massivecore.cmd.arg.ARInteger;
public abstract class CmdFactionsSetXRadius extends CmdFactionsSetX
{
// -------------------------------------------- //
// CONSTRUCT
// -------------------------------------------- //
public CmdFactionsSetXRadius()
{
// Args
this.addOptionalArg("radius", "1");
this.addOptionalArg("faction", "you");
}
// -------------------------------------------- //
// OVERRIDE
// -------------------------------------------- //
@Override
public int getFactionArgIndex()
{
return 1;
}
// -------------------------------------------- //
// EXTRAS
// -------------------------------------------- //
public Integer getRadius()
{
Integer radius = this.arg(0, ARInteger.get(), 1);
if (radius == null) return radius;
// Radius Claim Min
if (radius < 1)
{
msg("<b>If you specify a radius, it must be at least 1.");
return null;
}
// Radius Claim Max
if (radius > MConf.get().setRadiusMax && ! msender.isUsingAdminMode())
{
msg("<b>The maximum radius allowed is <h>%s<b>.", MConf.get().setRadiusMax);
return null;
}
return radius;
}
public Integer getRadiusZero()
{
Integer ret = this.getRadius();
if (ret == null) return ret;
return ret - 1;
}
}

View File

@ -0,0 +1,25 @@
package com.massivecraft.factions.cmd;
public abstract class CmdFactionsSetXSimple extends CmdFactionsSetX
{
// -------------------------------------------- //
// CONSTRUCT
// -------------------------------------------- //
public CmdFactionsSetXSimple()
{
// Args
this.addOptionalArg("faction", "you");
}
// -------------------------------------------- //
// OVERRIDE
// -------------------------------------------- //
@Override
public int getFactionArgIndex()
{
return 0;
}
}

View File

@ -0,0 +1,39 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.cmd.arg.ARFaction;
import com.massivecraft.factions.entity.Faction;
public abstract class CmdFactionsSetXTransfer extends CmdFactionsSetX
{
// -------------------------------------------- //
// CONSTRUCT
// -------------------------------------------- //
public CmdFactionsSetXTransfer()
{
// Args
this.addRequiredArg("all|map");
this.addRequiredArg("old");
this.addRequiredArg("new");
}
// -------------------------------------------- //
// OVERRIDE
// -------------------------------------------- //
@Override
public int getFactionArgIndex()
{
return 2;
}
// -------------------------------------------- //
// EXTRAS
// -------------------------------------------- //
public Faction getOldFaction()
{
return this.arg(1, ARFaction.get());
}
}

View File

@ -1,81 +0,0 @@
package com.massivecraft.factions.cmd;
import java.util.Set;
import com.massivecraft.factions.Perm;
import com.massivecraft.factions.Rel;
import com.massivecraft.factions.cmd.req.ReqHasFaction;
import com.massivecraft.factions.cmd.req.ReqRoleIsAtLeast;
import com.massivecraft.factions.entity.BoardColl;
import com.massivecraft.factions.entity.Faction;
import com.massivecraft.factions.entity.FactionColl;
import com.massivecraft.factions.entity.MPerm;
import com.massivecraft.massivecore.cmd.req.ReqHasPerm;
import com.massivecraft.massivecore.ps.PS;
public class CmdFactionsUnclaimall extends FactionsCommand
{
// -------------------------------------------- //
// CONSTRUCT
// -------------------------------------------- //
public CmdFactionsUnclaimall()
{
// Aliases
this.addAliases("unclaimall");
// Requirements
this.addRequirements(ReqHasPerm.get(Perm.UNCLAIM_ALL.node));
this.addRequirements(ReqHasFaction.get());
this.addRequirements(ReqRoleIsAtLeast.get(Rel.OFFICER));
}
// -------------------------------------------- //
// OVERRIDE
// -------------------------------------------- //
@Override
public void perform()
{
// Args
Faction faction = msenderFaction;
Faction newFaction = FactionColl.get().getNone();
// MPerm
if ( ! MPerm.getPermTerritory().has(msender, faction, true)) return;
// Apply
Set<PS> chunks = BoardColl.get().getChunks(faction);
msender.tryClaim(newFaction, chunks);
/*
int countTotal = chunks.size();
int countSuccess = 0;
int countFail = 0;
for (PS chunk : chunks)
{
EventFactionsChunksChange event = new EventFactionsChunksChange(sender, chunk, newFaction);
event.run();
if (event.isCancelled())
{
countFail++;
}
else
{
countSuccess++;
BoardColl.get().setFactionAt(chunk, newFaction);
}
}
// Inform
msenderFaction.msg("%s<i> unclaimed <h>%d <i>of your <h>%d <i>faction land. You now have <h>%d <i>land claimed.", msender.describeTo(msenderFaction, true), countSuccess, countTotal, countFail);
// Log
if (MConf.get().logLandUnclaims)
{
Factions.get().log(msender.getName()+" unclaimed everything for the faction: "+msenderFaction.getName());
}*/
}
}

View File

@ -148,11 +148,11 @@ public class MConf extends Entity<MConf>
public boolean factionNameForceUpperCase = false; public boolean factionNameForceUpperCase = false;
// -------------------------------------------- // // -------------------------------------------- //
// CLAIM LIMITS // SET LIMITS
// -------------------------------------------- // // -------------------------------------------- //
// the maximum radius allowed when using the claim command. public int setRadiusMax = 5;
public int radiusClaimRadiusLimit = 5; public int setFillMax = 1000;
// -------------------------------------------- // // -------------------------------------------- //
// CLAIMS // CLAIMS

View File

@ -15,9 +15,6 @@ permissions:
factions.access.player: {description: grant player access, with the proper fperm, default: false} factions.access.player: {description: grant player access, with the proper fperm, default: false}
factions.access.view: {description: view access, default: false} factions.access.view: {description: view access, default: false}
factions.admin: {description: enable adminmode, default: false} factions.admin: {description: enable adminmode, default: false}
factions.autoclaim: {description: autoclaim when walking, default: false}
factions.claim: {description: claim land where you stand, default: false}
factions.claim.radius: {description: claim land with radius, default: false}
factions.create: {description: create new faction, default: false} factions.create: {description: create new faction, default: false}
factions.demote: {description: demote lesser members in your faction, default: false} factions.demote: {description: demote lesser members in your faction, default: false}
factions.description: {description: change faction description, default: false} factions.description: {description: change faction description, default: false}
@ -54,12 +51,17 @@ permissions:
factions.relation: {description: set relation wish to another faction, default: false} factions.relation: {description: set relation wish to another faction, default: false}
factions.seechunk: {description: see the chunk you stand in, default: false} factions.seechunk: {description: see the chunk you stand in, default: false}
factions.seechunkold: {description: see the chunk you stand in, default: false} factions.seechunkold: {description: see the chunk you stand in, default: false}
factions.set: {description: set faction territory, default: false}
factions.set.one: {description: set faction for a single chunk, default: false}
factions.set.auto: {description: set faction as you walk around, default: false}
factions.set.fill: {description: set faction by filling, default: false}
factions.set.square: {description: set faction by square and radius, default: false}
factions.set.circle: {description: set faction by circle and radius, default: false}
factions.set.transfer: {description: set faction by transfer, default: false}
factions.sethome: {description: set the faction home, default: false} factions.sethome: {description: set the faction home, default: false}
factions.name: {description: set faction name, default: false} factions.name: {description: set faction name, default: false}
factions.title: {description: set player title, default: false} factions.title: {description: set player title, default: false}
factions.title.color: {description: set player title with color, default: false} factions.title.color: {description: set player title with color, default: false}
factions.unclaim: {description: unclaim land where you stand, default: false}
factions.unclaimall: {description: unclaim all land, default: false}
factions.unsethome: {description: unset faction home, default: false} factions.unsethome: {description: unset faction home, default: false}
factions.version: {description: see plugin version, default: false} factions.version: {description: see plugin version, default: false}
# -------------------------------------------- # # -------------------------------------------- #
@ -72,9 +74,6 @@ permissions:
factions.access.player: true factions.access.player: true
factions.access.view: true factions.access.view: true
factions.admin: true factions.admin: true
factions.autoclaim: true
factions.claim: true
factions.claim.radius: true
factions.create: true factions.create: true
factions.demote: true factions.demote: true
factions.description: true factions.description: true
@ -111,12 +110,17 @@ permissions:
factions.relation: true factions.relation: true
factions.seechunk: true factions.seechunk: true
factions.seechunkold: true factions.seechunkold: true
factions.set: true
factions.set.one: true
factions.set.auto: true
factions.set.fill: true
factions.set.square: true
factions.set.circle: true
factions.set.transfer: true
factions.sethome: true factions.sethome: true
factions.name: true factions.name: true
factions.title: true factions.title: true
factions.title.color: true factions.title.color: true
factions.unclaim: true
factions.unclaimall: true
factions.unsethome: true factions.unsethome: true
factions.version: true factions.version: true
# -------------------------------------------- # # -------------------------------------------- #
@ -152,9 +156,6 @@ permissions:
factions.access.faction: true factions.access.faction: true
factions.access.player: true factions.access.player: true
factions.access.view: true factions.access.view: true
factions.autoclaim: true
factions.claim: true
factions.claim.radius: true
factions.create: true factions.create: true
factions.demote: true factions.demote: true
factions.description: true factions.description: true
@ -186,12 +187,17 @@ permissions:
factions.relation: true factions.relation: true
factions.seechunk: true factions.seechunk: true
factions.seechunkold: true factions.seechunkold: true
factions.set: true
factions.set.one: true
factions.set.auto: true
factions.set.fill: true
factions.set.square: true
factions.set.circle: true
factions.set.transfer: true
factions.sethome: true factions.sethome: true
factions.name: true factions.name: true
factions.title: true factions.title: true
factions.title.color: true factions.title.color: true
factions.unclaim: true
factions.unclaimall: true
factions.unsethome: true factions.unsethome: true
factions.version: true factions.version: true
factions.kit.default: factions.kit.default: