ArgConsumer API separation

This commit is contained in:
Brady
2019-10-04 08:55:02 -05:00
parent 089c5fb095
commit 3a3d880d81
62 changed files with 1025 additions and 696 deletions

View File

@@ -26,12 +26,13 @@ import baritone.api.event.events.TabCompleteEvent;
import baritone.api.event.listener.AbstractGameEventListener;
import baritone.api.utils.Helper;
import baritone.api.utils.SettingsUtil;
import baritone.api.utils.command.argument.CommandArgument;
import baritone.api.utils.command.argument.ICommandArgument;
import baritone.api.utils.command.exception.CommandNotEnoughArgumentsException;
import baritone.api.utils.command.exception.CommandNotFoundException;
import baritone.api.utils.command.helpers.arguments.ArgConsumer;
import baritone.utils.command.helpers.arguments.ArgConsumer;
import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper;
import baritone.api.utils.command.manager.ICommandManager;
import baritone.utils.command.argument.CommandArguments;
import baritone.utils.command.manager.CommandManager;
import net.minecraft.util.Tuple;
import net.minecraft.util.text.ITextComponent;
@@ -106,7 +107,7 @@ public class BaritoneChatControl implements Helper, AbstractGameEventListener {
if (msg.isEmpty()) {
return this.runCommand("help");
}
Tuple<String, List<CommandArgument>> pair = CommandManager.expand(msg);
Tuple<String, List<ICommandArgument>> pair = CommandManager.expand(msg);
String command = pair.getFirst();
String rest = msg.substring(pair.getFirst().length());
ArgConsumer argc = new ArgConsumer(this.manager, pair.getSecond());
@@ -155,7 +156,7 @@ public class BaritoneChatControl implements Helper, AbstractGameEventListener {
return;
}
String msg = prefix.substring(commandPrefix.length());
List<CommandArgument> args = CommandArgument.from(msg, true);
List<ICommandArgument> args = CommandArguments.from(msg, true);
Stream<String> stream = tabComplete(msg);
if (args.size() == 1) {
stream = stream.map(x -> commandPrefix + x);
@@ -165,7 +166,7 @@ public class BaritoneChatControl implements Helper, AbstractGameEventListener {
public Stream<String> tabComplete(String msg) {
try {
List<CommandArgument> args = CommandArgument.from(msg, true);
List<ICommandArgument> args = CommandArguments.from(msg, true);
ArgConsumer argc = new ArgConsumer(this.manager, args);
if (argc.hasAtMost(2)) {
if (argc.hasExactly(1)) {

View File

@@ -0,0 +1,97 @@
/*
* 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 <https://www.gnu.org/licenses/>.
*/
package baritone.utils.command.argument;
import baritone.api.utils.command.argparser.ArgParserManager;
import baritone.api.utils.command.argument.ICommandArgument;
import baritone.api.utils.command.exception.CommandInvalidArgumentException;
import baritone.api.utils.command.exception.CommandInvalidTypeException;
import java.util.stream.Stream;
/**
* The default implementation of {@link ICommandArgument}
*
* @author LoganDark
*/
class CommandArgument implements ICommandArgument {
private final int index;
private final String value;
private final String rawRest;
CommandArgument(int index, String value, String rawRest) {
this.index = index;
this.value = value;
this.rawRest = rawRest;
}
@Override
public int getIndex() {
return this.index;
}
@Override
public String getValue() {
return this.value;
}
@Override
public String getRawRest() {
return this.rawRest;
}
@Override
public <E extends Enum<?>> E getEnum(Class<E> enumClass) throws CommandInvalidTypeException {
return Stream.of(enumClass.getEnumConstants())
.filter(e -> e.name().equalsIgnoreCase(value))
.findFirst()
.orElseThrow(() -> new CommandInvalidTypeException(this, enumClass.getSimpleName()));
}
@Override
public <T> T getAs(Class<T> type) throws CommandInvalidTypeException {
return ArgParserManager.parseStateless(type, this);
}
@Override
public <T> boolean is(Class<T> type) {
try {
getAs(type);
return true;
} catch (Throwable t) {
return false;
}
}
@SuppressWarnings("UnusedReturnValue")
@Override
public <T, S> T getAs(Class<T> type, Class<S> stateType, S state) throws CommandInvalidTypeException {
return ArgParserManager.parseStated(type, stateType, this, state);
}
@Override
public <T, S> boolean is(Class<T> type, Class<S> stateType, S state) {
try {
getAs(type, stateType, state);
return true;
} catch (Throwable t) {
return false;
}
}
}

View File

@@ -0,0 +1,79 @@
/*
* 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 <https://www.gnu.org/licenses/>.
*/
package baritone.utils.command.argument;
import baritone.api.utils.command.argument.ICommandArgument;
import baritone.api.utils.command.exception.CommandInvalidArgumentException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author LoganDark
*/
public final class CommandArguments {
private CommandArguments() {}
private static final Pattern ARG_PATTERN = Pattern.compile("\\S+");
/**
* Turn a string into a list of {@link ICommandArgument}s. This is needed because of {@link ICommandArgument#getRawRest()}
*
* @param string The string to convert
* @param preserveEmptyLast If the string ends with whitespace, add an empty {@link ICommandArgument} to the end This
* is useful for tab completion
* @return A list of {@link ICommandArgument}s
*/
public static List<ICommandArgument> from(String string, boolean preserveEmptyLast) {
List<ICommandArgument> args = new ArrayList<>();
Matcher argMatcher = ARG_PATTERN.matcher(string);
int lastEnd = -1;
while (argMatcher.find()) {
args.add(new CommandArgument(
args.size(),
argMatcher.group(),
string.substring(argMatcher.start())
));
lastEnd = argMatcher.end();
}
if (preserveEmptyLast && lastEnd < string.length()) {
args.add(new CommandArgument(args.size(), "", ""));
}
return args;
}
/**
* @see #from(String, boolean)
*/
public static List<ICommandArgument> from(String string) {
return from(string, false);
}
/**
* Returns an "unknown" {@link CommandArgument}. This shouldn't be used unless you absolutely have no information -
* ESPECIALLY not with {@link CommandInvalidArgumentException}s
*
* @return The unknown {@link CommandArgument}
*/
public static CommandArgument unknown() {
return new CommandArgument(-1, "<unknown>", "");
}
}

View File

@@ -22,7 +22,7 @@ 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 baritone.api.utils.command.helpers.arguments.IArgConsumer;
import java.util.Arrays;
import java.util.List;
@@ -35,7 +35,7 @@ public class AxisCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
Goal goal = new GoalAxis();
baritone.getCustomGoalProcess().setGoal(goal);
@@ -43,7 +43,7 @@ public class AxisCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}

View File

@@ -22,7 +22,7 @@ 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;
import baritone.api.utils.command.helpers.arguments.IArgConsumer;
import java.util.Arrays;
import java.util.List;
@@ -35,7 +35,7 @@ public class BlacklistCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
IGetToBlockProcess proc = baritone.getGetToBlockProcess();
if (!proc.isActive()) {
@@ -49,7 +49,7 @@ public class BlacklistCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}

View File

@@ -24,7 +24,7 @@ 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 baritone.api.utils.command.helpers.arguments.IArgConsumer;
import net.minecraft.client.Minecraft;
import java.io.File;
@@ -42,7 +42,7 @@ public class BuildCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
File file = args.getDatatypePost(RelativeFile.INSTANCE, schematicsDir).getAbsoluteFile();
if (!file.getName().toLowerCase(Locale.US).endsWith(".schematic")) {
file = new File(file.getAbsolutePath() + ".schematic");
@@ -64,7 +64,7 @@ public class BuildCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) throws CommandException {
public Stream<String> tabComplete(String label, IArgConsumer args) throws CommandException {
if (args.hasExactlyOne()) {
return RelativeFile.tabComplete(args, schematicsDir);
} else if (args.has(2)) {

View File

@@ -20,7 +20,7 @@ package baritone.utils.command.defaults;
import baritone.api.IBaritone;
import baritone.api.utils.command.Command;
import baritone.api.utils.command.exception.CommandException;
import baritone.api.utils.command.helpers.arguments.ArgConsumer;
import baritone.api.utils.command.helpers.arguments.IArgConsumer;
import java.util.Arrays;
import java.util.List;
@@ -33,14 +33,14 @@ public class CancelCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
baritone.getPathingBehavior().cancelEverything();
logDirect("ok canceled");
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}

View File

@@ -23,7 +23,7 @@ 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 baritone.api.utils.command.helpers.arguments.IArgConsumer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
@@ -41,7 +41,7 @@ public class ChestsCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
Set<Map.Entry<BlockPos, IRememberedInventory>> entries =
ctx.worldData().getContainerMemory().getRememberedInventories().entrySet();
@@ -62,7 +62,7 @@ public class ChestsCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}

View File

@@ -20,7 +20,7 @@ package baritone.utils.command.defaults;
import baritone.api.IBaritone;
import baritone.api.utils.command.Command;
import baritone.api.utils.command.exception.CommandException;
import baritone.api.utils.command.helpers.arguments.ArgConsumer;
import baritone.api.utils.command.helpers.arguments.IArgConsumer;
import java.util.Arrays;
import java.util.List;
@@ -33,14 +33,14 @@ public class ClickCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
baritone.openClick();
logDirect("aight dude");
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}

View File

@@ -22,7 +22,7 @@ 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 baritone.api.utils.command.helpers.arguments.IArgConsumer;
import net.minecraft.entity.Entity;
import net.minecraft.util.math.BlockPos;
@@ -37,7 +37,7 @@ public class ComeCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
Entity entity = mc.getRenderViewEntity();
if (entity == null) {
@@ -48,7 +48,7 @@ public class ComeCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}

View File

@@ -19,7 +19,7 @@ package baritone.utils.command.defaults;
import baritone.api.IBaritone;
import baritone.api.utils.command.Command;
import baritone.api.utils.command.helpers.arguments.ArgConsumer;
import baritone.api.utils.command.helpers.arguments.IArgConsumer;
import java.util.Collections;
import java.util.List;
@@ -43,12 +43,12 @@ public class CommandAlias extends Command {
}
@Override
public void execute(String label, ArgConsumer args) {
public void execute(String label, IArgConsumer args) {
this.baritone.getCommandManager().execute(String.format("%s %s", target, args.rawRest()));
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return this.baritone.getCommandManager().tabComplete(String.format("%s %s", target, args.rawRest()));
}

View File

@@ -22,7 +22,7 @@ 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 baritone.api.utils.command.helpers.arguments.IArgConsumer;
import java.util.Arrays;
import java.util.List;
@@ -35,7 +35,7 @@ public class ExploreCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
if (args.hasAny()) {
args.requireExactly(2);
} else {
@@ -49,7 +49,7 @@ public class ExploreCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
if (args.hasAtMost(2)) {
return args.tabCompleteDatatype(RelativeGoalXZ.INSTANCE);
}

View File

@@ -23,7 +23,7 @@ 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;
import baritone.api.utils.command.helpers.arguments.IArgConsumer;
import com.google.gson.JsonSyntaxException;
import java.io.File;
@@ -39,7 +39,7 @@ public class ExploreFilterCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(2);
File file = args.getDatatypePost(RelativeFile.INSTANCE, mc.gameDir.getAbsoluteFile().getParentFile());
boolean invert = false;
@@ -63,7 +63,7 @@ public class ExploreFilterCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) throws CommandException {
public Stream<String> tabComplete(String label, IArgConsumer args) throws CommandException {
if (args.hasExactlyOne()) {
return RelativeFile.tabComplete(args, RelativeFile.gameDir());
}

View File

@@ -20,7 +20,7 @@ package baritone.utils.command.defaults;
import baritone.api.IBaritone;
import baritone.api.utils.command.Command;
import baritone.api.utils.command.exception.CommandException;
import baritone.api.utils.command.helpers.arguments.ArgConsumer;
import baritone.api.utils.command.helpers.arguments.IArgConsumer;
import java.util.Arrays;
import java.util.List;
@@ -33,14 +33,14 @@ public class FarmCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
baritone.getFarmProcess().farm();
logDirect("Farming");
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}

View File

@@ -22,7 +22,7 @@ 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 baritone.api.utils.command.helpers.arguments.IArgConsumer;
import net.minecraft.block.Block;
import java.util.ArrayList;
@@ -37,7 +37,7 @@ public class FindCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
List<Block> toFind = new ArrayList<>();
while (args.hasAny()) {
toFind.add(args.getDatatypeFor(BlockById.INSTANCE));
@@ -59,7 +59,7 @@ public class FindCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return args.tabCompleteDatatype(BlockById.INSTANCE);
}

View File

@@ -23,7 +23,7 @@ import baritone.api.utils.command.datatypes.EntityClassById;
import baritone.api.utils.command.datatypes.IDatatypeFor;
import baritone.api.utils.command.datatypes.NearbyPlayer;
import baritone.api.utils.command.exception.CommandException;
import baritone.api.utils.command.helpers.arguments.ArgConsumer;
import baritone.api.utils.command.helpers.arguments.IArgConsumer;
import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityList;
@@ -42,7 +42,7 @@ public class FollowCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMin(1);
FollowGroup group;
FollowList list;
@@ -88,7 +88,7 @@ public class FollowCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) throws CommandException {
public Stream<String> tabComplete(String label, IArgConsumer args) throws CommandException {
if (args.hasExactlyOne()) {
return new TabCompleteHelper()
.append(FollowGroup.class)

View File

@@ -21,7 +21,7 @@ import baritone.api.IBaritone;
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 baritone.api.utils.command.helpers.arguments.IArgConsumer;
import java.util.Arrays;
import java.util.List;
@@ -34,7 +34,7 @@ public class ForceCancelCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
IPathingBehavior pathingBehavior = baritone.getPathingBehavior();
pathingBehavior.cancelEverything();
@@ -43,7 +43,7 @@ public class ForceCancelCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}

View File

@@ -20,7 +20,7 @@ package baritone.utils.command.defaults;
import baritone.api.IBaritone;
import baritone.api.utils.command.Command;
import baritone.api.utils.command.exception.CommandException;
import baritone.api.utils.command.helpers.arguments.ArgConsumer;
import baritone.api.utils.command.helpers.arguments.IArgConsumer;
import java.util.Arrays;
import java.util.List;
@@ -33,14 +33,14 @@ public class GcCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
System.gc();
logDirect("ok called System.gc()");
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}

View File

@@ -25,7 +25,7 @@ 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.arguments.IArgConsumer;
import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper;
import java.util.Arrays;
@@ -39,7 +39,7 @@ public class GoalCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
ICustomGoalProcess goalProcess = baritone.getCustomGoalProcess();
if (args.hasAny() && Arrays.asList("reset", "clear", "none").contains(args.peekString())) {
args.requireMax(1);
@@ -59,7 +59,7 @@ public class GoalCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) throws CommandException {
public Stream<String> tabComplete(String label, IArgConsumer args) throws CommandException {
TabCompleteHelper helper = new TabCompleteHelper();
if (args.hasExactlyOne()) {
helper.append("reset", "clear", "none", "~");

View File

@@ -21,7 +21,7 @@ import baritone.api.IBaritone;
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.arguments.IArgConsumer;
import baritone.api.utils.command.helpers.pagination.Paginator;
import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper;
import net.minecraft.util.text.ITextComponent;
@@ -44,7 +44,7 @@ public class HelpCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(1);
if (!args.hasAny() || args.is(Integer.class)) {
Paginator.paginate(
@@ -97,7 +97,7 @@ public class HelpCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) throws CommandException {
public Stream<String> tabComplete(String label, IArgConsumer args) throws CommandException {
if (args.hasExactlyOne()) {
return new TabCompleteHelper()
.addCommands(this.baritone.getCommandManager())

View File

@@ -24,7 +24,7 @@ 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;
import baritone.api.utils.command.helpers.arguments.IArgConsumer;
import java.util.Arrays;
import java.util.List;
@@ -37,7 +37,7 @@ public class InvertCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess();
Goal goal;
@@ -54,7 +54,7 @@ public class InvertCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}

View File

@@ -23,7 +23,7 @@ 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.api.utils.command.helpers.arguments.IArgConsumer;
import baritone.cache.WorldScanner;
import java.util.ArrayList;
@@ -38,7 +38,7 @@ public class MineCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
int quantity = args.getAsOrDefault(Integer.class, 0);
args.requireMin(1);
List<BlockOptionalMeta> boms = new ArrayList<>();
@@ -51,7 +51,7 @@ public class MineCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return args.tabCompleteDatatype(BlockById.INSTANCE);
}

View File

@@ -25,7 +25,7 @@ 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.arguments.IArgConsumer;
import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper;
import baritone.cache.WorldScanner;
@@ -40,7 +40,7 @@ public class PathCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess();
Goal goal;
if (args.hasAny()) {
@@ -56,7 +56,7 @@ public class PathCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) throws CommandException {
public Stream<String> tabComplete(String label, IArgConsumer args) throws CommandException {
if (args.hasAny() && !args.has(4)) {
while (args.has(2)) {
if (args.peekDatatypeOrNull(RelativeCoordinate.INSTANCE) == null) {

View File

@@ -24,7 +24,7 @@ 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;
import baritone.api.utils.command.helpers.arguments.IArgConsumer;
import java.util.Arrays;
import java.util.List;
@@ -79,7 +79,7 @@ public class PauseResumeCommands {
);
pauseCommand = new Command(baritone, "pause") {
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
if (paused[0]) {
throw new CommandInvalidStateException("Already paused");
@@ -89,7 +89,7 @@ public class PauseResumeCommands {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}
@@ -112,7 +112,7 @@ public class PauseResumeCommands {
};
resumeCommand = new Command(baritone, "resume") {
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
if (!paused[0]) {
throw new CommandInvalidStateException("Not paused");
@@ -122,7 +122,7 @@ public class PauseResumeCommands {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}
@@ -143,13 +143,13 @@ public class PauseResumeCommands {
};
pausedCommand = new Command(baritone, "paused") {
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
logDirect(String.format("Baritone is %spaused", paused[0] ? "" : "not "));
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}

View File

@@ -24,7 +24,7 @@ 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;
import baritone.api.utils.command.helpers.arguments.IArgConsumer;
import java.util.Arrays;
import java.util.List;
@@ -37,7 +37,7 @@ public class ProcCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
IPathingControlManager pathingControlManager = baritone.getPathingControlManager();
IBaritoneProcess process = pathingControlManager.mostRecentInControl().orElse(null);
@@ -62,7 +62,7 @@ public class ProcCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}

View File

@@ -20,7 +20,7 @@ package baritone.utils.command.defaults;
import baritone.api.IBaritone;
import baritone.api.utils.command.Command;
import baritone.api.utils.command.exception.CommandException;
import baritone.api.utils.command.helpers.arguments.ArgConsumer;
import baritone.api.utils.command.helpers.arguments.IArgConsumer;
import java.util.Arrays;
import java.util.List;
@@ -33,14 +33,14 @@ public class ReloadAllCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
ctx.worldData().getCachedWorld().reloadAllFromDisk();
logDirect("Reloaded");
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}

View File

@@ -21,7 +21,7 @@ import baritone.api.IBaritone;
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 baritone.api.utils.command.helpers.arguments.IArgConsumer;
import java.util.Arrays;
import java.util.List;
@@ -34,7 +34,7 @@ public class RenderCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
BetterBlockPos origin = ctx.playerFeet();
int renderDistance = (mc.gameSettings.renderDistanceChunks + 1) * 16;
@@ -50,7 +50,7 @@ public class RenderCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}

View File

@@ -20,7 +20,7 @@ package baritone.utils.command.defaults;
import baritone.api.IBaritone;
import baritone.api.utils.command.Command;
import baritone.api.utils.command.exception.CommandException;
import baritone.api.utils.command.helpers.arguments.ArgConsumer;
import baritone.api.utils.command.helpers.arguments.IArgConsumer;
import baritone.cache.WorldScanner;
import java.util.Arrays;
@@ -34,13 +34,13 @@ public class RepackCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
logDirect(String.format("Queued %d chunks for repacking", WorldScanner.INSTANCE.repack(ctx)));
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}

View File

@@ -20,7 +20,7 @@ package baritone.utils.command.defaults;
import baritone.api.IBaritone;
import baritone.api.utils.command.Command;
import baritone.api.utils.command.exception.CommandException;
import baritone.api.utils.command.helpers.arguments.ArgConsumer;
import baritone.api.utils.command.helpers.arguments.IArgConsumer;
import java.util.Arrays;
import java.util.List;
@@ -33,14 +33,14 @@ public class SaveAllCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
ctx.worldData().getCachedWorld().save();
logDirect("Saved");
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}

View File

@@ -20,7 +20,7 @@ package baritone.utils.command.defaults;
import baritone.api.IBaritone;
import baritone.api.utils.command.Command;
import baritone.api.utils.command.exception.CommandException;
import baritone.api.utils.command.helpers.arguments.ArgConsumer;
import baritone.api.utils.command.helpers.arguments.IArgConsumer;
import java.util.Arrays;
import java.util.List;
@@ -33,13 +33,13 @@ public class SchematicaCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
baritone.getBuilderProcess().buildOpenSchematic();
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}

View File

@@ -35,7 +35,7 @@ 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;
import baritone.api.utils.command.helpers.arguments.IArgConsumer;
import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper;
import baritone.utils.IRenderer;
import net.minecraft.init.Blocks;
@@ -75,7 +75,7 @@ public class SelCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
Action action = Action.getByName(args.getString());
if (action == null) {
throw new CommandInvalidTypeException(args.consumed(), "an action");
@@ -186,7 +186,7 @@ public class SelCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) throws CommandException {
public Stream<String> tabComplete(String label, IArgConsumer args) throws CommandException {
if (args.hasExactlyOne()) {
return new TabCompleteHelper()
.append(Action.getAllNames())

View File

@@ -24,7 +24,7 @@ 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.arguments.IArgConsumer;
import baritone.api.utils.command.helpers.pagination.Paginator;
import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper;
import net.minecraft.util.text.ITextComponent;
@@ -50,7 +50,7 @@ public class SetCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
String arg = args.hasAny() ? args.getString().toLowerCase(Locale.US) : "list";
if (Arrays.asList("s", "save").contains(arg)) {
SettingsUtil.save(Baritone.settings());
@@ -186,7 +186,7 @@ public class SetCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) throws CommandException {
public Stream<String> tabComplete(String label, IArgConsumer args) throws CommandException {
if (args.hasAny()) {
String arg = args.getString();
if (args.hasExactlyOne() && !Arrays.asList("s", "save").contains(args.peekString().toLowerCase(Locale.US))) {

View File

@@ -21,7 +21,7 @@ import baritone.api.IBaritone;
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 baritone.api.utils.command.helpers.arguments.IArgConsumer;
import java.util.Arrays;
import java.util.List;
@@ -34,7 +34,7 @@ public class ThisWayCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireExactly(1);
GoalXZ goal = GoalXZ.fromDirection(
ctx.playerFeetAsVec(),
@@ -46,7 +46,7 @@ public class ThisWayCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}

View File

@@ -22,7 +22,7 @@ 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 baritone.api.utils.command.helpers.arguments.IArgConsumer;
import java.util.Arrays;
import java.util.List;
@@ -35,7 +35,7 @@ public class TunnelCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
Goal goal = new GoalStrictDirection(
ctx.playerFeet(),
@@ -46,7 +46,7 @@ public class TunnelCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}

View File

@@ -21,7 +21,7 @@ import baritone.api.IBaritone;
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 baritone.api.utils.command.helpers.arguments.IArgConsumer;
import java.util.Arrays;
import java.util.List;
@@ -34,7 +34,7 @@ public class VersionCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
String version = getClass().getPackage().getImplementationVersion();
if (version == null) {
@@ -45,7 +45,7 @@ public class VersionCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) {
public Stream<String> tabComplete(String label, IArgConsumer args) {
return Stream.empty();
}

View File

@@ -29,7 +29,7 @@ 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;
import baritone.api.utils.command.helpers.arguments.IArgConsumer;
import baritone.api.utils.command.helpers.pagination.Paginator;
import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper;
import net.minecraft.util.text.ITextComponent;
@@ -52,7 +52,7 @@ public class WaypointsCommand extends Command {
}
@Override
public void execute(String label, ArgConsumer args) throws CommandException {
public void execute(String label, IArgConsumer args) throws CommandException {
Action action = args.hasAny() ? Action.getByName(args.getString()) : Action.LIST;
if (action == null) {
throw new CommandInvalidTypeException(args.consumed(), "an action");
@@ -241,7 +241,7 @@ public class WaypointsCommand extends Command {
}
@Override
public Stream<String> tabComplete(String label, ArgConsumer args) throws CommandException {
public Stream<String> tabComplete(String label, IArgConsumer args) throws CommandException {
if (args.hasAny()) {
if (args.hasExactlyOne()) {
return new TabCompleteHelper()

View File

@@ -0,0 +1,444 @@
/*
* 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 <https://www.gnu.org/licenses/>.
*/
package baritone.utils.command.helpers.arguments;
import baritone.api.IBaritone;
import baritone.api.utils.command.argument.ICommandArgument;
import baritone.api.utils.command.datatypes.IDatatype;
import baritone.api.utils.command.datatypes.IDatatypeContext;
import baritone.api.utils.command.datatypes.IDatatypeFor;
import baritone.api.utils.command.datatypes.IDatatypePost;
import baritone.api.utils.command.exception.CommandException;
import baritone.api.utils.command.exception.CommandInvalidTypeException;
import baritone.api.utils.command.exception.CommandNotEnoughArgumentsException;
import baritone.api.utils.command.exception.CommandTooManyArgumentsException;
import baritone.api.utils.command.helpers.arguments.IArgConsumer;
import baritone.api.utils.command.manager.ICommandManager;
import baritone.utils.command.argument.CommandArguments;
import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Stream;
public class ArgConsumer implements IArgConsumer {
/**
* The parent {@link ICommandManager} for this {@link IArgConsumer}}. Used by {@link #context}.
*/
private final ICommandManager manager;
/**
* The {@link IDatatypeContext} instance for this {@link IArgConsumer}}, passed to
* datatypes when an operation is performed upon them.
*
* @see IDatatype
* @see IDatatypeContext
*/
private final IDatatypeContext context;
/**
* The list of arguments in this ArgConsumer
*/
private final LinkedList<ICommandArgument> args;
/**
* The list of consumed arguments for this ArgConsumer. The most recently consumed argument is the last one
*/
private final Deque<ICommandArgument> consumed;
private ArgConsumer(ICommandManager manager, Deque<ICommandArgument> args, Deque<ICommandArgument> consumed) {
this.manager = manager;
this.context = this.new Context();
this.args = new LinkedList<>(args);
this.consumed = new LinkedList<>(consumed);
}
public ArgConsumer(ICommandManager manager, List<ICommandArgument> args) {
this(manager, new LinkedList<>(args), new LinkedList<>());
}
@Override
public LinkedList<ICommandArgument> getArgs() {
return this.args;
}
@Override
public Deque<ICommandArgument> getConsumed() {
return this.consumed;
}
@Override
public boolean has(int num) {
return args.size() >= num;
}
@Override
public boolean hasAny() {
return has(1);
}
@Override
public boolean hasAtMost(int num) {
return args.size() <= num;
}
@Override
public boolean hasAtMostOne() {
return hasAtMost(1);
}
@Override
public boolean hasExactly(int num) {
return args.size() == num;
}
@Override
public boolean hasExactlyOne() {
return hasExactly(1);
}
@Override
public ICommandArgument peek(int index) throws CommandNotEnoughArgumentsException {
requireMin(index + 1);
return args.get(index);
}
@Override
public ICommandArgument peek() throws CommandNotEnoughArgumentsException {
return peek(0);
}
@Override
public boolean is(Class<?> type, int index) throws CommandNotEnoughArgumentsException {
return peek(index).is(type);
}
@Override
public boolean is(Class<?> type) throws CommandNotEnoughArgumentsException {
return is(type, 0);
}
@Override
public String peekString(int index) throws CommandNotEnoughArgumentsException {
return peek(index).getValue();
}
@Override
public String peekString() throws CommandNotEnoughArgumentsException {
return peekString(0);
}
@Override
public <E extends Enum<?>> E peekEnum(Class<E> enumClass, int index) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException {
return peek(index).getEnum(enumClass);
}
@Override
public <E extends Enum<?>> E peekEnum(Class<E> enumClass) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException {
return peekEnum(enumClass, 0);
}
@Override
public <E extends Enum<?>> E peekEnumOrNull(Class<E> enumClass, int index) throws CommandNotEnoughArgumentsException {
try {
return peekEnum(enumClass, index);
} catch (CommandInvalidTypeException e) {
return null;
}
}
@Override
public <E extends Enum<?>> E peekEnumOrNull(Class<E> enumClass) throws CommandNotEnoughArgumentsException {
return peekEnumOrNull(enumClass, 0);
}
@Override
public <T> T peekAs(Class<T> type, int index) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException {
return peek(index).getAs(type);
}
@Override
public <T> T peekAs(Class<T> type) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException {
return peekAs(type, 0);
}
@Override
public <T> T peekAsOrDefault(Class<T> type, T def, int index) throws CommandNotEnoughArgumentsException {
try {
return peekAs(type, index);
} catch (CommandInvalidTypeException e) {
return def;
}
}
@Override
public <T> T peekAsOrDefault(Class<T> type, T def) throws CommandNotEnoughArgumentsException {
return peekAsOrDefault(type, def, 0);
}
@Override
public <T> T peekAsOrNull(Class<T> type, int index) throws CommandNotEnoughArgumentsException {
return peekAsOrDefault(type, null, index);
}
@Override
public <T> T peekAsOrNull(Class<T> type) throws CommandNotEnoughArgumentsException {
return peekAsOrNull(type, 0);
}
@Override
public <T> T peekDatatype(IDatatypeFor<T> datatype) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException {
return copy().getDatatypeFor(datatype);
}
@Override
public <T, O> T peekDatatype(IDatatypePost<T, O> datatype) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException {
return this.peekDatatype(datatype, null);
}
@Override
public <T, O> T peekDatatype(IDatatypePost<T, O> datatype, O original) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException {
return copy().getDatatypePost(datatype, original);
}
@Override
public <T> T peekDatatypeOrNull(IDatatypeFor<T> datatype) {
return copy().getDatatypeForOrNull(datatype);
}
@Override
public <T, O> T peekDatatypeOrNull(IDatatypePost<T, O> datatype) {
return copy().getDatatypePostOrNull(datatype, null);
}
@Override
public <T, O, D extends IDatatypePost<T, O>> T peekDatatypePost(D datatype, O original) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException {
return copy().getDatatypePost(datatype, original);
}
@Override
public <T, O, D extends IDatatypePost<T, O>> T peekDatatypePostOrDefault(D datatype, O original, T def) {
return copy().getDatatypePostOrDefault(datatype, original, def);
}
@Override
public <T, O, D extends IDatatypePost<T, O>> T peekDatatypePostOrNull(D datatype, O original) {
return peekDatatypePostOrDefault(datatype, original, null);
}
@Override
public <T, D extends IDatatypeFor<T>> T peekDatatypeFor(Class<D> datatype) {
return copy().peekDatatypeFor(datatype);
}
@Override
public <T, D extends IDatatypeFor<T>> T peekDatatypeForOrDefault(Class<D> datatype, T def) {
return copy().peekDatatypeForOrDefault(datatype, def);
}
@Override
public <T, D extends IDatatypeFor<T>> T peekDatatypeForOrNull(Class<D> datatype) {
return peekDatatypeForOrDefault(datatype, null);
}
@Override
public ICommandArgument get() throws CommandNotEnoughArgumentsException {
requireMin(1);
ICommandArgument arg = args.removeFirst();
consumed.add(arg);
return arg;
}
@Override
public String getString() throws CommandNotEnoughArgumentsException {
return get().getValue();
}
@Override
public <E extends Enum<?>> E getEnum(Class<E> enumClass) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException {
return get().getEnum(enumClass);
}
@Override
public <E extends Enum<?>> E getEnumOrDefault(Class<E> enumClass, E def) throws CommandNotEnoughArgumentsException {
try {
peekEnum(enumClass);
return getEnum(enumClass);
} catch (CommandInvalidTypeException e) {
return def;
}
}
@Override
public <E extends Enum<?>> E getEnumOrNull(Class<E> enumClass) throws CommandNotEnoughArgumentsException {
return getEnumOrDefault(enumClass, null);
}
@Override
public <T> T getAs(Class<T> type) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException {
return get().getAs(type);
}
@Override
public <T> T getAsOrDefault(Class<T> type, T def) throws CommandNotEnoughArgumentsException {
try {
T val = peek().getAs(type);
get();
return val;
} catch (CommandInvalidTypeException e) {
return def;
}
}
@Override
public <T> T getAsOrNull(Class<T> type) throws CommandNotEnoughArgumentsException {
return getAsOrDefault(type, null);
}
@Override
public <T, O, D extends IDatatypePost<T, O>> T getDatatypePost(D datatype, O original) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException {
try {
return datatype.apply(this.context, original);
} catch (Exception e) {
e.printStackTrace();
throw new CommandInvalidTypeException(hasAny() ? peek() : consumed(), datatype.getClass().getSimpleName());
}
}
@Override
public <T, O, D extends IDatatypePost<T, O>> T getDatatypePostOrDefault(D datatype, O original, T _default) {
final List<ICommandArgument> argsSnapshot = new ArrayList<>(this.args);
final List<ICommandArgument> consumedSnapshot = new ArrayList<>(this.consumed);
try {
return this.getDatatypePost(datatype, original);
} catch (Exception e) {
this.args.clear();
this.args.addAll(argsSnapshot);
this.consumed.clear();
this.consumed.addAll(consumedSnapshot);
return _default;
}
}
@Override
public <T, O, D extends IDatatypePost<T, O>> T getDatatypePostOrNull(D datatype, O original) {
return this.getDatatypePostOrDefault(datatype, original, null);
}
@Override
public <T, D extends IDatatypeFor<T>> T getDatatypeFor(D datatype) throws CommandInvalidTypeException, CommandNotEnoughArgumentsException {
try {
return datatype.get(this.context);
} catch (Exception e) {
throw new CommandInvalidTypeException(hasAny() ? peek() : consumed(), datatype.getClass().getSimpleName());
}
}
@Override
public <T, D extends IDatatypeFor<T>> T getDatatypeForOrDefault(D datatype, T def) {
final List<ICommandArgument> argsSnapshot = new ArrayList<>(this.args);
final List<ICommandArgument> consumedSnapshot = new ArrayList<>(this.consumed);
try {
return this.getDatatypeFor(datatype);
} catch (Exception e) {
this.args.clear();
this.args.addAll(argsSnapshot);
this.consumed.clear();
this.consumed.addAll(consumedSnapshot);
return def;
}
}
@Override
public <T, D extends IDatatypeFor<T>> T getDatatypeForOrNull(D datatype) {
return this.getDatatypeForOrDefault(datatype, null);
}
@Override
public <T extends IDatatype> Stream<String> tabCompleteDatatype(T datatype) {
try {
return datatype.tabComplete(this.context);
} catch (Exception e) {
e.printStackTrace();
}
return Stream.empty();
}
@Override
public String rawRest() {
return args.size() > 0 ? args.getFirst().getRawRest() : "";
}
@Override
public void requireMin(int min) throws CommandNotEnoughArgumentsException {
if (args.size() < min) {
throw new CommandNotEnoughArgumentsException(min + consumed.size());
}
}
@Override
public void requireMax(int max) throws CommandTooManyArgumentsException {
if (args.size() > max) {
throw new CommandTooManyArgumentsException(max + consumed.size());
}
}
@Override
public void requireExactly(int args) throws CommandException {
requireMin(args);
requireMax(args);
}
@Override
public boolean hasConsumed() {
return !consumed.isEmpty();
}
@Override
public ICommandArgument consumed() {
return consumed.size() > 0 ? consumed.getLast() : CommandArguments.unknown();
}
@Override
public String consumedString() {
return consumed().getValue();
}
@Override
public ArgConsumer copy() {
return new ArgConsumer(manager, args, consumed);
}
/**
* Implementation of {@link IDatatypeContext} which adapts to the parent {@link IArgConsumer}}
*/
private final class Context implements IDatatypeContext {
@Override
public final IBaritone getBaritone() {
return ArgConsumer.this.manager.getBaritone();
}
@Override
public final ArgConsumer getConsumer() {
return ArgConsumer.this;
}
}
}

View File

@@ -20,13 +20,14 @@ package baritone.utils.command.manager;
import baritone.Baritone;
import baritone.api.IBaritone;
import baritone.api.utils.command.Command;
import baritone.api.utils.command.argument.CommandArgument;
import baritone.api.utils.command.argument.ICommandArgument;
import baritone.api.utils.command.exception.CommandUnhandledException;
import baritone.api.utils.command.exception.ICommandException;
import baritone.api.utils.command.helpers.arguments.ArgConsumer;
import baritone.utils.command.helpers.arguments.ArgConsumer;
import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper;
import baritone.api.utils.command.manager.ICommandManager;
import baritone.api.utils.command.registry.Registry;
import baritone.utils.command.argument.CommandArguments;
import baritone.utils.command.defaults.DefaultCommands;
import net.minecraft.util.Tuple;
@@ -76,7 +77,7 @@ public class CommandManager implements ICommandManager {
}
@Override
public boolean execute(Tuple<String, List<CommandArgument>> expanded) {
public boolean execute(Tuple<String, List<ICommandArgument>> expanded) {
ExecutionWrapper execution = this.from(expanded);
if (execution != null) {
execution.execute();
@@ -85,16 +86,16 @@ public class CommandManager implements ICommandManager {
}
@Override
public Stream<String> tabComplete(Tuple<String, List<CommandArgument>> expanded) {
public Stream<String> tabComplete(Tuple<String, List<ICommandArgument>> expanded) {
ExecutionWrapper execution = this.from(expanded);
return execution == null ? Stream.empty() : execution.tabComplete();
}
@Override
public Stream<String> tabComplete(String prefix) {
Tuple<String, List<CommandArgument>> pair = expand(prefix, true);
Tuple<String, List<ICommandArgument>> pair = expand(prefix, true);
String label = pair.getFirst();
List<CommandArgument> args = pair.getSecond();
List<ICommandArgument> args = pair.getSecond();
if (args.isEmpty()) {
return new TabCompleteHelper()
.addCommands(this.baritone.getCommandManager())
@@ -105,7 +106,7 @@ public class CommandManager implements ICommandManager {
}
}
private ExecutionWrapper from(Tuple<String, List<CommandArgument>> expanded) {
private ExecutionWrapper from(Tuple<String, List<ICommandArgument>> expanded) {
String label = expanded.getFirst();
ArgConsumer args = new ArgConsumer(this, expanded.getSecond());
@@ -113,13 +114,13 @@ public class CommandManager implements ICommandManager {
return command == null ? null : new ExecutionWrapper(command, label, args);
}
private static Tuple<String, List<CommandArgument>> expand(String string, boolean preserveEmptyLast) {
private static Tuple<String, List<ICommandArgument>> expand(String string, boolean preserveEmptyLast) {
String label = string.split("\\s", 2)[0];
List<CommandArgument> args = CommandArgument.from(string.substring(label.length()), preserveEmptyLast);
List<ICommandArgument> args = CommandArguments.from(string.substring(label.length()), preserveEmptyLast);
return new Tuple<>(label, args);
}
public static Tuple<String, List<CommandArgument>> expand(String string) {
public static Tuple<String, List<ICommandArgument>> expand(String string) {
return expand(string, false);
}
@@ -143,7 +144,7 @@ public class CommandManager implements ICommandManager {
? (ICommandException) t
: new CommandUnhandledException(t);
exception.handle(command, args.args);
exception.handle(command, args.getArgs());
}
}