Saber-Factions/src/main/java/com/massivecraft/factions/cmd/CmdClaim.java

71 lines
2.0 KiB
Java
Raw Normal View History

2011-10-09 21:57:43 +02:00
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FLocation;
2014-04-04 20:55:21 +02:00
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.util.SpiralTask;
2014-04-04 20:55:21 +02:00
public class CmdClaim extends FCommand {
public CmdClaim() {
super();
this.aliases.add("claim");
//this.requiredArgs.add("");
this.optionalArgs.put("faction", "your");
this.optionalArgs.put("radius", "1");
this.permission = Permission.CLAIM.node;
this.disableOnLock = true;
senderMustBePlayer = true;
senderMustBeMember = false;
senderMustBeModerator = false;
senderMustBeAdmin = false;
}
@Override
public void perform() {
// Read and validate input
final Faction forFaction = this.argAsFaction(0, myFaction);
int radius = this.argAsInt(1, 1);
if (radius < 1) {
msg("<b>If you specify a radius, it must be at least 1.");
return;
}
2014-04-04 20:55:21 +02:00
if (radius < 2) {
// single chunk
fme.attemptClaim(forFaction, me.getLocation(), true);
2014-07-01 21:49:42 +02:00
}
else {
2014-04-04 20:55:21 +02:00
// radius claim
if (!Permission.CLAIM_RADIUS.has(sender, false)) {
msg("<b>You do not have permission to claim in a radius.");
return;
}
2014-04-04 20:55:21 +02:00
new SpiralTask(new FLocation(me), radius) {
private int failCount = 0;
private final int limit = Conf.radiusClaimFailureLimit - 1;
2014-04-04 20:55:21 +02:00
@Override
public boolean work() {
boolean success = fme.attemptClaim(forFaction, this.currentLocation(), true);
2014-07-01 21:49:42 +02:00
if (success) { failCount = 0; }
2014-04-04 20:55:21 +02:00
else if (!success && failCount++ >= limit) {
this.stop();
return false;
}
2014-04-04 20:55:21 +02:00
return true;
}
};
}
}
}