Added auto claiming of mega plots.

This commit is contained in:
boy0001 2014-09-29 22:07:38 +10:00
parent fe035b97f5
commit e9a3b3cb9a

View File

@ -32,57 +32,112 @@ public class Auto extends SubCommand {
@Override @Override
public boolean execute(Player plr, String... args) { public boolean execute(Player plr, String... args) {
World world; World world;
int size_x = 1;
int size_z = 1;
if (PlotMain.getPlotWorlds().length == 1) { if (PlotMain.getPlotWorlds().length == 1) {
world = Bukkit.getWorld(PlotMain.getPlotWorlds()[0]); world = Bukkit.getWorld(PlotMain.getPlotWorlds()[0]);
} else { } else {
if (PlotMain.isPlotWorld(plr.getWorld())) { if (PlotMain.isPlotWorld(plr.getWorld())) {
world = plr.getWorld(); world = plr.getWorld();
} else { } else {
if (args.length == 1) { PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT_WORLD);
world = Bukkit.getWorld(args[0]); return false;
if (world != null) {
if (!PlotMain.isPlotWorld(world)) {
PlayerFunctions.sendMessage(plr, C.NOT_VALID_PLOT_WORLD);
return true;
}
} else {
PlayerFunctions.sendMessage(plr, C.NOT_VALID_WORLD);
return true;
}
} else {
PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT_WORLD);
return true;
}
} }
} }
if (args.length == 1) {
if (PlotMain.hasPermission(plr, "plots.auto.mega")) {
try {
String[] split = args[0].split(",");
size_x = Integer.parseInt(split[0]);
size_z = Integer.parseInt(split[1]);
if (size_x < 1 || size_z < 1) {
PlayerFunctions.sendMessage(plr, "&cError: size<=0");
}
if (size_x > 4 || size_z > 4) {
PlayerFunctions.sendMessage(plr, "&cError: size>4");
}
}
catch (Exception e) {
PlayerFunctions.sendMessage(plr, "&cError: Invalid size (X,Y)");
return false;
}
}
else {
PlayerFunctions.sendMessage(plr, C.NO_PERMISSION);
return false;
}
}
if (PlayerFunctions.getPlayerPlotCount(world, plr) >= PlayerFunctions.getAllowedPlots(plr)) { if (PlayerFunctions.getPlayerPlotCount(world, plr) >= PlayerFunctions.getAllowedPlots(plr)) {
PlayerFunctions.sendMessage(plr, C.CANT_CLAIM_MORE_PLOTS); PlayerFunctions.sendMessage(plr, C.CANT_CLAIM_MORE_PLOTS);
return true; return false;
} }
boolean br = false; boolean br = false;
int x = 0, z = 0, q = 100; int x = 0, z = 0, q = 100;
PlotId id; PlotId id;
while (!br) { if (size_x == 1 && size_z == 1) {
id = new PlotId(x, z); while (!br) {
if (PlotHelper.getPlot(world, id).owner == null) { id = new PlotId(x, z);
Plot plot = PlotHelper.getPlot(world, id); if (PlotHelper.getPlot(world, id).owner == null) {
boolean result = Claim.claimPlot(plr, plot, true); Plot plot = PlotHelper.getPlot(world, id);
br = !result; boolean result = Claim.claimPlot(plr, plot, true);
br = !result;
}
if ((z < q) && ((z - x) < q)) {
z++;
} else if (x < q) {
x++;
z = q - 100;
} else {
q += 100;
x = q;
z = q;
}
} }
if ((z < q) && ((z - x) < q)) { }
z++; else {
} else if (x < q) { while (!br) {
x++; PlotId start = new PlotId(x, z);
z = q - 100; PlotId end = new PlotId(x+size_x-1, z+size_z-1);
} else { if (isUnowned(world, start, end)) {
q += 100;
x = q; // TODO claim event
z = q;
for (int i = start.x; i <= end.x; i++) {
for (int j = start.y; j <= end.y; j++) {
Plot plot = PlotHelper.getPlot(world, new PlotId(i,j));
boolean teleport = (i == end.x && j == end.y) ? true : false;
Claim.claimPlot(plr, plot, teleport);
}
}
PlotHelper.mergePlots(world, PlayerFunctions.getPlotSelectionIds(world, start, end));
br = true;
}
if ((z < q) && ((z - x) < q)) {
z+=size_z;
} else if (x < q) {
x+=size_x;
z = q - 100;
} else {
q += 100;
x = q;
z = q;
}
}
}
return true;
}
public boolean isUnowned(World world, PlotId pos1, PlotId pos2) {
for (int x = pos1.x; x <= pos2.x; x++) {
for (int y = pos1.y; y <= pos2.y; y++) {
PlotId id = new PlotId(x,y);
if (PlotMain.getPlots(world).get(id)!=null) {
if (PlotMain.getPlots(world).get(id).owner != null) {
return false;
}
}
} }
} }
return true; return true;
} }
} }