From be3d7ef11d7a4189843705b91c439a32eb7612fd Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Fri, 6 Aug 2021 16:52:15 +0200 Subject: [PATCH 01/14] Upgrade pregen command. PregenTask now takes width & height ins o radius --- .../volmit/iris/core/command/CommandIris.java | 1 + .../command/pregen/CommandIrisPregen.java | 65 ++++++ .../pregen/CommandIrisPregenCreate.java | 174 ++++++++++++++++ .../command/pregen/CommandIrisPregenStop.java | 43 ++++ .../pregen/CommandIrisPregenToggle.java | 37 ++++ .../core/command/world/CommandIrisPregen.java | 185 ------------------ .../volmit/iris/core/gui/PregeneratorJob.java | 5 +- .../iris/core/pregenerator/PregenTask.java | 9 +- 8 files changed, 329 insertions(+), 190 deletions(-) create mode 100644 src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregen.java create mode 100644 src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java create mode 100644 src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenStop.java create mode 100644 src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenToggle.java delete mode 100644 src/main/java/com/volmit/iris/core/command/world/CommandIrisPregen.java diff --git a/src/main/java/com/volmit/iris/core/command/CommandIris.java b/src/main/java/com/volmit/iris/core/command/CommandIris.java index dfdee227d..49edcc0f7 100644 --- a/src/main/java/com/volmit/iris/core/command/CommandIris.java +++ b/src/main/java/com/volmit/iris/core/command/CommandIris.java @@ -21,6 +21,7 @@ package com.volmit.iris.core.command; import com.volmit.iris.Iris; import com.volmit.iris.core.command.jigsaw.CommandIrisJigsaw; import com.volmit.iris.core.command.object.CommandIrisObject; +import com.volmit.iris.core.command.pregen.CommandIrisPregen; import com.volmit.iris.core.command.studio.CommandIrisStudio; import com.volmit.iris.core.command.what.CommandIrisWhat; import com.volmit.iris.core.command.world.*; diff --git a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregen.java b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregen.java new file mode 100644 index 000000000..6b85af100 --- /dev/null +++ b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregen.java @@ -0,0 +1,65 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.core.command.pregen; + +import com.volmit.iris.Iris; +import com.volmit.iris.core.tools.IrisToolbelt; +import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.plugin.Command; +import com.volmit.iris.util.plugin.MortarCommand; +import com.volmit.iris.util.plugin.VolmitSender; + +public class CommandIrisPregen extends MortarCommand { + @Command + private CommandIrisPregenCreate start; + + @Command + private CommandIrisPregenStop stop; + + @Command + private CommandIrisPregenToggle toggle; + + public CommandIrisPregen() { + super("pregen", "preg", "p"); + requiresPermission(Iris.perm); + setCategory("Pregen"); + setDescription("Pregeneration Commands"); + } + + @Override + public void addTabOptions(VolmitSender sender, String[] args, KList list) { + + } + + @Override + public boolean handle(VolmitSender sender, String[] args) { + if (!IrisToolbelt.isIrisWorld(sender.player().getWorld())){ + sender.sendMessage("Pregen only works in Iris worlds!"); + } + + sender.sendMessage("Iris Pregen Commands:"); + printHelp(sender); + return true; + } + + @Override + protected String getArgsUsage() { + return "[subcommand]"; + } +} diff --git a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java new file mode 100644 index 000000000..24357970b --- /dev/null +++ b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java @@ -0,0 +1,174 @@ +package com.volmit.iris.core.command.pregen; + +import com.volmit.iris.Iris; +import com.volmit.iris.core.gui.PregeneratorJob; +import com.volmit.iris.core.pregenerator.PregenTask; +import com.volmit.iris.core.pregenerator.methods.HybridPregenMethod; +import com.volmit.iris.core.tools.IrisToolbelt; +import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.math.Position2; +import com.volmit.iris.util.plugin.MortarCommand; +import com.volmit.iris.util.plugin.VolmitSender; +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.checkerframework.checker.units.qual.K; + +import java.util.Arrays; + +public class CommandIrisPregenCreate extends MortarCommand { + + public CommandIrisPregenCreate() { + super("create", "c", "new", "+"); + requiresPermission(Iris.perm); + setCategory("Pregen"); + setDescription("Create a new pregeneration task"); + } + + @Override + public void addTabOptions(VolmitSender sender, String[] args, KList list) { + + list.add("5000"); + list.add("size=5000 world=IrisWorld x=500 z=-1000"); + list.add("5000 world=IrisWorld x=500 z=-1000"); + list.add("world=IrisWorld x=500 z=-1000"); + for (World w : Bukkit.getServer().getWorlds()) { + list.add(w.getName()); + } + } + + @Override + protected String getArgsUsage() { + return null; + } + + @Override + public boolean handle(VolmitSender sender, String[] args) { + + if (PregeneratorJob.getInstance() != null) { + sender.sendMessage("Pregeneration task already ongoing. You can stop it with /ir p stop"); + return true; + } + + World world = null; + int width = -1; + int height = -1; + int x = 0; + int z = 0; + + KList failed = new KList<>(); + for (String a : args) { + if (a.contains("=")) { + String pre = a.split("=")[0]; + String val = a.split("=")[1]; + if (pre.equals("world")){ + world = Bukkit.getWorld(val); + } else if (!isVal(val)){ + sender.sendMessage("Parameters other than `world=` require a number (+ c|chunk|r|region|k), given: '" + a + "' is invalid"); + } else { + switch (pre) { + case "width" -> width = getVal(val); + case "height" -> height = getVal(val); + case "radius" -> { + width = getVal(val); + height = getVal(val); + } + case "x" -> x = getVal(val); + case "z" -> z = getVal(val); + } + } + } else if (isVal(a)) { + width = getVal(a); + height = getVal(a); + } else { + failed.add(a); + } + } + + if (width == -1 || height == -1){ + sender.sendMessage("Size not specified"); + sender.sendMessage(getArgsUsage()); + } + + world = world == null ? sender.player().getWorld() : world; + + KList details = new KList<>( + "Pregeneration details:", + " - World > " + world.getName(), + " - Width/Height > " + width + "/" + height, + " - Center x,z > " + x + "," + z, + failed.isEmpty() ? "(No failed arguments)" : "FAILED ARGS: " + failed + ); + + + if (pregenerate(world, width, height, x, z)){ + sender.sendMessage("Successfully started pregen"); + } else { + sender.sendMessage("Failed to start pregen. Doublecheck your arguments!"); + } + sender.sendMessage(details.array()); + + return true; + } + + /** + * Pregenerate a + * @param world world with a + * @param width and + * @param height with center + * @param x and + * @param z coords + * @return true if successful + */ + private boolean pregenerate(World world, int width, int height, int x, int z){ + try { + IrisToolbelt.pregenerate(PregenTask + .builder() + .center(new Position2(x, z)) + .width(width >> 9 + 1) + .height(height >> 9 + 1) + .build(), world); + } catch (Throwable e){ + Iris.reportError(e); + return false; + } + return true; + } + + private int getVal(String arg) { + + if (arg.toLowerCase().endsWith("c") || arg.toLowerCase().endsWith("chunks")) { + return Integer.parseInt(arg.toLowerCase().replaceAll("\\Qc\\E", "").replaceAll("\\Qchunks\\E", "")) * 16; + } + + if (arg.toLowerCase().endsWith("r") || arg.toLowerCase().endsWith("regions")) { + return Integer.parseInt(arg.toLowerCase().replaceAll("\\Qr\\E", "").replaceAll("\\Qregions\\E", "")) * 512; + } + + if (arg.toLowerCase().endsWith("k")) { + return Integer.parseInt(arg.toLowerCase().replaceAll("\\Qk\\E", "")) * 1000; + } + + return Integer.parseInt(arg.toLowerCase()); + } + + /** + * Checks if the + * @param arg argument + * @return is valid -> true + */ + private boolean isVal(String arg) { + try { + Integer.parseInt( + arg.toLowerCase() + .replace("chunks", "") + .replace("c", "") + .replace("regions", "") + .replace("r", "") + .replace("k", "") + ); + } catch (NumberFormatException e) { + return false; + } + return true; + } +} diff --git a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenStop.java b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenStop.java new file mode 100644 index 000000000..daa68ef8e --- /dev/null +++ b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenStop.java @@ -0,0 +1,43 @@ +package com.volmit.iris.core.command.pregen; + +import com.volmit.iris.Iris; +import com.volmit.iris.core.gui.PregeneratorJob; +import com.volmit.iris.core.pregenerator.PregenTask; +import com.volmit.iris.core.pregenerator.methods.HybridPregenMethod; +import com.volmit.iris.core.tools.IrisToolbelt; +import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.math.Position2; +import com.volmit.iris.util.plugin.MortarCommand; +import com.volmit.iris.util.plugin.VolmitSender; +import org.bukkit.Bukkit; +import org.bukkit.World; + +public class CommandIrisPregenStop extends MortarCommand { + + public CommandIrisPregenStop() { + super("stop", "s", "x", "close"); + requiresPermission(Iris.perm); + setCategory("Pregen"); + setDescription("Stop an ongoing pregeneration task"); + } + + @Override + public boolean handle(VolmitSender sender, String[] args) { + if (PregeneratorJob.shutdownInstance()){ + sender.sendMessage("Stopped pregeneration task"); + } else { + sender.sendMessage("No active pregeneration tasks to stop"); + } + return true; + } + + @Override + public void addTabOptions(VolmitSender sender, String[] args, KList list) { + + } + + @Override + protected String getArgsUsage() { + return null; + } +} diff --git a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenToggle.java b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenToggle.java new file mode 100644 index 000000000..3406a09fe --- /dev/null +++ b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenToggle.java @@ -0,0 +1,37 @@ +package com.volmit.iris.core.command.pregen; + +import com.volmit.iris.Iris; +import com.volmit.iris.core.gui.PregeneratorJob; +import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.plugin.MortarCommand; +import com.volmit.iris.util.plugin.VolmitSender; + +public class CommandIrisPregenToggle extends MortarCommand { + + public CommandIrisPregenToggle() { + super("toggle", "t", "pause", "continue", "p", "c"); + requiresPermission(Iris.perm); + setCategory("Pregen"); + setDescription("Toggle an ongoing pregeneration task"); + } + + @Override + public boolean handle(VolmitSender sender, String[] args) { + if (PregeneratorJob.pauseResume()){ + sender.sendMessage("Toggled pregeneration task, now: " + (PregeneratorJob.isPaused() ? "Paused" : "Running")); + } else { + sender.sendMessage("No active pregeneration tasks to toggle"); + } + return true; + } + + @Override + public void addTabOptions(VolmitSender sender, String[] args, KList list) { + + } + + @Override + protected String getArgsUsage() { + return null; + } +} diff --git a/src/main/java/com/volmit/iris/core/command/world/CommandIrisPregen.java b/src/main/java/com/volmit/iris/core/command/world/CommandIrisPregen.java deleted file mode 100644 index cd083c332..000000000 --- a/src/main/java/com/volmit/iris/core/command/world/CommandIrisPregen.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Iris is a World Generator for Minecraft Bukkit Servers - * Copyright (c) 2021 Arcane Arts (Volmit Software) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.volmit.iris.core.command.world; - -import com.volmit.iris.Iris; -import com.volmit.iris.core.gui.PregeneratorJob; -import com.volmit.iris.core.pregenerator.PregenTask; -import com.volmit.iris.core.pregenerator.methods.HybridPregenMethod; -import com.volmit.iris.core.tools.IrisToolbelt; -import com.volmit.iris.util.collection.KList; -import com.volmit.iris.util.math.Position2; -import com.volmit.iris.util.plugin.MortarCommand; -import com.volmit.iris.util.plugin.VolmitSender; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.entity.Player; - -import java.awt.*; - -public class CommandIrisPregen extends MortarCommand { - public CommandIrisPregen() { - super("pregen", "preg", "p"); - setDescription( - """ - Pregen this world with optional parameters:\s - '1k' = 1000 * 2 by 1000 * 2 blocks, '1c' = 2 by 2 chunks, and '1r' = 64 by 64 chunks. - If you are using the console or want to pregen a world you're not in: - also specify the name of the world. E.g. /ir pregen 5k world""" - ); - requiresPermission(Iris.perm.studio); - setCategory("Pregen"); - } - - @Override - public void addTabOptions(VolmitSender sender, String[] args, KList list) { - list.add("stop"); - list.add("pause"); - list.add("resume"); - list.add("500"); - list.add("1000"); - list.add("10k"); - list.add("25k"); - list.add("10c"); - list.add("25c"); - list.add("5r"); - list.add("10r"); - for (World w : Bukkit.getServer().getWorlds()) { - list.add(w.getName()); - } - } - - @Override - public boolean handle(VolmitSender sender, String[] args) { - if (args.length == 0) { - sender.sendMessage("/iris pregen "); - return true; - } - - if (args[0].equalsIgnoreCase("stop") || args[0].equalsIgnoreCase("x")) { - if (PregeneratorJob.shutdownInstance()) { - sender.sendMessage("Stopped Pregen. Finishing last region file before shutting down..."); - } else { - sender.sendMessage("No Active Pregens."); - } - return true; - } else if (args[0].equalsIgnoreCase("pause") || args[0].equalsIgnoreCase("resume")) { - if (PregeneratorJob.getInstance() != null) { - PregeneratorJob.pauseResume(); - - if (PregeneratorJob.isPaused()) { - sender.sendMessage("Pregen Paused"); - } else { - sender.sendMessage("Pregen Resumed"); - } - } else { - sender.sendMessage("No Active Pregens"); - } - - return true; - } else if (sender.isPlayer()) { - Player p = sender.player(); - World world; - if (args.length != 2) { - world = p.getWorld(); - } else { - try { - world = Bukkit.getWorld(args[1]); - } catch (Exception e) { - Iris.reportError(e); - sender.sendMessage("Could not find specified world"); - sender.sendMessage("Please doublecheck your command. E.g. /ir pregen 5k world"); - return true; - } - } - try { - IrisToolbelt.pregenerate(PregenTask - .builder() - .center(new Position2(0, 0)) - .radius(((getVal(args[0]) >> 4) >> 5) + 1) - .build(), world); - } catch (NumberFormatException e) { - Iris.reportError(e); - sender.sendMessage("Invalid argument in command"); - return true; - } catch (NullPointerException e) { - Iris.reportError(e); - e.printStackTrace(); - sender.sendMessage("No radius specified (check error in console)"); - } catch (HeadlessException e) { - Iris.reportError(e); - sender.sendMessage("If you are seeing this and are using a hosted server, please turn off 'useServerLaunchedGUIs' in the settings"); - } - - return true; - } else { - if (args.length < 1) { - sender.sendMessage("Please specify the radius of the pregen and the name of the world. E.g. /ir pregen 5k world"); - return true; - } - if (args.length < 2) { - sender.sendMessage("Please specify the name of the world after the command. E.g. /ir pregen 5k world"); - return true; - } - World world = Bukkit.getWorld(args[1]); - try { - new PregeneratorJob(PregenTask - .builder() - .center(new Position2(0, 0)) - .radius(((getVal(args[0]) >> 4) >> 5) + 1) - .build(), - new HybridPregenMethod(world, Runtime.getRuntime().availableProcessors())); - } catch (NumberFormatException e) { - Iris.reportError(e); - sender.sendMessage("Invalid argument in command"); - return true; - } catch (NullPointerException e) { - Iris.reportError(e); - sender.sendMessage("Not all required parameters specified"); - } catch (HeadlessException e) { - Iris.reportError(e); - sender.sendMessage("If you are seeing this and are using a hosted server, please turn off 'useServerLaunchedGUIs' in the settings"); - } - - return true; - } - } - - private int getVal(String arg) { - - if (arg.toLowerCase().endsWith("c") || arg.toLowerCase().endsWith("chunks")) { - return Integer.parseInt(arg.toLowerCase().replaceAll("\\Qc\\E", "").replaceAll("\\Qchunks\\E", "")) * 16; - } - - if (arg.toLowerCase().endsWith("r") || arg.toLowerCase().endsWith("regions")) { - return Integer.parseInt(arg.toLowerCase().replaceAll("\\Qr\\E", "").replaceAll("\\Qregions\\E", "")) * 512; - } - - if (arg.toLowerCase().endsWith("k")) { - return Integer.parseInt(arg.toLowerCase().replaceAll("\\Qk\\E", "")) * 1000; - } - - return Integer.parseInt(arg.toLowerCase()); - } - - @Override - protected String getArgsUsage() { - return "[radius]"; - } -} diff --git a/src/main/java/com/volmit/iris/core/gui/PregeneratorJob.java b/src/main/java/com/volmit/iris/core/gui/PregeneratorJob.java index 801b98d6f..6757a5a7f 100644 --- a/src/main/java/com/volmit/iris/core/gui/PregeneratorJob.java +++ b/src/main/java/com/volmit/iris/core/gui/PregeneratorJob.java @@ -103,9 +103,9 @@ public class PregeneratorJob implements PregenListener { return instance; } - public static void pauseResume() { + public static boolean pauseResume() { if (instance == null) { - return; + return false; } if (isPaused()) { @@ -113,6 +113,7 @@ public class PregeneratorJob implements PregenListener { } else { instance.pregenerator.pause(); } + return true; } public static boolean isPaused() { diff --git a/src/main/java/com/volmit/iris/core/pregenerator/PregenTask.java b/src/main/java/com/volmit/iris/core/pregenerator/PregenTask.java index cc87b439d..5a1907ca3 100644 --- a/src/main/java/com/volmit/iris/core/pregenerator/PregenTask.java +++ b/src/main/java/com/volmit/iris/core/pregenerator/PregenTask.java @@ -34,12 +34,15 @@ public class PregenTask { private Position2 center = new Position2(0, 0); @Builder.Default - private int radius = 1; + private int width = 1; + + @Builder.Default + private int height = 1; private static final KList order = computeChunkOrder(); public void iterateRegions(Spiraled s) { - new Spiraler(radius * 2, radius * 2, s) + new Spiraler(getWidth() * 2, getHeight() * 2, s) .setOffset(center.getX(), center.getZ()).drain(); } @@ -50,7 +53,7 @@ public class PregenTask { } public void iterateAllChunks(Spiraled s) { - new Spiraler(radius * 2, radius * 2, (x, z) -> iterateRegion(x, z, s)) + new Spiraler(getWidth() * 2, getHeight() * 2, (x, z) -> iterateRegion(x, z, s)) .setOffset(center.getX(), center.getZ()).drain(); } From 26dee50e6891e4f9a1ff610388c201bd847b9f6f Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Fri, 6 Aug 2021 16:54:56 +0200 Subject: [PATCH 02/14] Wikilink --- .../com/volmit/iris/core/command/pregen/CommandIrisPregen.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregen.java b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregen.java index 6b85af100..ce8e818ff 100644 --- a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregen.java +++ b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregen.java @@ -55,6 +55,7 @@ public class CommandIrisPregen extends MortarCommand { sender.sendMessage("Iris Pregen Commands:"); printHelp(sender); + sender.sendMessage("Pregen wiki page: https://docs.volmit.com/iris/pregeneration"); return true; } From 705c5ce79073c3050bd5f535e3db9ad3bfbdc7ce Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Fri, 6 Aug 2021 22:20:18 +0200 Subject: [PATCH 03/14] Fix console sender, add descriptions, add -here --- .../command/pregen/CommandIrisPregen.java | 8 +- .../pregen/CommandIrisPregenCreate.java | 76 +++++++++++++++---- 2 files changed, 66 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregen.java b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregen.java index ce8e818ff..5b2b4aaed 100644 --- a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregen.java +++ b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregen.java @@ -49,8 +49,12 @@ public class CommandIrisPregen extends MortarCommand { @Override public boolean handle(VolmitSender sender, String[] args) { - if (!IrisToolbelt.isIrisWorld(sender.player().getWorld())){ - sender.sendMessage("Pregen only works in Iris worlds!"); + if (sender.isPlayer()) { + if (!IrisToolbelt.isIrisWorld(sender.player().getWorld())) { + sender.sendMessage("Pregen only works in Iris worlds!"); + } + } else { + sender.sendMessage("Note that pregeneration only works in Iris worlds!"); } sender.sendMessage("Iris Pregen Commands:"); diff --git a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java index 24357970b..53f7f682d 100644 --- a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java +++ b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java @@ -3,7 +3,6 @@ package com.volmit.iris.core.command.pregen; import com.volmit.iris.Iris; import com.volmit.iris.core.gui.PregeneratorJob; import com.volmit.iris.core.pregenerator.PregenTask; -import com.volmit.iris.core.pregenerator.methods.HybridPregenMethod; import com.volmit.iris.core.tools.IrisToolbelt; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.math.Position2; @@ -13,15 +12,28 @@ import org.bukkit.Bukkit; import org.bukkit.World; import org.checkerframework.checker.units.qual.K; -import java.util.Arrays; - public class CommandIrisPregenCreate extends MortarCommand { public CommandIrisPregenCreate() { super("create", "c", "new", "+"); requiresPermission(Iris.perm); setCategory("Pregen"); - setDescription("Create a new pregeneration task"); + setDescription(""" + Create a new pregeneration task. + Command usage & examples: + /iris pregen [radius=] [width=] [height=] [x=] [z=] [world=] [-here] + /iris pregen radius=5000 x=10r z=10r world=IrisWorld + /iris pregen 5k -here + + : Sets both width and height to a value. + & : Give the center point of the pregeneration. + : Specify a specific world name for generation as well (required for console) + -here: If added, the center location is set to your position (player only) + + For all numeric values (radius, centerX, etc.) you may use: + c => 16, r => 512, k => 1000 + Example: entering '1000' is the same as '1k' (1 * 1000) + https://docs.volmit.com/iris/pregeneration"""); } @Override @@ -38,7 +50,7 @@ public class CommandIrisPregenCreate extends MortarCommand { @Override protected String getArgsUsage() { - return null; + return " [width=] [height=] [x=] [z=] [world=] [-here]"; } @Override @@ -54,16 +66,26 @@ public class CommandIrisPregenCreate extends MortarCommand { int height = -1; int x = 0; int z = 0; + boolean here = false; KList failed = new KList<>(); for (String a : args) { - if (a.contains("=")) { + if (a.equals("-here")){ + here = true; + } else if (a.contains("=")) { String pre = a.split("=")[0]; String val = a.split("=")[1]; if (pre.equals("world")){ world = Bukkit.getWorld(val); + if (world == null){ + failed.add(a + " (invalid world)"); + sender.sendMessage("Entered world is " + val + ", but that world does not exist."); + sender.sendMessage("Cancelling the command."); + sender.sendMessage(getDescription()); + return true; + } } else if (!isVal(val)){ - sender.sendMessage("Parameters other than `world=` require a number (+ c|chunk|r|region|k), given: '" + a + "' is invalid"); + failed.add(a + " (non-value)"); } else { switch (pre) { case "width" -> width = getVal(val); @@ -74,31 +96,52 @@ public class CommandIrisPregenCreate extends MortarCommand { } case "x" -> x = getVal(val); case "z" -> z = getVal(val); + default -> failed.add(a + " (no type)"); } } } else if (isVal(a)) { width = getVal(a); height = getVal(a); } else { - failed.add(a); + failed.add(a + " (nothing)"); } } if (width == -1 || height == -1){ - sender.sendMessage("Size not specified"); - sender.sendMessage(getArgsUsage()); + sender.sendMessage("Radius or (width & height) not specified. Cancelling..."); + sender.sendMessage(getDescription()); + return true; } - world = world == null ? sender.player().getWorld() : world; + if (world == null){ + if (sender.isPlayer()){ + world = sender.player().getWorld(); + } else { + sender.sendMessage("Must specify world= if sending from console! Cancelling..."); + sender.sendMessage(getDescription()); + return true; + } + } + + if (here){ + if (sender.isPlayer()) { + x = sender.player().getLocation().getBlockX(); + z = sender.player().getLocation().getBlockZ(); + } else { + sender.sendMessage("Specifying -here does not work from console!"); + } + } KList details = new KList<>( "Pregeneration details:", - " - World > " + world.getName(), - " - Width/Height > " + width + "/" + height, - " - Center x,z > " + x + "," + z, - failed.isEmpty() ? "(No failed arguments)" : "FAILED ARGS: " + failed + " - World > " + world.getName(), + " - Width/Height > " + width + "/" + height, + " - Center x,z > " + x + "," + z, + failed.isEmpty() ? "(No failed arguments)" : "FAILED ARGS:" + ); + failed.forEach(s -> + details.add(" - " + s) ); - if (pregenerate(world, width, height, x, z)){ sender.sendMessage("Successfully started pregen"); @@ -129,6 +172,7 @@ public class CommandIrisPregenCreate extends MortarCommand { .build(), world); } catch (Throwable e){ Iris.reportError(e); + e.printStackTrace(); return false; } return true; From ef51aa7e98fb8096275f35d826abc9071f1fc92a Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Fri, 6 Aug 2021 22:22:56 +0200 Subject: [PATCH 04/14] oops --- .../iris/core/command/pregen/CommandIrisPregenCreate.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java index 53f7f682d..d1437e41f 100644 --- a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java +++ b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java @@ -21,9 +21,9 @@ public class CommandIrisPregenCreate extends MortarCommand { setDescription(""" Create a new pregeneration task. Command usage & examples: - /iris pregen [radius=] [width=] [height=] [x=] [z=] [world=] [-here] - /iris pregen radius=5000 x=10r z=10r world=IrisWorld - /iris pregen 5k -here + /iris pregen create [radius=] [width=] [height=] [x=] [z=] [world=] [-here] + /iris pregen create radius=5000 x=10r z=10r world=IrisWorld + /iris pregen create 5k -here : Sets both width and height to a value. & : Give the center point of the pregeneration. From bc53cd1aa4e09108b4fbdd887876ef354314602b Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Fri, 6 Aug 2021 22:50:52 +0200 Subject: [PATCH 05/14] Remove empty command descriptions --- .../volmit/iris/core/command/pregen/CommandIrisPregenStop.java | 2 +- .../iris/core/command/pregen/CommandIrisPregenToggle.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenStop.java b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenStop.java index daa68ef8e..17a864730 100644 --- a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenStop.java +++ b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenStop.java @@ -38,6 +38,6 @@ public class CommandIrisPregenStop extends MortarCommand { @Override protected String getArgsUsage() { - return null; + return ""; } } diff --git a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenToggle.java b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenToggle.java index 3406a09fe..9e90bf113 100644 --- a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenToggle.java +++ b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenToggle.java @@ -32,6 +32,6 @@ public class CommandIrisPregenToggle extends MortarCommand { @Override protected String getArgsUsage() { - return null; + return ""; } } From 154aea7a61557655f81f216a0c8e5cbf607bcff2 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Fri, 6 Aug 2021 22:51:02 +0200 Subject: [PATCH 06/14] Better autocompletions --- .../pregen/CommandIrisPregenCreate.java | 44 ++++++++++++++++--- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java index d1437e41f..5195987fe 100644 --- a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java +++ b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java @@ -10,10 +10,12 @@ import com.volmit.iris.util.plugin.MortarCommand; import com.volmit.iris.util.plugin.VolmitSender; import org.bukkit.Bukkit; import org.bukkit.World; -import org.checkerframework.checker.units.qual.K; + public class CommandIrisPregenCreate extends MortarCommand { + private static final KList argus = new KList<>("radius=", "width=", "height=", "x=", "z="); + public CommandIrisPregenCreate() { super("create", "c", "new", "+"); requiresPermission(Iris.perm); @@ -39,13 +41,41 @@ public class CommandIrisPregenCreate extends MortarCommand { @Override public void addTabOptions(VolmitSender sender, String[] args, KList list) { - list.add("5000"); - list.add("size=5000 world=IrisWorld x=500 z=-1000"); - list.add("5000 world=IrisWorld x=500 z=-1000"); - list.add("world=IrisWorld x=500 z=-1000"); - for (World w : Bukkit.getServer().getWorlds()) { - list.add(w.getName()); + // Add arguments + argus.forEach(p -> { + boolean hasArg = false; + for (String arg : args) { + if (!arg.contains("=") || !p.contains("=")){ + continue; + } + if (arg.split("=")[0].equals(p.split("=")[0])) { + hasArg = true; + break; + } + } + if (!hasArg){ + list.add(p); + } + }); + + // Add -here + boolean hasHere = false; + for (String arg : args) { + if (arg.equals("-here")) { + hasHere = true; + break; + } } + if (!hasHere){ + list.add("-here"); + } + + // Add Iris worlds + Bukkit.getWorlds().forEach(w -> { + if (IrisToolbelt.isIrisWorld(w)){ + list.add("world=" + w.getName()); + } + }); } @Override From c41e34e9d8a960d5dcef187f2629ae194202d0aa Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Fri, 6 Aug 2021 22:53:34 +0200 Subject: [PATCH 07/14] Patches autocomplete with no worlds & getString cast error --- .../pregen/CommandIrisPregenCreate.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java index 5195987fe..d7119f089 100644 --- a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java +++ b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java @@ -11,6 +11,8 @@ import com.volmit.iris.util.plugin.VolmitSender; import org.bukkit.Bukkit; import org.bukkit.World; +import java.util.Arrays; + public class CommandIrisPregenCreate extends MortarCommand { @@ -71,11 +73,15 @@ public class CommandIrisPregenCreate extends MortarCommand { } // Add Iris worlds - Bukkit.getWorlds().forEach(w -> { - if (IrisToolbelt.isIrisWorld(w)){ - list.add("world=" + w.getName()); - } - }); + if (Bukkit.getWorlds().isEmpty()){ + list.add("world="); + } else { + Bukkit.getWorlds().forEach(w -> { + if (IrisToolbelt.isIrisWorld(w)) { + list.add("world=" + w.getName()); + } + }); + } } @Override @@ -178,7 +184,7 @@ public class CommandIrisPregenCreate extends MortarCommand { } else { sender.sendMessage("Failed to start pregen. Doublecheck your arguments!"); } - sender.sendMessage(details.array()); + sender.sendMessage(details.toString()); return true; } From 93888aeed334ace3d3adb5495a2b7bdcb0300d62 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Fri, 6 Aug 2021 22:58:09 +0200 Subject: [PATCH 08/14] nicer to work with --- .../iris/core/command/pregen/CommandIrisPregenCreate.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java index d7119f089..5acec9b70 100644 --- a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java +++ b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java @@ -16,7 +16,7 @@ import java.util.Arrays; public class CommandIrisPregenCreate extends MortarCommand { - private static final KList argus = new KList<>("radius=", "width=", "height=", "x=", "z="); + private static final KList argus = new KList<>("radius=", "width=", "height=", "x=", "z="); public CommandIrisPregenCreate() { super("create", "c", "new", "+"); From cb923cef47f1eee00a705f219bc11af79395389b Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Fri, 6 Aug 2021 23:10:44 +0200 Subject: [PATCH 09/14] Details string klist to strinbuilder --- .../pregen/CommandIrisPregenCreate.java | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java index 5acec9b70..b96f832b5 100644 --- a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java +++ b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java @@ -168,16 +168,26 @@ public class CommandIrisPregenCreate extends MortarCommand { } } - KList details = new KList<>( - "Pregeneration details:", - " - World > " + world.getName(), - " - Width/Height > " + width + "/" + height, - " - Center x,z > " + x + "," + z, - failed.isEmpty() ? "(No failed arguments)" : "FAILED ARGS:" - ); - failed.forEach(s -> - details.add(" - " + s) - ); + StringBuilder details = new StringBuilder("Pregeneration details:"); + + details.append("\n") + .append(" - World > ") + .append(world.getName()) + .append("\n") + .append(" - Width/Height > ") + .append(width) + .append("/") + .append(height) + .append("\n") + .append(" - Center x,z > ") + .append(x) + .append(",") + .append(z) + .append("\n") + .append(failed.isEmpty() ? "(No failed arguments)" : "FAILED ARGS:"); + for (String s : failed) { + details.append(s).append("\n"); + } if (pregenerate(world, width, height, x, z)){ sender.sendMessage("Successfully started pregen"); From dafa3bde8be31ad07f129dadfd4560c384dea2c2 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Fri, 6 Aug 2021 23:13:54 +0200 Subject: [PATCH 10/14] Newline & append --- .../iris/core/command/pregen/CommandIrisPregenCreate.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java index b96f832b5..a846c5ff7 100644 --- a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java +++ b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java @@ -184,15 +184,15 @@ public class CommandIrisPregenCreate extends MortarCommand { .append(",") .append(z) .append("\n") - .append(failed.isEmpty() ? "(No failed arguments)" : "FAILED ARGS:"); + .append(failed.isEmpty() ? "(No failed arguments)" : "FAILED ARGS:\n"); for (String s : failed) { details.append(s).append("\n"); } if (pregenerate(world, width, height, x, z)){ - sender.sendMessage("Successfully started pregen"); + details.append("Successfully started pregen"); } else { - sender.sendMessage("Failed to start pregen. Doublecheck your arguments!"); + details.append("Failed to start pregen. Doublecheck your arguments!"); } sender.sendMessage(details.toString()); From 14d2ae0c0e8e38cabb277587c71a4ba8e2d1e6d5 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Fri, 6 Aug 2021 23:15:22 +0200 Subject: [PATCH 11/14] Use toolbelt instead of Irisworlds --- src/main/java/com/volmit/iris/Iris.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java index 623e4caf5..da553c005 100644 --- a/src/main/java/com/volmit/iris/Iris.java +++ b/src/main/java/com/volmit/iris/Iris.java @@ -29,6 +29,7 @@ import com.volmit.iris.core.link.MythicMobsLink; import com.volmit.iris.core.link.OraxenLink; import com.volmit.iris.core.nms.INMS; import com.volmit.iris.core.project.loader.IrisData; +import com.volmit.iris.core.tools.IrisToolbelt; import com.volmit.iris.core.tools.IrisWorlds; import com.volmit.iris.engine.framework.EngineCompositeGenerator; import com.volmit.iris.engine.object.biome.IrisBiome; @@ -267,8 +268,8 @@ public class Iris extends VolmitPlugin implements Listener { proj.close(); for (World i : Bukkit.getWorlds()) { - if (IrisWorlds.isIrisWorld(i)) { - IrisWorlds.access(i).close(); + if (IrisToolbelt.isIrisWorld(i)) { + IrisToolbelt.access(i).close(); } } From dff6048a0775272fc1cad51edb7f54e01eb8e239 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Sat, 7 Aug 2021 19:25:59 +0200 Subject: [PATCH 12/14] Rename class, update nodes, update messages --- .../iris/core/command/pregen/CommandIrisPregen.java | 2 +- ...isPregenToggle.java => CommandIrisPregenPause.java} | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) rename src/main/java/com/volmit/iris/core/command/pregen/{CommandIrisPregenToggle.java => CommandIrisPregenPause.java} (71%) diff --git a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregen.java b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregen.java index 5b2b4aaed..7e5cba61f 100644 --- a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregen.java +++ b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregen.java @@ -33,7 +33,7 @@ public class CommandIrisPregen extends MortarCommand { private CommandIrisPregenStop stop; @Command - private CommandIrisPregenToggle toggle; + private CommandIrisPregenPause toggle; public CommandIrisPregen() { super("pregen", "preg", "p"); diff --git a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenToggle.java b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenPause.java similarity index 71% rename from src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenToggle.java rename to src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenPause.java index 9e90bf113..66d324d3d 100644 --- a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenToggle.java +++ b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenPause.java @@ -6,10 +6,10 @@ import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.plugin.MortarCommand; import com.volmit.iris.util.plugin.VolmitSender; -public class CommandIrisPregenToggle extends MortarCommand { +public class CommandIrisPregenPause extends MortarCommand { - public CommandIrisPregenToggle() { - super("toggle", "t", "pause", "continue", "p", "c"); + public CommandIrisPregenPause() { + super("pause", "toggle", "t", "continue", "resume", "p", "c", "unpause", "up"); requiresPermission(Iris.perm); setCategory("Pregen"); setDescription("Toggle an ongoing pregeneration task"); @@ -18,9 +18,9 @@ public class CommandIrisPregenToggle extends MortarCommand { @Override public boolean handle(VolmitSender sender, String[] args) { if (PregeneratorJob.pauseResume()){ - sender.sendMessage("Toggled pregeneration task, now: " + (PregeneratorJob.isPaused() ? "Paused" : "Running")); + sender.sendMessage("Paused/unpaused pregeneration task, now: " + (PregeneratorJob.isPaused() ? "Paused" : "Running") + "."); } else { - sender.sendMessage("No active pregeneration tasks to toggle"); + sender.sendMessage("No active pregeneration tasks to pause/unpause."); } return true; } From a0df548dd305f90cb49f82b4e823d92531a8a876 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Sat, 7 Aug 2021 19:50:02 +0200 Subject: [PATCH 13/14] IrisPregenStart repl. IrisPregenCreate + fixes --- .../command/pregen/CommandIrisPregen.java | 2 +- ...reate.java => CommandIrisPregenStart.java} | 77 +++++++++++++------ 2 files changed, 56 insertions(+), 23 deletions(-) rename src/main/java/com/volmit/iris/core/command/pregen/{CommandIrisPregenCreate.java => CommandIrisPregenStart.java} (76%) diff --git a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregen.java b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregen.java index 7e5cba61f..53fdf10c9 100644 --- a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregen.java +++ b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregen.java @@ -27,7 +27,7 @@ import com.volmit.iris.util.plugin.VolmitSender; public class CommandIrisPregen extends MortarCommand { @Command - private CommandIrisPregenCreate start; + private CommandIrisPregenStart start; @Command private CommandIrisPregenStop stop; diff --git a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenStart.java similarity index 76% rename from src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java rename to src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenStart.java index a846c5ff7..d5ded0cc8 100644 --- a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenCreate.java +++ b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenStart.java @@ -14,25 +14,31 @@ import org.bukkit.World; import java.util.Arrays; -public class CommandIrisPregenCreate extends MortarCommand { +public class CommandIrisPregenStart extends MortarCommand { private static final KList argus = new KList<>("radius=", "width=", "height=", "x=", "z="); - public CommandIrisPregenCreate() { - super("create", "c", "new", "+"); + public CommandIrisPregenStart() { + super("start", "s", "create", "c", "new", "+"); requiresPermission(Iris.perm); setCategory("Pregen"); setDescription(""" Create a new pregeneration task. - Command usage & examples: - /iris pregen create [radius=] [width=] [height=] [x=] [z=] [world=] [-here] - /iris pregen create radius=5000 x=10r z=10r world=IrisWorld - /iris pregen create 5k -here + Command usage: + /iris pregen create [radius=] [x=] [z=] [world=] [-here] - : Sets both width and height to a value. - & : Give the center point of the pregeneration. - : Specify a specific world name for generation as well (required for console) + Examples: + /iris pregen start 5k -here + /iris pregen start radius=5000 x=10r z=10r world=IrisWorld + /iris pregen start 10k world=WorldName + + : Sets both width and height to a value. (Size is: 2 * radius by 2 * radius) + & : Give the center point of the pregen. + : Specify a different world name for generation than the one you're currently in. + The console is not in any world, so this is required for console! + If you specify this, the `-here` is ignored. -here: If added, the center location is set to your position (player only) + This overrides and . For all numeric values (radius, centerX, etc.) you may use: c => 16, r => 512, k => 1000 @@ -86,14 +92,15 @@ public class CommandIrisPregenCreate extends MortarCommand { @Override protected String getArgsUsage() { - return " [width=] [height=] [x=] [z=] [world=] [-here]"; + return " [x=] [z=] [world=] [-here]"; } @Override public boolean handle(VolmitSender sender, String[] args) { if (PregeneratorJob.getInstance() != null) { - sender.sendMessage("Pregeneration task already ongoing. You can stop it with /ir p stop"); + sender.sendMessage("Pregeneration task already ongoing. You can stop it with /ir p stop."); + sender.sendMessage("Cannot create new pregen while one is already going. Cancelling..."); return true; } @@ -104,6 +111,7 @@ public class CommandIrisPregenCreate extends MortarCommand { int z = 0; boolean here = false; + // Check all arguments KList failed = new KList<>(); for (String a : args) { if (a.equals("-here")){ @@ -143,12 +151,14 @@ public class CommandIrisPregenCreate extends MortarCommand { } } + // Checking if a radius was specified or forgotten if (width == -1 || height == -1){ - sender.sendMessage("Radius or (width & height) not specified. Cancelling..."); + sender.sendMessage("Radius not specified! Cancelling..."); sender.sendMessage(getDescription()); return true; } + // World specified & cancelling `-here` if it's another world if (world == null){ if (sender.isPlayer()){ world = sender.player().getWorld(); @@ -157,8 +167,18 @@ public class CommandIrisPregenCreate extends MortarCommand { sender.sendMessage(getDescription()); return true; } + } else { + if (sender.isPlayer()){ + if (!world.equals(sender.player().getWorld())){ + if (here) { + sender.sendMessage("Ignoring `-here` because `world=` is specified!"); + here = false; + } + } + } } + // Checking if -here is used if (here){ if (sender.isPlayer()) { x = sender.player().getLocation().getBlockX(); @@ -168,32 +188,39 @@ public class CommandIrisPregenCreate extends MortarCommand { } } - StringBuilder details = new StringBuilder("Pregeneration details:"); - - details.append("\n") + // Build details print + StringBuilder details = new StringBuilder("Pregeneration details:") + .append("\n") .append(" - World > ") .append(world.getName()) .append("\n") - .append(" - Width/Height > ") + .append(" - Radius > ") .append(width) - .append("/") - .append(height) - .append("\n") + .append("(") + .append(width * 2) + .append(" by ") + .append(height * 2) + .append(")\n") .append(" - Center x,z > ") .append(x) .append(",") .append(z) .append("\n") - .append(failed.isEmpty() ? "(No failed arguments)" : "FAILED ARGS:\n"); + + // Append failed args + .append(failed.isEmpty() ? "(No failed arguments)\n" : "FAILED ARGS:\n"); for (String s : failed) { details.append(s).append("\n"); } + // Start pregen and append info to details if (pregenerate(world, width, height, x, z)){ details.append("Successfully started pregen"); } else { details.append("Failed to start pregen. Doublecheck your arguments!"); } + + // Send details sender.sendMessage(details.toString()); return true; @@ -224,6 +251,12 @@ public class CommandIrisPregenCreate extends MortarCommand { return true; } + /** + * Get the ingeger value from an argument that may contain `c` `chunks` `r` `regions` or `k`
+ * "5r" returns 5 * 512 = 2560 + * @param arg the string argument to parse into a value + * @return the integer value result + */ private int getVal(String arg) { if (arg.toLowerCase().endsWith("c") || arg.toLowerCase().endsWith("chunks")) { @@ -243,7 +276,7 @@ public class CommandIrisPregenCreate extends MortarCommand { /** * Checks if the - * @param arg argument + * @param arg string value * @return is valid -> true */ private boolean isVal(String arg) { From cf76e438983f64e77004e05e72d57b65c423d062 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Sat, 7 Aug 2021 19:53:32 +0200 Subject: [PATCH 14/14] Forgot to remove width&height from autcomplete --- .../volmit/iris/core/command/pregen/CommandIrisPregenStart.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenStart.java b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenStart.java index d5ded0cc8..1c0ea3342 100644 --- a/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenStart.java +++ b/src/main/java/com/volmit/iris/core/command/pregen/CommandIrisPregenStart.java @@ -16,7 +16,7 @@ import java.util.Arrays; public class CommandIrisPregenStart extends MortarCommand { - private static final KList argus = new KList<>("radius=", "width=", "height=", "x=", "z="); + private static final KList argus = new KList<>("radius=", "x=", "z="); public CommandIrisPregenStart() { super("start", "s", "create", "c", "new", "+");