diff --git a/PlotSquared/src/com/intellectualcrafters/plot/commands/Auto.java b/PlotSquared/src/com/intellectualcrafters/plot/commands/Auto.java index 425a90896..fe9fe7684 100644 --- a/PlotSquared/src/com/intellectualcrafters/plot/commands/Auto.java +++ b/PlotSquared/src/com/intellectualcrafters/plot/commands/Auto.java @@ -32,57 +32,112 @@ public class Auto extends SubCommand { @Override public boolean execute(Player plr, String... args) { World world; + int size_x = 1; + int size_z = 1; if (PlotMain.getPlotWorlds().length == 1) { world = Bukkit.getWorld(PlotMain.getPlotWorlds()[0]); } else { if (PlotMain.isPlotWorld(plr.getWorld())) { world = plr.getWorld(); } else { - if (args.length == 1) { - world = Bukkit.getWorld(args[0]); - 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; - } + PlayerFunctions.sendMessage(plr, C.NOT_IN_PLOT_WORLD); + return false; } } + 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)) { PlayerFunctions.sendMessage(plr, C.CANT_CLAIM_MORE_PLOTS); - return true; + return false; } boolean br = false; int x = 0, z = 0, q = 100; PlotId id; - while (!br) { - id = new PlotId(x, z); - if (PlotHelper.getPlot(world, id).owner == null) { - Plot plot = PlotHelper.getPlot(world, id); - boolean result = Claim.claimPlot(plr, plot, true); - br = !result; + if (size_x == 1 && size_z == 1) { + while (!br) { + id = new PlotId(x, z); + if (PlotHelper.getPlot(world, id).owner == null) { + Plot plot = PlotHelper.getPlot(world, id); + 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 if (x < q) { - x++; - z = q - 100; - } else { - q += 100; - x = q; - z = q; + } + else { + while (!br) { + PlotId start = new PlotId(x, z); + PlotId end = new PlotId(x+size_x-1, z+size_z-1); + if (isUnowned(world, start, end)) { + + // TODO claim event + + 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; } - }