From b7eaae88a8ac4d2cdca301f9900b8b582c8da659 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 20 Sep 2019 18:32:43 -0500 Subject: [PATCH] Checked Command Exceptions --- .../utils/command/BaritoneChatControl.java | 53 ++++++----- .../baritone/api/utils/command/Command.java | 7 +- .../command/argparser/ArgParserManager.java | 13 +-- .../command/argument/CommandArgument.java | 10 +- .../utils/command/datatypes/BlockById.java | 6 +- .../command/datatypes/EntityClassById.java | 5 +- .../datatypes/ForBlockOptionalMeta.java | 3 +- .../command/datatypes/ForEnumFacing.java | 6 +- .../utils/command/datatypes/ForWaypoints.java | 6 +- .../utils/command/datatypes/IDatatype.java | 3 +- .../command/datatypes/PlayerByUsername.java | 5 +- .../command/datatypes/RelativeBlockPos.java | 7 +- .../command/datatypes/RelativeCoordinate.java | 6 +- .../utils/command/datatypes/RelativeFile.java | 11 ++- .../utils/command/datatypes/RelativeGoal.java | 3 +- .../command/datatypes/RelativeGoalBlock.java | 4 +- .../command/datatypes/RelativeGoalXZ.java | 3 +- .../command/datatypes/RelativeGoalYLevel.java | 3 +- .../CommandErrorMessageException.java | 13 --- .../command/exception/CommandException.java | 15 +-- .../exception/CommandUnhandledException.java | 26 +++--- .../command/exception/ICommandException.java | 55 +++++++++++ .../helpers/arguments/ArgConsumer.java | 93 +++++++++---------- .../command/helpers/pagination/Paginator.java | 27 +++--- .../utils/command/defaults/AxisCommand.java | 3 +- .../command/defaults/BlacklistCommand.java | 3 +- .../utils/command/defaults/BuildCommand.java | 7 +- .../utils/command/defaults/CancelCommand.java | 3 +- .../utils/command/defaults/ChestsCommand.java | 3 +- .../command/defaults/ClearareaCommand.java | 5 +- .../utils/command/defaults/ClickCommand.java | 3 +- .../utils/command/defaults/ComeCommand.java | 3 +- .../utils/command/defaults/EmptyCommand.java | 58 ------------ .../command/defaults/ExploreCommand.java | 7 +- .../defaults/ExploreFilterCommand.java | 7 +- .../utils/command/defaults/FarmCommand.java | 3 +- .../utils/command/defaults/FindCommand.java | 5 +- .../utils/command/defaults/FollowCommand.java | 7 +- .../command/defaults/ForceCancelCommand.java | 3 +- .../utils/command/defaults/GcCommand.java | 3 +- .../utils/command/defaults/GoalCommand.java | 7 +- .../utils/command/defaults/HelpCommand.java | 7 +- .../utils/command/defaults/InvertCommand.java | 3 +- .../utils/command/defaults/MineCommand.java | 5 +- .../utils/command/defaults/PathCommand.java | 9 +- .../command/defaults/PauseResumeCommands.java | 7 +- .../utils/command/defaults/ProcCommand.java | 3 +- .../command/defaults/ReloadAllCommand.java | 3 +- .../utils/command/defaults/RenderCommand.java | 3 +- .../utils/command/defaults/RepackCommand.java | 3 +- .../command/defaults/SaveAllCommand.java | 3 +- .../command/defaults/SchematicaCommand.java | 3 +- .../utils/command/defaults/SelCommand.java | 7 +- .../utils/command/defaults/SetCommand.java | 17 ++-- .../command/defaults/ThisWayCommand.java | 3 +- .../utils/command/defaults/TunnelCommand.java | 3 +- .../command/defaults/VersionCommand.java | 3 +- .../command/defaults/WaypointsCommand.java | 17 ++-- 58 files changed, 320 insertions(+), 292 deletions(-) create mode 100644 src/api/java/baritone/api/utils/command/exception/ICommandException.java delete mode 100644 src/main/java/baritone/utils/command/defaults/EmptyCommand.java diff --git a/src/api/java/baritone/api/utils/command/BaritoneChatControl.java b/src/api/java/baritone/api/utils/command/BaritoneChatControl.java index 7c3de5ad9..7724e1bf6 100644 --- a/src/api/java/baritone/api/utils/command/BaritoneChatControl.java +++ b/src/api/java/baritone/api/utils/command/BaritoneChatControl.java @@ -28,6 +28,7 @@ import baritone.api.utils.Helper; import baritone.api.utils.IPlayerContext; import baritone.api.utils.SettingsUtil; import baritone.api.utils.command.argument.CommandArgument; +import baritone.api.utils.command.exception.CommandNotEnoughArgumentsException; import baritone.api.utils.command.exception.CommandNotFoundException; import baritone.api.utils.command.execution.CommandExecution; import baritone.api.utils.command.helpers.arguments.ArgConsumer; @@ -124,7 +125,7 @@ public class BaritoneChatControl implements Helper, AbstractGameEventListener { String command = pair.first(); String rest = msg.substring(pair.first().length()); ArgConsumer argc = new ArgConsumer(pair.second()); - if (!argc.has()) { + if (!argc.hasAny()) { Settings.Setting setting = settings.byLowerName.get(command.toLowerCase(Locale.US)); if (setting != null) { logRanCommand(command, rest); @@ -142,7 +143,9 @@ public class BaritoneChatControl implements Helper, AbstractGameEventListener { } if (setting.getName().equalsIgnoreCase(pair.first())) { logRanCommand(command, rest); - CommandManager.execute(String.format("set %s %s", setting.getName(), argc.getString())); + try { + CommandManager.execute(String.format("set %s %s", setting.getName(), argc.getString())); + } catch (CommandNotEnoughArgumentsException ignored) {} // The operation is safe return true; } } @@ -176,31 +179,35 @@ public class BaritoneChatControl implements Helper, AbstractGameEventListener { } public Stream tabComplete(String msg) { - List args = CommandArgument.from(msg, true); - ArgConsumer argc = new ArgConsumer(args); - if (argc.hasAtMost(2)) { - if (argc.hasExactly(1)) { - return new TabCompleteHelper() - .addCommands() - .addSettings() - .filterPrefix(argc.getString()) - .stream(); - } - Settings.Setting setting = settings.byLowerName.get(argc.getString().toLowerCase(Locale.US)); - if (setting != null) { - if (setting.getValueClass() == Boolean.class) { - TabCompleteHelper helper = new TabCompleteHelper(); - if ((Boolean) setting.value) { - helper.append(Stream.of("true", "false")); + try { + List args = CommandArgument.from(msg, true); + ArgConsumer argc = new ArgConsumer(args); + if (argc.hasAtMost(2)) { + if (argc.hasExactly(1)) { + return new TabCompleteHelper() + .addCommands() + .addSettings() + .filterPrefix(argc.getString()) + .stream(); + } + Settings.Setting setting = settings.byLowerName.get(argc.getString().toLowerCase(Locale.US)); + if (setting != null) { + if (setting.getValueClass() == Boolean.class) { + TabCompleteHelper helper = new TabCompleteHelper(); + if ((Boolean) setting.value) { + helper.append(Stream.of("true", "false")); + } else { + helper.append(Stream.of("false", "true")); + } + return helper.filterPrefix(argc.getString()).stream(); } else { - helper.append(Stream.of("false", "true")); + return Stream.of(SettingsUtil.settingValueToString(setting)); } - return helper.filterPrefix(argc.getString()).stream(); - } else { - return Stream.of(SettingsUtil.settingValueToString(setting)); } } + return CommandManager.tabComplete(msg); + } catch (CommandNotEnoughArgumentsException ignored) { // Shouldn't happen, the operation is safe + return Stream.empty(); } - return CommandManager.tabComplete(msg); } } diff --git a/src/api/java/baritone/api/utils/command/Command.java b/src/api/java/baritone/api/utils/command/Command.java index 6d4158654..1d198c9ae 100644 --- a/src/api/java/baritone/api/utils/command/Command.java +++ b/src/api/java/baritone/api/utils/command/Command.java @@ -21,6 +21,7 @@ import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.utils.Helper; import baritone.api.utils.IPlayerContext; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.execution.CommandExecution; import baritone.api.utils.command.helpers.arguments.ArgConsumer; @@ -61,7 +62,7 @@ public abstract class Command implements Helper { * * @param execution The command execution to execute this command with */ - public void execute(CommandExecution execution) { + public void execute(CommandExecution execution) throws CommandException { executed(execution.label, execution.args, execution.settings); } @@ -82,13 +83,13 @@ public abstract class Command implements Helper { /** * Called when this command is executed. */ - protected abstract void executed(String label, ArgConsumer args, Settings settings); + protected abstract void executed(String label, ArgConsumer args, Settings settings) throws CommandException; /** * Called when the command needs to tab complete. Return a Stream representing the entries to put in the completions * list. */ - protected abstract Stream tabCompleted(String label, ArgConsumer args, Settings settings); + protected abstract Stream tabCompleted(String label, ArgConsumer args, Settings settings) throws CommandException; /** * @return A single-line string containing a short description of this command's purpose. diff --git a/src/api/java/baritone/api/utils/command/argparser/ArgParserManager.java b/src/api/java/baritone/api/utils/command/argparser/ArgParserManager.java index 5fc2c45a9..447e8f1b6 100644 --- a/src/api/java/baritone/api/utils/command/argparser/ArgParserManager.java +++ b/src/api/java/baritone/api/utils/command/argparser/ArgParserManager.java @@ -20,6 +20,7 @@ package baritone.api.utils.command.argparser; import baritone.api.utils.command.argument.CommandArgument; import baritone.api.utils.command.exception.CommandInvalidTypeException; import baritone.api.utils.command.exception.CommandNoParserForTypeException; +import baritone.api.utils.command.exception.CommandUnhandledException; import baritone.api.utils.command.registry.Registry; public class ArgParserManager { @@ -66,13 +67,13 @@ public class ArgParserManager { * @param type The type to try and parse the argument into. * @param arg The argument to parse. * @return An instance of the specified class. - * @throws CommandNoParserForTypeException If no parser exists for that type * @throws CommandInvalidTypeException If the parsing failed */ - public static T parseStateless(Class type, CommandArgument arg) { + public static T parseStateless(Class type, CommandArgument arg) throws CommandInvalidTypeException { ArgParser.Stateless parser = getParserStateless(type); if (parser == null) { - throw new CommandNoParserForTypeException(type); + // TODO: Fix this scuff lol + throw new CommandUnhandledException(new CommandNoParserForTypeException(type)); } try { return parser.parseArg(arg); @@ -88,14 +89,14 @@ public class ArgParserManager { * @param arg The argument to parse. * @param state The state to pass to the {@link ArgParser.Stated}. * @return An instance of the specified class. - * @throws CommandNoParserForTypeException If no parser exists for that type * @throws CommandInvalidTypeException If the parsing failed * @see ArgParser.Stated */ - public static T parseStated(Class type, Class stateKlass, CommandArgument arg, S state) { + public static T parseStated(Class type, Class stateKlass, CommandArgument arg, S state) throws CommandInvalidTypeException { ArgParser.Stated parser = getParserStated(type, stateKlass); if (parser == null) { - throw new CommandNoParserForTypeException(type); + // TODO: Fix this scuff lol + throw new CommandUnhandledException(new CommandNoParserForTypeException(type)); } try { return parser.parseArg(arg, state); diff --git a/src/api/java/baritone/api/utils/command/argument/CommandArgument.java b/src/api/java/baritone/api/utils/command/argument/CommandArgument.java index 1928c65ec..2914f7076 100644 --- a/src/api/java/baritone/api/utils/command/argument/CommandArgument.java +++ b/src/api/java/baritone/api/utils/command/argument/CommandArgument.java @@ -66,7 +66,7 @@ public class CommandArgument { * @see ArgConsumer#getEnum(Class) * @see ArgConsumer#getEnumOrNull(Class) */ - public > E getEnum(Class enumClass) { + public > E getEnum(Class enumClass) throws CommandInvalidTypeException { return Arrays.stream(enumClass.getEnumConstants()) .filter(e -> e.name().equalsIgnoreCase(value)) .findFirst() @@ -78,10 +78,9 @@ public class CommandArgument { * * @param type The class to parse this argument into * @return An instance of the specified type - * @throws CommandNoParserForTypeException If no parser exists for that type - * @throws CommandInvalidTypeException If the parsing failed + * @throws CommandInvalidTypeException If the parsing failed */ - public T getAs(Class type) { + public T getAs(Class type) throws CommandInvalidTypeException { return ArgParserManager.parseStateless(type, this); } @@ -105,11 +104,10 @@ public class CommandArgument { * * @param type The class to parse this argument into * @return An instance of the specified type - * @throws CommandNoParserForTypeException If no parser exists for that type * @throws CommandInvalidTypeException If the parsing failed */ @SuppressWarnings("UnusedReturnValue") - public T getAs(Class type, Class stateType, S state) { + public T getAs(Class type, Class stateType, S state) throws CommandInvalidTypeException { return ArgParserManager.parseStated(type, stateType, this, state); } diff --git a/src/api/java/baritone/api/utils/command/datatypes/BlockById.java b/src/api/java/baritone/api/utils/command/datatypes/BlockById.java index e2cf319b0..4733c67d0 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/BlockById.java +++ b/src/api/java/baritone/api/utils/command/datatypes/BlockById.java @@ -17,6 +17,8 @@ package baritone.api.utils.command.datatypes; +import baritone.api.utils.command.exception.CommandException; +import baritone.api.utils.command.exception.CommandNotEnoughArgumentsException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper; import net.minecraft.block.Block; @@ -33,7 +35,7 @@ public class BlockById implements IDatatypeFor { block = null; } - public BlockById(ArgConsumer consumer) { + public BlockById(ArgConsumer consumer) throws CommandNotEnoughArgumentsException { ResourceLocation id = new ResourceLocation(consumer.getString()); if ((block = Block.REGISTRY.getObject(id)) == Blocks.AIR) { throw new IllegalArgumentException("no block found by that id"); @@ -46,7 +48,7 @@ public class BlockById implements IDatatypeFor { } @Override - public Stream tabComplete(ArgConsumer consumer) { + public Stream tabComplete(ArgConsumer consumer) throws CommandException { return new TabCompleteHelper() .append( Block.REGISTRY.getKeys() diff --git a/src/api/java/baritone/api/utils/command/datatypes/EntityClassById.java b/src/api/java/baritone/api/utils/command/datatypes/EntityClassById.java index 455461191..62a80ba7f 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/EntityClassById.java +++ b/src/api/java/baritone/api/utils/command/datatypes/EntityClassById.java @@ -17,6 +17,7 @@ package baritone.api.utils.command.datatypes; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper; import net.minecraft.entity.Entity; @@ -33,7 +34,7 @@ public class EntityClassById implements IDatatypeFor> { entity = null; } - public EntityClassById(ArgConsumer consumer) { + public EntityClassById(ArgConsumer consumer) throws CommandException { ResourceLocation id = new ResourceLocation(consumer.getString()); if ((entity = EntityList.REGISTRY.getObject(id)) == null) { throw new IllegalArgumentException("no entity found by that id"); @@ -46,7 +47,7 @@ public class EntityClassById implements IDatatypeFor> { } @Override - public Stream tabComplete(ArgConsumer consumer) { + public Stream tabComplete(ArgConsumer consumer) throws CommandException { return new TabCompleteHelper() .append( EntityList.getEntityNameList() diff --git a/src/api/java/baritone/api/utils/command/datatypes/ForBlockOptionalMeta.java b/src/api/java/baritone/api/utils/command/datatypes/ForBlockOptionalMeta.java index cffdb54ef..85f2ca614 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/ForBlockOptionalMeta.java +++ b/src/api/java/baritone/api/utils/command/datatypes/ForBlockOptionalMeta.java @@ -18,6 +18,7 @@ package baritone.api.utils.command.datatypes; import baritone.api.utils.BlockOptionalMeta; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import java.util.stream.Stream; @@ -30,7 +31,7 @@ public class ForBlockOptionalMeta implements IDatatypeFor { selector = null; } - public ForBlockOptionalMeta(ArgConsumer consumer) { + public ForBlockOptionalMeta(ArgConsumer consumer) throws CommandException { selector = new BlockOptionalMeta(consumer.getString()); } diff --git a/src/api/java/baritone/api/utils/command/datatypes/ForEnumFacing.java b/src/api/java/baritone/api/utils/command/datatypes/ForEnumFacing.java index 8bee4d41f..b8ee355a2 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/ForEnumFacing.java +++ b/src/api/java/baritone/api/utils/command/datatypes/ForEnumFacing.java @@ -17,6 +17,8 @@ package baritone.api.utils.command.datatypes; +import baritone.api.utils.command.exception.CommandException; +import baritone.api.utils.command.exception.CommandNotEnoughArgumentsException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper; import net.minecraft.util.EnumFacing; @@ -33,7 +35,7 @@ public class ForEnumFacing implements IDatatypeFor { facing = null; } - public ForEnumFacing(ArgConsumer consumer) { + public ForEnumFacing(ArgConsumer consumer) throws CommandNotEnoughArgumentsException { facing = EnumFacing.valueOf(consumer.getString().toUpperCase(Locale.US)); } @@ -43,7 +45,7 @@ public class ForEnumFacing implements IDatatypeFor { } @Override - public Stream tabComplete(ArgConsumer consumer) { + public Stream tabComplete(ArgConsumer consumer) throws CommandException { return new TabCompleteHelper() .append( Arrays.stream(EnumFacing.values()) diff --git a/src/api/java/baritone/api/utils/command/datatypes/ForWaypoints.java b/src/api/java/baritone/api/utils/command/datatypes/ForWaypoints.java index 6dd302f20..047179522 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/ForWaypoints.java +++ b/src/api/java/baritone/api/utils/command/datatypes/ForWaypoints.java @@ -20,6 +20,8 @@ package baritone.api.utils.command.datatypes; import baritone.api.BaritoneAPI; import baritone.api.cache.IWaypoint; import baritone.api.cache.IWaypointCollection; +import baritone.api.utils.command.exception.CommandException; +import baritone.api.utils.command.exception.CommandNotEnoughArgumentsException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper; @@ -40,7 +42,7 @@ public class ForWaypoints implements IDatatypeFor { waypoints = tag == null ? getWaypointsByName(arg) : getWaypointsByTag(tag); } - public ForWaypoints(ArgConsumer consumer) { + public ForWaypoints(ArgConsumer consumer) throws CommandNotEnoughArgumentsException { this(consumer.getString()); } @@ -50,7 +52,7 @@ public class ForWaypoints implements IDatatypeFor { } @Override - public Stream tabComplete(ArgConsumer consumer) { + public Stream tabComplete(ArgConsumer consumer) throws CommandException { return new TabCompleteHelper() .append(getWaypointNames()) .sortAlphabetically() diff --git a/src/api/java/baritone/api/utils/command/datatypes/IDatatype.java b/src/api/java/baritone/api/utils/command/datatypes/IDatatype.java index c79ff4952..a3cf07a43 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/IDatatype.java +++ b/src/api/java/baritone/api/utils/command/datatypes/IDatatype.java @@ -18,6 +18,7 @@ package baritone.api.utils.command.datatypes; import baritone.api.utils.command.argparser.ArgParser; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.exception.CommandInvalidArgumentException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; @@ -44,5 +45,5 @@ public interface IDatatype { * @return A stream representing the strings that can be tab completed. DO NOT INCLUDE SPACES IN ANY STRINGS. * @see ArgConsumer#tabCompleteDatatype(Class) */ - Stream tabComplete(ArgConsumer consumer); + Stream tabComplete(ArgConsumer consumer) throws CommandException; } diff --git a/src/api/java/baritone/api/utils/command/datatypes/PlayerByUsername.java b/src/api/java/baritone/api/utils/command/datatypes/PlayerByUsername.java index 5cf250667..0912c74dd 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/PlayerByUsername.java +++ b/src/api/java/baritone/api/utils/command/datatypes/PlayerByUsername.java @@ -18,6 +18,7 @@ package baritone.api.utils.command.datatypes; import baritone.api.BaritoneAPI; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper; import net.minecraft.entity.player.EntityPlayer; @@ -35,7 +36,7 @@ public class PlayerByUsername implements IDatatypeFor { player = null; } - public PlayerByUsername(ArgConsumer consumer) { + public PlayerByUsername(ArgConsumer consumer) throws CommandException { String username = consumer.getString(); player = players .stream() @@ -53,7 +54,7 @@ public class PlayerByUsername implements IDatatypeFor { } @Override - public Stream tabComplete(ArgConsumer consumer) { + public Stream tabComplete(ArgConsumer consumer) throws CommandException { return new TabCompleteHelper() .append( players diff --git a/src/api/java/baritone/api/utils/command/datatypes/RelativeBlockPos.java b/src/api/java/baritone/api/utils/command/datatypes/RelativeBlockPos.java index 610b8d5fe..0f7ffb4f5 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/RelativeBlockPos.java +++ b/src/api/java/baritone/api/utils/command/datatypes/RelativeBlockPos.java @@ -18,6 +18,7 @@ package baritone.api.utils.command.datatypes; import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import java.util.stream.Stream; @@ -34,7 +35,7 @@ public class RelativeBlockPos implements IDatatypePost tabComplete(ArgConsumer consumer) { - if (consumer.has() && !consumer.has(4)) { + public Stream tabComplete(ArgConsumer consumer) throws CommandException { + if (consumer.hasAny() && !consumer.has(4)) { while (consumer.has(2)) { if (consumer.peekDatatypeOrNull(RelativeCoordinate.class) == null) { break; diff --git a/src/api/java/baritone/api/utils/command/datatypes/RelativeCoordinate.java b/src/api/java/baritone/api/utils/command/datatypes/RelativeCoordinate.java index b521881c0..7e2347113 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/RelativeCoordinate.java +++ b/src/api/java/baritone/api/utils/command/datatypes/RelativeCoordinate.java @@ -17,6 +17,8 @@ package baritone.api.utils.command.datatypes; +import baritone.api.utils.command.exception.CommandException; +import baritone.api.utils.command.exception.CommandNotEnoughArgumentsException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import net.minecraft.util.math.MathHelper; @@ -35,7 +37,7 @@ public class RelativeCoordinate implements IDatatypePost { offset = 0; } - public RelativeCoordinate(ArgConsumer consumer) { + public RelativeCoordinate(ArgConsumer consumer) throws CommandNotEnoughArgumentsException { Matcher matcher = PATTERN.matcher(consumer.getString()); if (!matcher.matches()) { throw new IllegalArgumentException("pattern doesn't match"); @@ -57,7 +59,7 @@ public class RelativeCoordinate implements IDatatypePost { } @Override - public Stream tabComplete(ArgConsumer consumer) { + public Stream tabComplete(ArgConsumer consumer) throws CommandException { if (!consumer.has(2) && consumer.getString().matches("^(~|$)")) { return Stream.of("~"); } diff --git a/src/api/java/baritone/api/utils/command/datatypes/RelativeFile.java b/src/api/java/baritone/api/utils/command/datatypes/RelativeFile.java index c3d5479fb..a02f1fc51 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/RelativeFile.java +++ b/src/api/java/baritone/api/utils/command/datatypes/RelativeFile.java @@ -17,6 +17,8 @@ package baritone.api.utils.command.datatypes; +import baritone.api.utils.command.exception.CommandException; +import baritone.api.utils.command.exception.CommandNotEnoughArgumentsException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import java.io.File; @@ -40,7 +42,7 @@ public class RelativeFile implements IDatatypePost { path = null; } - public RelativeFile(ArgConsumer consumer) { + public RelativeFile(ArgConsumer consumer) throws CommandNotEnoughArgumentsException { try { path = FileSystems.getDefault().getPath(consumer.getString()); } catch (InvalidPathException e) { @@ -68,9 +70,12 @@ public class RelativeFile implements IDatatypePost { } } - public static Stream tabComplete(ArgConsumer consumer, File base0) { + public static Stream tabComplete(ArgConsumer consumer, File base0) throws CommandException { // I will not make the caller deal with this, seriously - // Tab complete code is beautiful and I'm not going to bloat it with dumb ass checked exception bullshit + // Tab complete code is beautiful and I'm not going to bloat it with dumb ass checked exception bullshit -LoganDark + + // lol owned -Brady + File base = getCanonicalFileUnchecked(base0); String currentPathStringThing = consumer.getString(); Path currentPath = FileSystems.getDefault().getPath(currentPathStringThing); diff --git a/src/api/java/baritone/api/utils/command/datatypes/RelativeGoal.java b/src/api/java/baritone/api/utils/command/datatypes/RelativeGoal.java index d3aad7b9b..943c07321 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/RelativeGoal.java +++ b/src/api/java/baritone/api/utils/command/datatypes/RelativeGoal.java @@ -22,6 +22,7 @@ import baritone.api.pathing.goals.GoalBlock; import baritone.api.pathing.goals.GoalXZ; import baritone.api.pathing.goals.GoalYLevel; import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import java.util.ArrayList; @@ -36,7 +37,7 @@ public class RelativeGoal implements IDatatypePost { coords = new RelativeCoordinate[0]; } - public RelativeGoal(ArgConsumer consumer) { + public RelativeGoal(ArgConsumer consumer) throws CommandException { List coordsList = new ArrayList<>(); for (int i = 0; i < 3; i++) { if (consumer.peekDatatypeOrNull(RelativeCoordinate.class) != null) { diff --git a/src/api/java/baritone/api/utils/command/datatypes/RelativeGoalBlock.java b/src/api/java/baritone/api/utils/command/datatypes/RelativeGoalBlock.java index 2d8f9cda7..f368d62ef 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/RelativeGoalBlock.java +++ b/src/api/java/baritone/api/utils/command/datatypes/RelativeGoalBlock.java @@ -19,6 +19,8 @@ package baritone.api.utils.command.datatypes; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.command.exception.CommandException; +import baritone.api.utils.command.exception.CommandInvalidTypeException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import java.util.stream.Stream; @@ -31,7 +33,7 @@ public class RelativeGoalBlock implements IDatatypePost { coords = new RelativeCoordinate[0]; } - public RelativeGoalXZ(ArgConsumer consumer) { + public RelativeGoalXZ(ArgConsumer consumer) throws CommandException { coords = new RelativeCoordinate[]{ consumer.getDatatype(RelativeCoordinate.class), consumer.getDatatype(RelativeCoordinate.class) diff --git a/src/api/java/baritone/api/utils/command/datatypes/RelativeGoalYLevel.java b/src/api/java/baritone/api/utils/command/datatypes/RelativeGoalYLevel.java index 6b8a1aa04..126565da7 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/RelativeGoalYLevel.java +++ b/src/api/java/baritone/api/utils/command/datatypes/RelativeGoalYLevel.java @@ -19,6 +19,7 @@ package baritone.api.utils.command.datatypes; import baritone.api.pathing.goals.GoalYLevel; import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import java.util.stream.Stream; @@ -31,7 +32,7 @@ public class RelativeGoalYLevel implements IDatatypePost args) { - HELPER.logDirect(getMessage(), TextFormatting.RED); - } } diff --git a/src/api/java/baritone/api/utils/command/exception/CommandException.java b/src/api/java/baritone/api/utils/command/exception/CommandException.java index 1f8af3ca6..9fdc3f735 100644 --- a/src/api/java/baritone/api/utils/command/exception/CommandException.java +++ b/src/api/java/baritone/api/utils/command/exception/CommandException.java @@ -17,22 +17,9 @@ package baritone.api.utils.command.exception; -import baritone.api.utils.command.Command; -import baritone.api.utils.command.argument.CommandArgument; - -import java.util.List; - -public abstract class CommandException extends RuntimeException { +public abstract class CommandException extends Exception implements ICommandException { protected CommandException(String reason) { super(reason); } - - /** - * Called when this exception is thrown, to handle the exception. - * - * @param command The command that threw it. - * @param args The arguments the command was called with. - */ - public abstract void handle(Command command, List args); } diff --git a/src/api/java/baritone/api/utils/command/exception/CommandUnhandledException.java b/src/api/java/baritone/api/utils/command/exception/CommandUnhandledException.java index b3cf18198..0ff822ad4 100644 --- a/src/api/java/baritone/api/utils/command/exception/CommandUnhandledException.java +++ b/src/api/java/baritone/api/utils/command/exception/CommandUnhandledException.java @@ -23,15 +23,22 @@ import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; -public class CommandUnhandledException extends CommandErrorMessageException { +public class CommandUnhandledException extends RuntimeException implements ICommandException { - public static String getStackTrace(Throwable throwable) { + public CommandUnhandledException(Throwable cause) { + super(String.format( + "An unhandled exception has occurred:\n\n%s", + getFriendlierStackTrace(cause) + )); + } + + private static String getStackTrace(Throwable throwable) { StringWriter sw = new StringWriter(); throwable.printStackTrace(new PrintWriter(sw)); return sw.toString(); } - public static String getBaritoneStackTrace(String stackTrace) { + private static String getBaritoneStackTrace(String stackTrace) { List lines = Arrays.stream(stackTrace.split("\n")) .collect(Collectors.toList()); int lastBaritoneLine = 0; @@ -43,11 +50,11 @@ public class CommandUnhandledException extends CommandErrorMessageException { return String.join("\n", lines.subList(0, lastBaritoneLine + 1)); } - public static String getBaritoneStackTrace(Throwable throwable) { + private static String getBaritoneStackTrace(Throwable throwable) { return getBaritoneStackTrace(getStackTrace(throwable)); } - public static String getFriendlierStackTrace(String stackTrace) { + private static String getFriendlierStackTrace(String stackTrace) { List lines = Arrays.asList(stackTrace.split("\n")); for (int i = 0; i < lines.size(); i++) { String line = lines.get(i); @@ -64,14 +71,7 @@ public class CommandUnhandledException extends CommandErrorMessageException { return String.join("\n", lines); } - public static String getFriendlierStackTrace(Throwable throwable) { + private static String getFriendlierStackTrace(Throwable throwable) { return getFriendlierStackTrace(getBaritoneStackTrace(throwable)); } - - public CommandUnhandledException(Throwable cause) { - super(String.format( - "An unhandled exception has occurred:\n\n%s", - getFriendlierStackTrace(cause) - )); - } } diff --git a/src/api/java/baritone/api/utils/command/exception/ICommandException.java b/src/api/java/baritone/api/utils/command/exception/ICommandException.java new file mode 100644 index 000000000..379e97b7f --- /dev/null +++ b/src/api/java/baritone/api/utils/command/exception/ICommandException.java @@ -0,0 +1,55 @@ +/* + * This file is part of Baritone. + * + * Baritone is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Baritone 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.utils.command.exception; + +import baritone.api.utils.command.Command; +import baritone.api.utils.command.argument.CommandArgument; +import net.minecraft.util.text.TextFormatting; + +import java.util.List; + +import static baritone.api.utils.Helper.HELPER; + +/** + * The base for a Baritone Command Exception, checked or unchecked. Provides a + * {@link #handle(Command, List)} method that is used to provide useful output + * to the user for diagnosing issues that may have occurred during execution. + *

+ * Anything implementing this interface should be assignable to {@link Exception}. + * + * @author Brady + * @since 9/20/2019 + */ +public interface ICommandException { + + /** + * @see Exception#getMessage() + * @return The exception details + */ + String getMessage(); + + /** + * Called when this exception is thrown, to handle the exception. + * + * @param command The command that threw it. + * @param args The arguments the command was called with. + */ + default void handle(Command command, List args) { + HELPER.logDirect(this.getMessage(), TextFormatting.RED); + } +} diff --git a/src/api/java/baritone/api/utils/command/helpers/arguments/ArgConsumer.java b/src/api/java/baritone/api/utils/command/helpers/arguments/ArgConsumer.java index f0d5139ff..55df9866f 100644 --- a/src/api/java/baritone/api/utils/command/helpers/arguments/ArgConsumer.java +++ b/src/api/java/baritone/api/utils/command/helpers/arguments/ArgConsumer.java @@ -77,7 +77,7 @@ public class ArgConsumer { /** * @param num The number of arguments to check for * @return {@code true} if there are at least {@code num} arguments left in this {@link ArgConsumer} - * @see #has() + * @see #hasAny() * @see #hasAtMost(int) * @see #hasExactly(int) */ @@ -91,7 +91,7 @@ public class ArgConsumer { * @see #hasAtMostOne() * @see #hasExactlyOne() */ - public boolean has() { + public boolean hasAny() { return has(1); } @@ -108,7 +108,7 @@ public class ArgConsumer { /** * @return {@code true} if there is at most 1 argument left in this {@link ArgConsumer} - * @see #has() + * @see #hasAny() * @see #hasAtMostOne() * @see #hasExactlyOne() */ @@ -128,7 +128,7 @@ public class ArgConsumer { /** * @return {@code true} if there is exactly 1 argument left in this {@link ArgConsumer} - * @see #has() + * @see #hasAny() * @see #hasAtMostOne() */ public boolean hasExactlyOne() { @@ -145,7 +145,7 @@ public class ArgConsumer { * @see #peekAs(Class, int) * @see #get() */ - public CommandArgument peek(int index) { + public CommandArgument peek(int index) throws CommandNotEnoughArgumentsException { requireMin(index + 1); return args.get(index); } @@ -161,7 +161,7 @@ public class ArgConsumer { * @see #peekDatatypePost(Class, Object) * @see #get() */ - public CommandArgument peek() { + public CommandArgument peek() throws CommandNotEnoughArgumentsException { return peek(0); } @@ -174,7 +174,7 @@ public class ArgConsumer { * @see #peek() * @see #getAs(Class) */ - public boolean is(Class type, int index) { + public boolean is(Class type, int index) throws CommandNotEnoughArgumentsException { return peek(index).is(type); } @@ -186,7 +186,7 @@ public class ArgConsumer { * @see #peek() * @see #getAs(Class) */ - public boolean is(Class type) { + public boolean is(Class type) throws CommandNotEnoughArgumentsException { return is(type, 0); } @@ -198,7 +198,7 @@ public class ArgConsumer { * @see #peek() * @see #peekString() */ - public String peekString(int index) { + public String peekString(int index) throws CommandNotEnoughArgumentsException { return peek(index).value; } @@ -208,7 +208,7 @@ public class ArgConsumer { * @see #peekString(int) * @see #getString() */ - public String peekString() { + public String peekString() throws CommandNotEnoughArgumentsException { return peekString(0); } @@ -222,7 +222,7 @@ public class ArgConsumer { * @see #getEnum(Class) * @see CommandArgument#getEnum(Class) */ - public > E peekEnum(Class enumClass, int index) { + public > E peekEnum(Class enumClass, int index) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { return peek(index).getEnum(enumClass); } @@ -235,7 +235,7 @@ public class ArgConsumer { * @see #getEnum(Class) * @see CommandArgument#getEnum(Class) */ - public > E peekEnum(Class enumClass) { + public > E peekEnum(Class enumClass) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { return peekEnum(enumClass, 0); } @@ -248,7 +248,7 @@ public class ArgConsumer { * @see #getEnumOrNull(Class) * @see CommandArgument#getEnum(Class) */ - public > E peekEnumOrNull(Class enumClass, int index) { + public > E peekEnumOrNull(Class enumClass, int index) throws CommandNotEnoughArgumentsException { try { return peekEnum(enumClass, index); } catch (CommandInvalidTypeException e) { @@ -264,12 +264,8 @@ public class ArgConsumer { * @see #getEnumOrNull(Class) * @see CommandArgument#getEnum(Class) */ - public > E peekEnumOrNull(Class enumClass) { - try { - return peekEnumOrNull(enumClass, 0); - } catch (CommandInvalidTypeException e) { - return null; - } + public > E peekEnumOrNull(Class enumClass) throws CommandNotEnoughArgumentsException { + return peekEnumOrNull(enumClass, 0); } /** @@ -283,14 +279,13 @@ public class ArgConsumer { * @param type The type to peek as * @param index The index to peek * @return An instance of the specified type - * @throws CommandNoParserForTypeException If no parser exists for that type * @throws CommandInvalidTypeException If the parsing failed * @see ArgParser * @see #peekAs(Class) * @see #peekAsOrDefault(Class, Object, int) * @see #peekAsOrNull(Class, int) */ - public T peekAs(Class type, int index) { + public T peekAs(Class type, int index) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { return peek(index).getAs(type); } @@ -303,14 +298,13 @@ public class ArgConsumer { * * @param type The type to peek as * @return An instance of the specified type - * @throws CommandNoParserForTypeException If no parser exists for that type * @throws CommandInvalidTypeException If the parsing failed * @see ArgParser * @see #peekAs(Class, int) * @see #peekAsOrDefault(Class, Object) * @see #peekAsOrNull(Class) */ - public T peekAs(Class type) { + public T peekAs(Class type) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { return peekAs(type, 0); } @@ -331,7 +325,7 @@ public class ArgConsumer { * @see #peekAs(Class, int) * @see #peekAsOrNull(Class, int) */ - public T peekAsOrDefault(Class type, T def, int index) { + public T peekAsOrDefault(Class type, T def, int index) throws CommandNotEnoughArgumentsException { try { return peekAs(type, index); } catch (CommandInvalidTypeException e) { @@ -354,7 +348,7 @@ public class ArgConsumer { * @see #peekAs(Class) * @see #peekAsOrNull(Class) */ - public T peekAsOrDefault(Class type, T def) { + public T peekAsOrDefault(Class type, T def) throws CommandNotEnoughArgumentsException { return peekAsOrDefault(type, def, 0); } @@ -374,7 +368,7 @@ public class ArgConsumer { * @see #peekAs(Class, int) * @see #peekAsOrDefault(Class, Object, int) */ - public T peekAsOrNull(Class type, int index) { + public T peekAsOrNull(Class type, int index) throws CommandNotEnoughArgumentsException { return peekAsOrDefault(type, null, index); } @@ -392,7 +386,7 @@ public class ArgConsumer { * @see #peekAs(Class) * @see #peekAsOrDefault(Class, Object) */ - public T peekAsOrNull(Class type) { + public T peekAsOrNull(Class type) throws CommandNotEnoughArgumentsException { return peekAsOrNull(type, 0); } @@ -409,7 +403,7 @@ public class ArgConsumer { * @return The datatype instance * @see IDatatype */ - public T peekDatatype(Class datatype) { + public T peekDatatype(Class datatype) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { return copy().getDatatype(datatype); } @@ -426,7 +420,7 @@ public class ArgConsumer { * @return The datatype instance, or {@code null} if it throws an exception * @see IDatatype */ - public T peekDatatypeOrNull(Class datatype) { + public T peekDatatypeOrNull(Class datatype) throws CommandNotEnoughArgumentsException { return copy().getDatatypeOrNull(datatype); } @@ -444,7 +438,7 @@ public class ArgConsumer { * @see IDatatype * @see IDatatypePost */ - public > T peekDatatypePost(Class datatype, O original) { + public > T peekDatatypePost(Class datatype, O original) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { return copy().getDatatypePost(datatype, original); } @@ -547,7 +541,7 @@ public class ArgConsumer { * @return The next argument * @throws CommandNotEnoughArgumentsException If there's less than one argument left */ - public CommandArgument get() { + public CommandArgument get() throws CommandNotEnoughArgumentsException { requireMin(1); CommandArgument arg = args.removeFirst(); consumed.add(arg); @@ -561,7 +555,7 @@ public class ArgConsumer { * @return The value of the next argument * @throws CommandNotEnoughArgumentsException If there's less than one argument left */ - public String getString() { + public String getString() throws CommandNotEnoughArgumentsException { return get().value; } @@ -578,7 +572,7 @@ public class ArgConsumer { * @see #getEnumOrNull(Class) * @see CommandArgument#getEnum(Class) */ - public > E getEnum(Class enumClass) { + public > E getEnum(Class enumClass) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { return get().getEnum(enumClass); } @@ -597,7 +591,7 @@ public class ArgConsumer { * @see #peekEnumOrNull(Class) * @see CommandArgument#getEnum(Class) */ - public > E getEnumOrDefault(Class enumClass, E def) { + public > E getEnumOrDefault(Class enumClass, E def) throws CommandNotEnoughArgumentsException { try { peekEnum(enumClass); return getEnum(enumClass); @@ -620,7 +614,7 @@ public class ArgConsumer { * @see #peekEnumOrNull(Class) * @see CommandArgument#getEnum(Class) */ - public > E getEnumOrNull(Class enumClass) { + public > E getEnumOrNull(Class enumClass) throws CommandNotEnoughArgumentsException { return getEnumOrDefault(enumClass, null); } @@ -633,7 +627,6 @@ public class ArgConsumer { * * @param type The type to peek as * @return An instance of the specified type - * @throws CommandNoParserForTypeException If no parser exists for that type * @throws CommandInvalidTypeException If the parsing failed * @see ArgParser * @see #get() @@ -643,7 +636,7 @@ public class ArgConsumer { * @see #peekAsOrDefault(Class, Object, int) * @see #peekAsOrNull(Class, int) */ - public T getAs(Class type) { + public T getAs(Class type) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { return get().getAs(type); } @@ -665,7 +658,7 @@ public class ArgConsumer { * @see #peekAsOrDefault(Class, Object, int) * @see #peekAsOrNull(Class, int) */ - public T getAsOrDefault(Class type, T def) { + public T getAsOrDefault(Class type, T def) throws CommandNotEnoughArgumentsException { try { T val = peek().getAs(type); get(); @@ -692,7 +685,7 @@ public class ArgConsumer { * @see #peekAsOrDefault(Class, Object, int) * @see #peekAsOrNull(Class, int) */ - public T getAsOrNull(Class type) { + public T getAsOrNull(Class type) throws CommandNotEnoughArgumentsException { return getAsOrDefault(type, null); } @@ -707,11 +700,11 @@ public class ArgConsumer { * @return The datatype instance * @see IDatatype */ - public T getDatatype(Class datatype) { + public T getDatatype(Class datatype) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { try { return datatype.getConstructor(ArgConsumer.class).newInstance(this); } catch (InvocationTargetException e) { - throw new CommandInvalidTypeException(has() ? peek() : consumed(), datatype.getSimpleName()); + throw new CommandInvalidTypeException(hasAny() ? peek() : consumed(), datatype.getSimpleName()); } catch (NoSuchMethodException | IllegalAccessException | InstantiationException e) { throw new CommandUnhandledException(e); } @@ -730,7 +723,7 @@ public class ArgConsumer { * @return The datatype instance, or {@code null} if it throws an exception * @see IDatatype */ - public T getDatatypeOrNull(Class datatype) { + public T getDatatypeOrNull(Class datatype) throws CommandNotEnoughArgumentsException { List argsSnapshot = new ArrayList<>(args); List consumedSnapshot = new ArrayList<>(consumed); try { @@ -756,7 +749,7 @@ public class ArgConsumer { * @see IDatatype * @see IDatatypePost */ - public > T getDatatypePost(Class datatype, O original) { + public > T getDatatypePost(Class datatype, O original) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { return getDatatype(datatype).apply(original); } @@ -819,7 +812,7 @@ public class ArgConsumer { * @see IDatatype * @see IDatatypeFor */ - public > T getDatatypeFor(Class datatype) { + public > T getDatatypeFor(Class datatype) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException { return getDatatype(datatype).get(); } @@ -838,7 +831,7 @@ public class ArgConsumer { * @see IDatatype * @see IDatatypeFor */ - public > T getDatatypeForOrDefault(Class datatype, T def) { + public > T getDatatypeForOrDefault(Class datatype, T def) throws CommandNotEnoughArgumentsException { List argsSnapshot = new ArrayList<>(args); List consumedSnapshot = new ArrayList<>(consumed); try { @@ -866,7 +859,7 @@ public class ArgConsumer { * @see IDatatype * @see IDatatypeFor */ - public > T getDatatypeForOrNull(Class datatype) { + public > T getDatatypeForOrNull(Class datatype) throws CommandNotEnoughArgumentsException { return getDatatypeForOrDefault(datatype, null); } @@ -915,7 +908,7 @@ public class ArgConsumer { * @see #requireMax(int) * @see #requireExactly(int) */ - public void requireMin(int min) { + public void requireMin(int min) throws CommandNotEnoughArgumentsException { if (args.size() < min) { throw new CommandNotEnoughArgumentsException(min + consumed.size()); } @@ -923,11 +916,11 @@ public class ArgConsumer { /** * @param max The maximum amount of arguments allowed. - * @throws CommandNotEnoughArgumentsException If there are more than {@code max} arguments left. + * @throws CommandTooManyArgumentsException If there are more than {@code max} arguments left. * @see #requireMin(int) * @see #requireExactly(int) */ - public void requireMax(int max) { + public void requireMax(int max) throws CommandTooManyArgumentsException { if (args.size() > max) { throw new CommandTooManyArgumentsException(max + consumed.size()); } @@ -940,7 +933,7 @@ public class ArgConsumer { * @see #requireMin(int) * @see #requireMax(int) */ - public void requireExactly(int args) { + public void requireExactly(int args) throws CommandException { requireMin(args); requireMax(args); } diff --git a/src/api/java/baritone/api/utils/command/helpers/pagination/Paginator.java b/src/api/java/baritone/api/utils/command/helpers/pagination/Paginator.java index c143d5075..da5ac4362 100644 --- a/src/api/java/baritone/api/utils/command/helpers/pagination/Paginator.java +++ b/src/api/java/baritone/api/utils/command/helpers/pagination/Paginator.java @@ -18,6 +18,7 @@ package baritone.api.utils.command.helpers.pagination; import baritone.api.utils.Helper; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.exception.CommandInvalidTypeException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import net.minecraft.util.text.ITextComponent; @@ -114,10 +115,10 @@ public class Paginator implements Helper { display(transform, null); } - public static void paginate(ArgConsumer consumer, Paginator pagi, Runnable pre, Function transform, String commandPrefix) { + public static void paginate(ArgConsumer consumer, Paginator pagi, Runnable pre, Function transform, String commandPrefix) throws CommandException { int page = 1; consumer.requireMax(1); - if (consumer.has()) { + if (consumer.hasAny()) { page = consumer.getAs(Integer.class); if (!pagi.validPage(page)) { throw new CommandInvalidTypeException( @@ -137,47 +138,47 @@ public class Paginator implements Helper { pagi.display(transform, commandPrefix); } - public static void paginate(ArgConsumer consumer, List elems, Runnable pre, Function transform, String commandPrefix) { + public static void paginate(ArgConsumer consumer, List elems, Runnable pre, Function transform, String commandPrefix) throws CommandException { paginate(consumer, new Paginator<>(elems), pre, transform, commandPrefix); } - public static void paginate(ArgConsumer consumer, T[] elems, Runnable pre, Function transform, String commandPrefix) { + public static void paginate(ArgConsumer consumer, T[] elems, Runnable pre, Function transform, String commandPrefix) throws CommandException { paginate(consumer, Arrays.asList(elems), pre, transform, commandPrefix); } - public static void paginate(ArgConsumer consumer, Paginator pagi, Function transform, String commandPrefix) { + public static void paginate(ArgConsumer consumer, Paginator pagi, Function transform, String commandPrefix) throws CommandException { paginate(consumer, pagi, null, transform, commandPrefix); } - public static void paginate(ArgConsumer consumer, List elems, Function transform, String commandPrefix) { + public static void paginate(ArgConsumer consumer, List elems, Function transform, String commandPrefix) throws CommandException { paginate(consumer, new Paginator<>(elems), null, transform, commandPrefix); } - public static void paginate(ArgConsumer consumer, T[] elems, Function transform, String commandPrefix) { + public static void paginate(ArgConsumer consumer, T[] elems, Function transform, String commandPrefix) throws CommandException { paginate(consumer, Arrays.asList(elems), null, transform, commandPrefix); } - public static void paginate(ArgConsumer consumer, Paginator pagi, Runnable pre, Function transform) { + public static void paginate(ArgConsumer consumer, Paginator pagi, Runnable pre, Function transform) throws CommandException { paginate(consumer, pagi, pre, transform, null); } - public static void paginate(ArgConsumer consumer, List elems, Runnable pre, Function transform) { + public static void paginate(ArgConsumer consumer, List elems, Runnable pre, Function transform) throws CommandException { paginate(consumer, new Paginator<>(elems), pre, transform, null); } - public static void paginate(ArgConsumer consumer, T[] elems, Runnable pre, Function transform) { + public static void paginate(ArgConsumer consumer, T[] elems, Runnable pre, Function transform) throws CommandException { paginate(consumer, Arrays.asList(elems), pre, transform, null); } - public static void paginate(ArgConsumer consumer, Paginator pagi, Function transform) { + public static void paginate(ArgConsumer consumer, Paginator pagi, Function transform) throws CommandException { paginate(consumer, pagi, null, transform, null); } - public static void paginate(ArgConsumer consumer, List elems, Function transform) { + public static void paginate(ArgConsumer consumer, List elems, Function transform) throws CommandException { paginate(consumer, new Paginator<>(elems), null, transform, null); } - public static void paginate(ArgConsumer consumer, T[] elems, Function transform) { + public static void paginate(ArgConsumer consumer, T[] elems, Function transform) throws CommandException { paginate(consumer, Arrays.asList(elems), null, transform, null); } } diff --git a/src/main/java/baritone/utils/command/defaults/AxisCommand.java b/src/main/java/baritone/utils/command/defaults/AxisCommand.java index 322fa696c..50525f2d0 100644 --- a/src/main/java/baritone/utils/command/defaults/AxisCommand.java +++ b/src/main/java/baritone/utils/command/defaults/AxisCommand.java @@ -22,6 +22,7 @@ import baritone.api.Settings; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalAxis; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import java.util.Arrays; @@ -35,7 +36,7 @@ public class AxisCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(0); Goal goal = new GoalAxis(); baritone.getCustomGoalProcess().setGoal(goal); diff --git a/src/main/java/baritone/utils/command/defaults/BlacklistCommand.java b/src/main/java/baritone/utils/command/defaults/BlacklistCommand.java index b70a9a13b..e680e4fac 100644 --- a/src/main/java/baritone/utils/command/defaults/BlacklistCommand.java +++ b/src/main/java/baritone/utils/command/defaults/BlacklistCommand.java @@ -21,6 +21,7 @@ import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.process.IGetToBlockProcess; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.exception.CommandInvalidStateException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; @@ -35,7 +36,7 @@ public class BlacklistCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(0); IGetToBlockProcess proc = baritone.getGetToBlockProcess(); if (!proc.isActive()) { diff --git a/src/main/java/baritone/utils/command/defaults/BuildCommand.java b/src/main/java/baritone/utils/command/defaults/BuildCommand.java index 09cb24370..85f51da1e 100644 --- a/src/main/java/baritone/utils/command/defaults/BuildCommand.java +++ b/src/main/java/baritone/utils/command/defaults/BuildCommand.java @@ -23,6 +23,7 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.command.Command; import baritone.api.utils.command.datatypes.RelativeBlockPos; import baritone.api.utils.command.datatypes.RelativeFile; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.exception.CommandInvalidStateException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import net.minecraft.client.Minecraft; @@ -42,14 +43,14 @@ public class BuildCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { File file = args.getDatatypePost(RelativeFile.class, schematicsDir).getAbsoluteFile(); if (!file.getName().toLowerCase(Locale.US).endsWith(".schematic")) { file = new File(file.getAbsolutePath() + ".schematic"); } BetterBlockPos origin = ctx.playerFeet(); BetterBlockPos buildOrigin; - if (args.has()) { + if (args.hasAny()) { args.requireMax(3); buildOrigin = args.getDatatype(RelativeBlockPos.class).apply(origin); } else { @@ -64,7 +65,7 @@ public class BuildCommand extends Command { } @Override - protected Stream tabCompleted(String label, ArgConsumer args, Settings settings) { + protected Stream tabCompleted(String label, ArgConsumer args, Settings settings) throws CommandException { if (args.hasExactlyOne()) { return RelativeFile.tabComplete(args, schematicsDir); } else if (args.has(2)) { diff --git a/src/main/java/baritone/utils/command/defaults/CancelCommand.java b/src/main/java/baritone/utils/command/defaults/CancelCommand.java index 64b977a33..55c172b86 100644 --- a/src/main/java/baritone/utils/command/defaults/CancelCommand.java +++ b/src/main/java/baritone/utils/command/defaults/CancelCommand.java @@ -20,6 +20,7 @@ package baritone.utils.command.defaults; import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import java.util.Arrays; @@ -33,7 +34,7 @@ public class CancelCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(0); baritone.getPathingBehavior().cancelEverything(); logDirect("ok canceled"); diff --git a/src/main/java/baritone/utils/command/defaults/ChestsCommand.java b/src/main/java/baritone/utils/command/defaults/ChestsCommand.java index bde736e9c..8e2cee799 100644 --- a/src/main/java/baritone/utils/command/defaults/ChestsCommand.java +++ b/src/main/java/baritone/utils/command/defaults/ChestsCommand.java @@ -22,6 +22,7 @@ import baritone.api.Settings; import baritone.api.cache.IRememberedInventory; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.exception.CommandInvalidStateException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import net.minecraft.item.ItemStack; @@ -41,7 +42,7 @@ public class ChestsCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(0); Set> entries = ctx.worldData().getContainerMemory().getRememberedInventories().entrySet(); diff --git a/src/main/java/baritone/utils/command/defaults/ClearareaCommand.java b/src/main/java/baritone/utils/command/defaults/ClearareaCommand.java index 17fa28631..99f39307c 100644 --- a/src/main/java/baritone/utils/command/defaults/ClearareaCommand.java +++ b/src/main/java/baritone/utils/command/defaults/ClearareaCommand.java @@ -24,6 +24,7 @@ import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.command.Command; import baritone.api.utils.command.datatypes.RelativeBlockPos; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.exception.CommandInvalidStateException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; @@ -38,10 +39,10 @@ public class ClearareaCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { BetterBlockPos pos1 = ctx.playerFeet(); BetterBlockPos pos2; - if (args.has()) { + if (args.hasAny()) { args.requireMax(3); pos2 = args.getDatatype(RelativeBlockPos.class).apply(pos1); } else { diff --git a/src/main/java/baritone/utils/command/defaults/ClickCommand.java b/src/main/java/baritone/utils/command/defaults/ClickCommand.java index c09fd8b08..49324d88c 100644 --- a/src/main/java/baritone/utils/command/defaults/ClickCommand.java +++ b/src/main/java/baritone/utils/command/defaults/ClickCommand.java @@ -20,6 +20,7 @@ package baritone.utils.command.defaults; import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import java.util.Arrays; @@ -33,7 +34,7 @@ public class ClickCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(0); baritone.openClick(); logDirect("aight dude"); diff --git a/src/main/java/baritone/utils/command/defaults/ComeCommand.java b/src/main/java/baritone/utils/command/defaults/ComeCommand.java index be99cf638..bf02d75de 100644 --- a/src/main/java/baritone/utils/command/defaults/ComeCommand.java +++ b/src/main/java/baritone/utils/command/defaults/ComeCommand.java @@ -21,6 +21,7 @@ import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.exception.CommandInvalidStateException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import net.minecraft.entity.Entity; @@ -37,7 +38,7 @@ public class ComeCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(0); Entity entity = mc.getRenderViewEntity(); if (entity == null) { diff --git a/src/main/java/baritone/utils/command/defaults/EmptyCommand.java b/src/main/java/baritone/utils/command/defaults/EmptyCommand.java deleted file mode 100644 index c36bd0442..000000000 --- a/src/main/java/baritone/utils/command/defaults/EmptyCommand.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * This file is part of Baritone. - * - * Baritone is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Baritone 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Baritone. If not, see . - */ - -package baritone.utils.command.defaults; - -import baritone.api.IBaritone; -import baritone.api.Settings; -import baritone.api.utils.command.Command; -import baritone.api.utils.command.helpers.arguments.ArgConsumer; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Stream; - -public class EmptyCommand extends Command { - - public EmptyCommand(IBaritone baritone) { - super(baritone, Arrays.asList("name1", "name2")); - } - - @Override - protected void executed(String label, ArgConsumer args, Settings settings) { - } - - @Override - protected Stream tabCompleted(String label, ArgConsumer args, Settings settings) { - return Stream.empty(); - } - - @Override - public String getShortDesc() { - return "Short description"; - } - - @Override - public List getLongDesc() { - return Arrays.asList( - "", - "", - "Usage:", - "> " - ); - } -} diff --git a/src/main/java/baritone/utils/command/defaults/ExploreCommand.java b/src/main/java/baritone/utils/command/defaults/ExploreCommand.java index 86f975b7c..57b95d59d 100644 --- a/src/main/java/baritone/utils/command/defaults/ExploreCommand.java +++ b/src/main/java/baritone/utils/command/defaults/ExploreCommand.java @@ -22,6 +22,7 @@ import baritone.api.Settings; import baritone.api.pathing.goals.GoalXZ; import baritone.api.utils.command.Command; import baritone.api.utils.command.datatypes.RelativeGoalXZ; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import java.util.Arrays; @@ -35,13 +36,13 @@ public class ExploreCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { - if (args.has()) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { + if (args.hasAny()) { args.requireExactly(2); } else { args.requireMax(0); } - GoalXZ goal = args.has() + GoalXZ goal = args.hasAny() ? args.getDatatypePost(RelativeGoalXZ.class, ctx.playerFeet()) : new GoalXZ(ctx.playerFeet()); baritone.getExploreProcess().explore(goal.getX(), goal.getZ()); diff --git a/src/main/java/baritone/utils/command/defaults/ExploreFilterCommand.java b/src/main/java/baritone/utils/command/defaults/ExploreFilterCommand.java index cdbc0e8c0..338a622c7 100644 --- a/src/main/java/baritone/utils/command/defaults/ExploreFilterCommand.java +++ b/src/main/java/baritone/utils/command/defaults/ExploreFilterCommand.java @@ -21,6 +21,7 @@ import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.utils.command.Command; import baritone.api.utils.command.datatypes.RelativeFile; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.exception.CommandInvalidStateException; import baritone.api.utils.command.exception.CommandInvalidTypeException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; @@ -39,11 +40,11 @@ public class ExploreFilterCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(2); File file = args.getDatatypePost(RelativeFile.class, mc.gameDir.getAbsoluteFile().getParentFile()); boolean invert = false; - if (args.has()) { + if (args.hasAny()) { if (args.getString().equalsIgnoreCase("invert")) { invert = true; } else { @@ -63,7 +64,7 @@ public class ExploreFilterCommand extends Command { } @Override - protected Stream tabCompleted(String label, ArgConsumer args, Settings settings) { + protected Stream tabCompleted(String label, ArgConsumer args, Settings settings) throws CommandException { if (args.hasExactlyOne()) { return RelativeFile.tabComplete(args, RelativeFile.gameDir()); } diff --git a/src/main/java/baritone/utils/command/defaults/FarmCommand.java b/src/main/java/baritone/utils/command/defaults/FarmCommand.java index 62db521da..af3efa2c6 100644 --- a/src/main/java/baritone/utils/command/defaults/FarmCommand.java +++ b/src/main/java/baritone/utils/command/defaults/FarmCommand.java @@ -20,6 +20,7 @@ package baritone.utils.command.defaults; import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import java.util.Arrays; @@ -33,7 +34,7 @@ public class FarmCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(0); baritone.getFarmProcess().farm(); logDirect("Farming"); diff --git a/src/main/java/baritone/utils/command/defaults/FindCommand.java b/src/main/java/baritone/utils/command/defaults/FindCommand.java index 2f36ec016..552985a44 100644 --- a/src/main/java/baritone/utils/command/defaults/FindCommand.java +++ b/src/main/java/baritone/utils/command/defaults/FindCommand.java @@ -22,6 +22,7 @@ import baritone.api.Settings; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.command.Command; import baritone.api.utils.command.datatypes.BlockById; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import net.minecraft.block.Block; @@ -37,9 +38,9 @@ public class FindCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { List toFind = new ArrayList<>(); - while (args.has()) { + while (args.hasAny()) { toFind.add(args.getDatatypeFor(BlockById.class)); } BetterBlockPos origin = ctx.playerFeet(); diff --git a/src/main/java/baritone/utils/command/defaults/FollowCommand.java b/src/main/java/baritone/utils/command/defaults/FollowCommand.java index 8240be2ea..46f89d754 100644 --- a/src/main/java/baritone/utils/command/defaults/FollowCommand.java +++ b/src/main/java/baritone/utils/command/defaults/FollowCommand.java @@ -24,6 +24,7 @@ import baritone.api.utils.command.datatypes.EntityClassById; import baritone.api.utils.command.datatypes.IDatatype; import baritone.api.utils.command.datatypes.IDatatypeFor; import baritone.api.utils.command.datatypes.PlayerByUsername; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper; import net.minecraft.entity.Entity; @@ -43,7 +44,7 @@ public class FollowCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMin(1); FollowGroup group; FollowList list; @@ -55,7 +56,7 @@ public class FollowCommand extends Command { args.requireMin(2); group = null; list = args.getEnum(FollowList.class); - while (args.has()) { + while (args.hasAny()) { //noinspection unchecked Object gotten = args.getDatatypeFor(list.datatype); if (gotten instanceof Class) { @@ -90,7 +91,7 @@ public class FollowCommand extends Command { } @Override - protected Stream tabCompleted(String label, ArgConsumer args, Settings settings) { + protected Stream tabCompleted(String label, ArgConsumer args, Settings settings) throws CommandException { if (args.hasExactlyOne()) { return new TabCompleteHelper() .append(FollowGroup.class) diff --git a/src/main/java/baritone/utils/command/defaults/ForceCancelCommand.java b/src/main/java/baritone/utils/command/defaults/ForceCancelCommand.java index 6c6c740c1..6596749de 100644 --- a/src/main/java/baritone/utils/command/defaults/ForceCancelCommand.java +++ b/src/main/java/baritone/utils/command/defaults/ForceCancelCommand.java @@ -21,6 +21,7 @@ import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.behavior.IPathingBehavior; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import java.util.Arrays; @@ -34,7 +35,7 @@ public class ForceCancelCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(0); IPathingBehavior pathingBehavior = baritone.getPathingBehavior(); pathingBehavior.cancelEverything(); diff --git a/src/main/java/baritone/utils/command/defaults/GcCommand.java b/src/main/java/baritone/utils/command/defaults/GcCommand.java index a0acf98fb..aa29d667e 100644 --- a/src/main/java/baritone/utils/command/defaults/GcCommand.java +++ b/src/main/java/baritone/utils/command/defaults/GcCommand.java @@ -20,6 +20,7 @@ package baritone.utils.command.defaults; import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import java.util.Arrays; @@ -33,7 +34,7 @@ public class GcCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(0); System.gc(); logDirect("ok called System.gc()"); diff --git a/src/main/java/baritone/utils/command/defaults/GoalCommand.java b/src/main/java/baritone/utils/command/defaults/GoalCommand.java index e3da63306..bd50e33e3 100644 --- a/src/main/java/baritone/utils/command/defaults/GoalCommand.java +++ b/src/main/java/baritone/utils/command/defaults/GoalCommand.java @@ -25,6 +25,7 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.command.Command; import baritone.api.utils.command.datatypes.RelativeCoordinate; import baritone.api.utils.command.datatypes.RelativeGoal; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper; @@ -39,9 +40,9 @@ public class GoalCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { ICustomGoalProcess goalProcess = baritone.getCustomGoalProcess(); - if (args.has() && Arrays.asList("reset", "clear", "none").contains(args.peekString())) { + if (args.hasAny() && Arrays.asList("reset", "clear", "none").contains(args.peekString())) { args.requireMax(1); if (goalProcess.getGoal() != null) { goalProcess.setGoal(null); @@ -59,7 +60,7 @@ public class GoalCommand extends Command { } @Override - protected Stream tabCompleted(String label, ArgConsumer args, Settings settings) { + protected Stream tabCompleted(String label, ArgConsumer args, Settings settings) throws CommandException { TabCompleteHelper helper = new TabCompleteHelper(); if (args.hasExactlyOne()) { helper.append(Stream.of("reset", "clear", "none", "~")); diff --git a/src/main/java/baritone/utils/command/defaults/HelpCommand.java b/src/main/java/baritone/utils/command/defaults/HelpCommand.java index 716e72eaf..6b02fa305 100644 --- a/src/main/java/baritone/utils/command/defaults/HelpCommand.java +++ b/src/main/java/baritone/utils/command/defaults/HelpCommand.java @@ -20,6 +20,7 @@ package baritone.utils.command.defaults; import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.exception.CommandNotFoundException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import baritone.api.utils.command.helpers.pagination.Paginator; @@ -46,9 +47,9 @@ public class HelpCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(1); - if (!args.has() || args.is(Integer.class)) { + if (!args.hasAny() || args.is(Integer.class)) { Paginator.paginate( args, new Paginator<>( CommandManager.REGISTRY.descendingStream() @@ -99,7 +100,7 @@ public class HelpCommand extends Command { } @Override - protected Stream tabCompleted(String label, ArgConsumer args, Settings settings) { + protected Stream tabCompleted(String label, ArgConsumer args, Settings settings) throws CommandException { if (args.hasExactlyOne()) { return new TabCompleteHelper().addCommands().filterPrefix(args.getString()).stream(); } diff --git a/src/main/java/baritone/utils/command/defaults/InvertCommand.java b/src/main/java/baritone/utils/command/defaults/InvertCommand.java index 1f3b1b982..6a8d3f069 100644 --- a/src/main/java/baritone/utils/command/defaults/InvertCommand.java +++ b/src/main/java/baritone/utils/command/defaults/InvertCommand.java @@ -23,6 +23,7 @@ import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalInverted; import baritone.api.process.ICustomGoalProcess; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.exception.CommandInvalidStateException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; @@ -37,7 +38,7 @@ public class InvertCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(0); ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess(); Goal goal; diff --git a/src/main/java/baritone/utils/command/defaults/MineCommand.java b/src/main/java/baritone/utils/command/defaults/MineCommand.java index c9602a906..473296c9f 100644 --- a/src/main/java/baritone/utils/command/defaults/MineCommand.java +++ b/src/main/java/baritone/utils/command/defaults/MineCommand.java @@ -23,6 +23,7 @@ import baritone.api.utils.BlockOptionalMeta; import baritone.api.utils.command.Command; import baritone.api.utils.command.datatypes.BlockById; import baritone.api.utils.command.datatypes.ForBlockOptionalMeta; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import baritone.cache.WorldScanner; @@ -38,11 +39,11 @@ public class MineCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { int quantity = args.getAsOrDefault(Integer.class, 0); args.requireMin(1); List boms = new ArrayList<>(); - while (args.has()) { + while (args.hasAny()) { boms.add(args.getDatatypeFor(ForBlockOptionalMeta.class)); } WorldScanner.INSTANCE.repack(ctx); diff --git a/src/main/java/baritone/utils/command/defaults/PathCommand.java b/src/main/java/baritone/utils/command/defaults/PathCommand.java index 45172299d..b5972e6b7 100644 --- a/src/main/java/baritone/utils/command/defaults/PathCommand.java +++ b/src/main/java/baritone/utils/command/defaults/PathCommand.java @@ -24,6 +24,7 @@ import baritone.api.process.ICustomGoalProcess; import baritone.api.utils.command.Command; import baritone.api.utils.command.datatypes.RelativeCoordinate; import baritone.api.utils.command.datatypes.RelativeGoal; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.exception.CommandInvalidStateException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper; @@ -40,10 +41,10 @@ public class PathCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess(); Goal goal; - if (args.has()) { + if (args.hasAny()) { args.requireMax(3); goal = args.getDatatype(RelativeGoal.class).apply(ctx.playerFeet()); } else if ((goal = customGoalProcess.getGoal()) == null) { @@ -56,8 +57,8 @@ public class PathCommand extends Command { } @Override - protected Stream tabCompleted(String label, ArgConsumer args, Settings settings) { - if (args.has() && !args.has(4)) { + protected Stream tabCompleted(String label, ArgConsumer args, Settings settings) throws CommandException { + if (args.hasAny() && !args.has(4)) { while (args.has(2)) { if (args.peekDatatypeOrNull(RelativeCoordinate.class) == null) { break; diff --git a/src/main/java/baritone/utils/command/defaults/PauseResumeCommands.java b/src/main/java/baritone/utils/command/defaults/PauseResumeCommands.java index ce2211904..06e913772 100644 --- a/src/main/java/baritone/utils/command/defaults/PauseResumeCommands.java +++ b/src/main/java/baritone/utils/command/defaults/PauseResumeCommands.java @@ -23,6 +23,7 @@ import baritone.api.process.IBaritoneProcess; import baritone.api.process.PathingCommand; import baritone.api.process.PathingCommandType; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.exception.CommandInvalidStateException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; @@ -81,7 +82,7 @@ public class PauseResumeCommands { ); pauseCommand = new Command(baritone, "pause") { @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(0); if (paused[0]) { throw new CommandInvalidStateException("Already paused"); @@ -114,7 +115,7 @@ public class PauseResumeCommands { }; resumeCommand = new Command(baritone, "resume") { @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(0); if (!paused[0]) { throw new CommandInvalidStateException("Not paused"); @@ -145,7 +146,7 @@ public class PauseResumeCommands { }; pausedCommand = new Command(baritone, "paused") { @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(0); logDirect(String.format("Baritone is %spaused", paused[0] ? "" : "not ")); } diff --git a/src/main/java/baritone/utils/command/defaults/ProcCommand.java b/src/main/java/baritone/utils/command/defaults/ProcCommand.java index d5d5b156c..09c0b0c44 100644 --- a/src/main/java/baritone/utils/command/defaults/ProcCommand.java +++ b/src/main/java/baritone/utils/command/defaults/ProcCommand.java @@ -23,6 +23,7 @@ import baritone.api.pathing.calc.IPathingControlManager; import baritone.api.process.IBaritoneProcess; import baritone.api.process.PathingCommand; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.exception.CommandInvalidStateException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; @@ -37,7 +38,7 @@ public class ProcCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(0); IPathingControlManager pathingControlManager = baritone.getPathingControlManager(); IBaritoneProcess process = pathingControlManager.mostRecentInControl().orElse(null); diff --git a/src/main/java/baritone/utils/command/defaults/ReloadAllCommand.java b/src/main/java/baritone/utils/command/defaults/ReloadAllCommand.java index 37640fbd0..877be0b63 100644 --- a/src/main/java/baritone/utils/command/defaults/ReloadAllCommand.java +++ b/src/main/java/baritone/utils/command/defaults/ReloadAllCommand.java @@ -20,6 +20,7 @@ package baritone.utils.command.defaults; import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import java.util.Arrays; @@ -33,7 +34,7 @@ public class ReloadAllCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(0); ctx.worldData().getCachedWorld().reloadAllFromDisk(); logDirect("Reloaded"); diff --git a/src/main/java/baritone/utils/command/defaults/RenderCommand.java b/src/main/java/baritone/utils/command/defaults/RenderCommand.java index 494104ec9..92aedc43d 100644 --- a/src/main/java/baritone/utils/command/defaults/RenderCommand.java +++ b/src/main/java/baritone/utils/command/defaults/RenderCommand.java @@ -21,6 +21,7 @@ import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import java.util.Arrays; @@ -34,7 +35,7 @@ public class RenderCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(0); BetterBlockPos origin = ctx.playerFeet(); int renderDistance = (mc.gameSettings.renderDistanceChunks + 1) * 16; diff --git a/src/main/java/baritone/utils/command/defaults/RepackCommand.java b/src/main/java/baritone/utils/command/defaults/RepackCommand.java index 1c5a79f73..90c131e97 100644 --- a/src/main/java/baritone/utils/command/defaults/RepackCommand.java +++ b/src/main/java/baritone/utils/command/defaults/RepackCommand.java @@ -20,6 +20,7 @@ package baritone.utils.command.defaults; import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import baritone.cache.WorldScanner; @@ -34,7 +35,7 @@ public class RepackCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(0); logDirect(String.format("Queued %d chunks for repacking", WorldScanner.INSTANCE.repack(ctx))); } diff --git a/src/main/java/baritone/utils/command/defaults/SaveAllCommand.java b/src/main/java/baritone/utils/command/defaults/SaveAllCommand.java index 926014677..6729e968a 100644 --- a/src/main/java/baritone/utils/command/defaults/SaveAllCommand.java +++ b/src/main/java/baritone/utils/command/defaults/SaveAllCommand.java @@ -20,6 +20,7 @@ package baritone.utils.command.defaults; import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import java.util.Arrays; @@ -33,7 +34,7 @@ public class SaveAllCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(0); ctx.worldData().getCachedWorld().save(); logDirect("Saved"); diff --git a/src/main/java/baritone/utils/command/defaults/SchematicaCommand.java b/src/main/java/baritone/utils/command/defaults/SchematicaCommand.java index 18e51738f..53ba4c1d5 100644 --- a/src/main/java/baritone/utils/command/defaults/SchematicaCommand.java +++ b/src/main/java/baritone/utils/command/defaults/SchematicaCommand.java @@ -20,6 +20,7 @@ package baritone.utils.command.defaults; import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import java.util.Arrays; @@ -33,7 +34,7 @@ public class SchematicaCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(0); baritone.getBuilderProcess().buildOpenSchematic(); } diff --git a/src/main/java/baritone/utils/command/defaults/SelCommand.java b/src/main/java/baritone/utils/command/defaults/SelCommand.java index 7bd0fa2cd..7895586bb 100644 --- a/src/main/java/baritone/utils/command/defaults/SelCommand.java +++ b/src/main/java/baritone/utils/command/defaults/SelCommand.java @@ -33,6 +33,7 @@ import baritone.api.utils.command.Command; import baritone.api.utils.command.datatypes.ForBlockOptionalMeta; import baritone.api.utils.command.datatypes.ForEnumFacing; import baritone.api.utils.command.datatypes.RelativeBlockPos; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.exception.CommandInvalidStateException; import baritone.api.utils.command.exception.CommandInvalidTypeException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; @@ -75,7 +76,7 @@ public class SelCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { Action action = Action.getByName(args.getString()); if (action == null) { throw new CommandInvalidTypeException(args.consumed(), "an action"); @@ -85,7 +86,7 @@ public class SelCommand extends Command { throw new CommandInvalidStateException("Set pos1 first before using pos2"); } BetterBlockPos playerPos = mc.getRenderViewEntity() != null ? BetterBlockPos.from(new BlockPos(mc.getRenderViewEntity())) : ctx.playerFeet(); - BetterBlockPos pos = args.has() ? args.getDatatypePost(RelativeBlockPos.class, playerPos) : playerPos; + BetterBlockPos pos = args.hasAny() ? args.getDatatypePost(RelativeBlockPos.class, playerPos) : playerPos; args.requireMax(0); if (action == Action.POS1) { pos1 = pos; @@ -186,7 +187,7 @@ public class SelCommand extends Command { } @Override - protected Stream tabCompleted(String label, ArgConsumer args, Settings settings) { + protected Stream tabCompleted(String label, ArgConsumer args, Settings settings) throws CommandException { if (args.hasExactlyOne()) { return new TabCompleteHelper() .append(Action.getAllNames()) diff --git a/src/main/java/baritone/utils/command/defaults/SetCommand.java b/src/main/java/baritone/utils/command/defaults/SetCommand.java index dbcfbae0d..294fe0ce4 100644 --- a/src/main/java/baritone/utils/command/defaults/SetCommand.java +++ b/src/main/java/baritone/utils/command/defaults/SetCommand.java @@ -21,6 +21,7 @@ import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.utils.SettingsUtil; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.exception.CommandInvalidTypeException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import baritone.api.utils.command.helpers.pagination.Paginator; @@ -48,8 +49,8 @@ public class SetCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { - String arg = args.has() ? args.getString().toLowerCase(Locale.US) : "list"; + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { + String arg = args.hasAny() ? args.getString().toLowerCase(Locale.US) : "list"; if (Arrays.asList("s", "save").contains(arg)) { SettingsUtil.save(settings); logDirect("Settings saved"); @@ -59,7 +60,7 @@ public class SetCommand extends Command { boolean viewAll = Arrays.asList("all", "l", "list").contains(arg); boolean paginate = viewModified || viewAll; if (paginate) { - String search = args.has() && args.peekAsOrNull(Integer.class) == null ? args.getString() : ""; + String search = args.hasAny() && args.peekAsOrNull(Integer.class) == null ? args.getString() : ""; args.requireMax(1); List toPaginate = (viewModified ? SettingsUtil.modifiedSettings(settings) : settings.allSettings).stream() @@ -104,7 +105,7 @@ public class SetCommand extends Command { boolean toggling = arg.equalsIgnoreCase("toggle"); boolean doingSomething = resetting || toggling; if (resetting) { - if (!args.has()) { + if (!args.hasAny()) { logDirect("Please specify 'all' as an argument to reset to confirm you'd really like to do this"); logDirect("ALL settings will be reset. Use the 'set modified' or 'modified' commands to see what will be reset."); logDirect("Specify a setting name instead of 'all' to only reset one setting"); @@ -126,7 +127,7 @@ public class SetCommand extends Command { if (setting == null) { throw new CommandInvalidTypeException(args.consumed(), "a valid setting"); } - if (!doingSomething && !args.has()) { + if (!doingSomething && !args.hasAny()) { logDirect(String.format("Value of setting %s:", setting.getName())); logDirect(settingValueToString(setting)); } else { @@ -184,8 +185,8 @@ public class SetCommand extends Command { } @Override - protected Stream tabCompleted(String label, ArgConsumer args, Settings settings) { - if (args.has()) { + protected Stream tabCompleted(String label, ArgConsumer args, Settings settings) throws CommandException { + if (args.hasAny()) { String arg = args.getString(); if (args.hasExactlyOne() && !Arrays.asList("s", "save").contains(args.peekString().toLowerCase(Locale.US))) { if (arg.equalsIgnoreCase("reset")) { @@ -214,7 +215,7 @@ public class SetCommand extends Command { return Stream.of(settingValueToString(setting)); } } - } else if (!args.has()) { + } else if (!args.hasAny()) { return new TabCompleteHelper() .addSettings() .sortAlphabetically() diff --git a/src/main/java/baritone/utils/command/defaults/ThisWayCommand.java b/src/main/java/baritone/utils/command/defaults/ThisWayCommand.java index 80c3d69b7..2cbde830a 100644 --- a/src/main/java/baritone/utils/command/defaults/ThisWayCommand.java +++ b/src/main/java/baritone/utils/command/defaults/ThisWayCommand.java @@ -21,6 +21,7 @@ import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.pathing.goals.GoalXZ; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import java.util.Arrays; @@ -34,7 +35,7 @@ public class ThisWayCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireExactly(1); GoalXZ goal = GoalXZ.fromDirection( ctx.playerFeetAsVec(), diff --git a/src/main/java/baritone/utils/command/defaults/TunnelCommand.java b/src/main/java/baritone/utils/command/defaults/TunnelCommand.java index dbed314d8..5f1dca558 100644 --- a/src/main/java/baritone/utils/command/defaults/TunnelCommand.java +++ b/src/main/java/baritone/utils/command/defaults/TunnelCommand.java @@ -22,6 +22,7 @@ import baritone.api.Settings; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalStrictDirection; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; import java.util.Arrays; @@ -35,7 +36,7 @@ public class TunnelCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(0); Goal goal = new GoalStrictDirection( ctx.playerFeet(), diff --git a/src/main/java/baritone/utils/command/defaults/VersionCommand.java b/src/main/java/baritone/utils/command/defaults/VersionCommand.java index 6e8812a4e..80170a424 100644 --- a/src/main/java/baritone/utils/command/defaults/VersionCommand.java +++ b/src/main/java/baritone/utils/command/defaults/VersionCommand.java @@ -20,6 +20,7 @@ package baritone.utils.command.defaults; import baritone.api.IBaritone; import baritone.api.Settings; import baritone.api.utils.command.Command; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.exception.CommandInvalidStateException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; @@ -34,7 +35,7 @@ public class VersionCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { args.requireMax(0); String version = getClass().getPackage().getImplementationVersion(); if (version == null) { diff --git a/src/main/java/baritone/utils/command/defaults/WaypointsCommand.java b/src/main/java/baritone/utils/command/defaults/WaypointsCommand.java index c94d757d0..3af2ebd9b 100644 --- a/src/main/java/baritone/utils/command/defaults/WaypointsCommand.java +++ b/src/main/java/baritone/utils/command/defaults/WaypointsCommand.java @@ -27,6 +27,7 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.command.Command; import baritone.api.utils.command.datatypes.ForWaypoints; import baritone.api.utils.command.datatypes.RelativeBlockPos; +import baritone.api.utils.command.exception.CommandException; import baritone.api.utils.command.exception.CommandInvalidStateException; import baritone.api.utils.command.exception.CommandInvalidTypeException; import baritone.api.utils.command.helpers.arguments.ArgConsumer; @@ -52,8 +53,8 @@ public class WaypointsCommand extends Command { } @Override - protected void executed(String label, ArgConsumer args, Settings settings) { - Action action = args.has() ? Action.getByName(args.getString()) : Action.LIST; + protected void executed(String label, ArgConsumer args, Settings settings) throws CommandException { + Action action = args.hasAny() ? Action.getByName(args.getString()) : Action.LIST; if (action == null) { throw new CommandInvalidTypeException(args.consumed(), "an action"); } @@ -90,7 +91,7 @@ public class WaypointsCommand extends Command { Function transform = waypoint -> toComponent.apply(waypoint, action == Action.LIST ? Action.INFO : action); if (action == Action.LIST) { - IWaypoint.Tag tag = args.has() ? IWaypoint.Tag.getByName(args.peekString()) : null; + IWaypoint.Tag tag = args.hasAny() ? IWaypoint.Tag.getByName(args.peekString()) : null; if (tag != null) { args.get(); } @@ -129,8 +130,8 @@ public class WaypointsCommand extends Command { if (tag == null) { throw new CommandInvalidStateException(String.format("'%s' is not a tag ", args.consumedString())); } - String name = args.has() ? args.getString() : ""; - BetterBlockPos pos = args.has() + String name = args.hasAny() ? args.getString() : ""; + BetterBlockPos pos = args.hasAny() ? args.getDatatypePost(RelativeBlockPos.class, ctx.playerFeet()) : ctx.playerFeet(); args.requireMax(0); @@ -151,7 +152,7 @@ public class WaypointsCommand extends Command { } else { IWaypoint[] waypoints = args.getDatatypeFor(ForWaypoints.class); IWaypoint waypoint = null; - if (args.has() && args.peekString().equals("@")) { + if (args.hasAny() && args.peekString().equals("@")) { args.requireExactly(2); args.get(); long timestamp = args.getAs(Long.class); @@ -241,8 +242,8 @@ public class WaypointsCommand extends Command { } @Override - protected Stream tabCompleted(String label, ArgConsumer args, Settings settings) { - if (args.has()) { + protected Stream tabCompleted(String label, ArgConsumer args, Settings settings) throws CommandException { + if (args.hasAny()) { if (args.hasExactlyOne()) { return new TabCompleteHelper() .append(Action.getAllNames())