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

72 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;
import com.massivecraft.factions.zcore.util.TL;
2014-04-04 20:55:21 +02:00
public class CmdClaim extends FCommand {
public CmdClaim() {
2014-07-01 22:10:18 +02:00
super();
this.aliases.add("claim");
2014-04-04 20:55:21 +02:00
//this.requiredArgs.add("");
2014-07-01 22:10:18 +02:00
this.optionalArgs.put("faction", "your");
this.optionalArgs.put("radius", "1");
2014-04-04 20:55:21 +02:00
2014-07-01 22:10:18 +02:00
this.permission = Permission.CLAIM.node;
this.disableOnLock = true;
2014-04-04 20:55:21 +02:00
2014-07-01 22:10:18 +02:00
senderMustBePlayer = true;
senderMustBeMember = false;
senderMustBeModerator = false;
senderMustBeAdmin = false;
2014-04-04 20:55:21 +02:00
}
@Override
public void perform() {
// Read and validate input
2014-07-01 22:10:18 +02:00
final Faction forFaction = this.argAsFaction(0, myFaction);
int radius = this.argAsInt(1, 1);
2014-04-04 20:55:21 +02:00
if (radius < 1) {
msg(TL.COMMAND_CLAIM_INVALIDRADIUS);
2014-07-01 22:10:18 +02:00
return;
2014-04-04 20:55:21 +02:00
}
2014-04-04 20:55:21 +02:00
if (radius < 2) {
// single chunk
fme.attemptClaim(forFaction, me.getLocation(), true);
2014-07-01 21:52:40 +02:00
} else {
2014-04-04 20:55:21 +02:00
// radius claim
if (!Permission.CLAIM_RADIUS.has(sender, false)) {
msg(TL.COMMAND_CLAIM_DENIED);
2014-07-01 22:10:18 +02:00
return;
2014-04-04 20:55:21 +02:00
}
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 22:10:18 +02:00
if (success) {
failCount = 0;
} else if (!success && failCount++ >= limit) {
this.stop();
return false;
2014-04-04 20:55:21 +02:00
}
2014-04-04 20:55:21 +02:00
return true;
}
};
}
}
}