diff --git a/src/api/java/baritone/api/IBaritone.java b/src/api/java/baritone/api/IBaritone.java index 8c5de47a..64c4a291 100644 --- a/src/api/java/baritone/api/IBaritone.java +++ b/src/api/java/baritone/api/IBaritone.java @@ -26,7 +26,7 @@ import baritone.api.process.*; import baritone.api.selection.ISelectionManager; import baritone.api.utils.IInputOverrideHandler; import baritone.api.utils.IPlayerContext; -import baritone.api.utils.command.manager.ICommandManager; +import baritone.api.command.manager.ICommandManager; /** * @author Brady diff --git a/src/api/java/baritone/api/IBaritoneProvider.java b/src/api/java/baritone/api/IBaritoneProvider.java index ac4d623e..24122c12 100644 --- a/src/api/java/baritone/api/IBaritoneProvider.java +++ b/src/api/java/baritone/api/IBaritoneProvider.java @@ -19,13 +19,15 @@ package baritone.api; import baritone.api.bot.IUserManager; import baritone.api.cache.IWorldScanner; +import baritone.api.command.Command; +import baritone.api.command.ICommandSystem; import net.minecraft.client.entity.EntityPlayerSP; import java.util.List; import java.util.Objects; /** - * Provides the present {@link IBaritone} instances + * Provides the present {@link IBaritone} instances, as well as non-baritone instance related APIs. * * @author leijurv */ @@ -78,4 +80,12 @@ public interface IBaritoneProvider { * @return The {@link IUserManager} instance. */ IUserManager getUserManager(); + + /** + * Returns the {@link ICommandSystem} instance. This is not bound to a specific {@link IBaritone} + * instance because {@link ICommandSystem} itself controls global behavior for {@link Command}s. + * + * @return The {@link ICommandSystem} instance. + */ + ICommandSystem getCommandSystem(); } diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 8d54cbde..776d8e61 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -30,8 +30,8 @@ import java.awt.*; import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; -import java.util.List; import java.util.*; +import java.util.List; import java.util.function.Consumer; /** @@ -798,6 +798,14 @@ public final class Settings { */ public final Setting mineScanDroppedItems = new Setting<>(true); + /** + * While mining, wait this number of milliseconds after mining an ore to see if it will drop an item + * instead of immediately going onto the next one + *

+ * Thanks Louca + */ + public final Setting mineDropLoiterDurationMSThanksLouca = new Setting<>(250L); + /** * Trim incorrect positions too far away, helps performance but hurts reliability in very large schematics */ diff --git a/src/api/java/baritone/api/utils/command/Command.java b/src/api/java/baritone/api/command/Command.java similarity index 83% rename from src/api/java/baritone/api/utils/command/Command.java rename to src/api/java/baritone/api/command/Command.java index ba4ed938..cd8fa5de 100644 --- a/src/api/java/baritone/api/utils/command/Command.java +++ b/src/api/java/baritone/api/command/Command.java @@ -15,13 +15,13 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command; +package baritone.api.command; import baritone.api.IBaritone; import baritone.api.utils.Helper; import baritone.api.utils.IPlayerContext; -import baritone.api.utils.command.exception.CommandException; -import baritone.api.utils.command.helpers.arguments.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.arguments.IArgConsumer; import java.util.Collections; import java.util.List; @@ -37,25 +37,21 @@ public abstract class Command implements Helper { /** * The names of this command. This is what you put after the command prefix. */ - public final List names; + protected final List names; /** * Creates a new Baritone control command. * * @param names The names of this command. This is what you put after the command prefix. */ - protected Command(IBaritone baritone, List names) { - this.names = names.stream() + protected Command(IBaritone baritone, String... names) { + this.names = Collections.unmodifiableList(Stream.of(names) .map(s -> s.toLowerCase(Locale.US)) - .collect(Collectors.toList()); + .collect(Collectors.toList())); this.baritone = baritone; this.ctx = baritone.getPlayerContext(); } - protected Command(IBaritone baritone, String name) { - this(baritone, Collections.singletonList(name)); - } - /** * Called when this command is executed. */ @@ -83,4 +79,8 @@ public abstract class Command implements Helper { public boolean hiddenFromHelp() { return false; } + + public final List getNames() { + return this.names; + } } diff --git a/src/api/java/baritone/api/utils/command/IBaritoneChatControl.java b/src/api/java/baritone/api/command/IBaritoneChatControl.java similarity index 98% rename from src/api/java/baritone/api/utils/command/IBaritoneChatControl.java rename to src/api/java/baritone/api/command/IBaritoneChatControl.java index 63b6a445..5009f3f0 100644 --- a/src/api/java/baritone/api/utils/command/IBaritoneChatControl.java +++ b/src/api/java/baritone/api/command/IBaritoneChatControl.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command; +package baritone.api.command; import baritone.api.Settings; diff --git a/src/api/java/baritone/api/command/ICommandSystem.java b/src/api/java/baritone/api/command/ICommandSystem.java new file mode 100644 index 00000000..98e8ed9c --- /dev/null +++ b/src/api/java/baritone/api/command/ICommandSystem.java @@ -0,0 +1,29 @@ +/* + * 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.command; + +import baritone.api.command.argparser.IArgParserManager; + +/** + * @author Brady + * @since 10/4/2019 + */ +public interface ICommandSystem { + + IArgParserManager getParserManager(); +} diff --git a/src/api/java/baritone/api/utils/command/argparser/IArgParser.java b/src/api/java/baritone/api/command/argparser/IArgParser.java similarity index 91% rename from src/api/java/baritone/api/utils/command/argparser/IArgParser.java rename to src/api/java/baritone/api/command/argparser/IArgParser.java index c1f615f6..868ad696 100644 --- a/src/api/java/baritone/api/utils/command/argparser/IArgParser.java +++ b/src/api/java/baritone/api/command/argparser/IArgParser.java @@ -15,9 +15,9 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.argparser; +package baritone.api.command.argparser; -import baritone.api.utils.command.argument.ICommandArgument; +import baritone.api.command.argument.ICommandArgument; public interface IArgParser { @@ -28,8 +28,6 @@ public interface IArgParser { /** * A stateless argument parser is just that. It takes a {@link ICommandArgument} and outputs its type. - * - * @see ArgParserManager#REGISTRY */ interface Stateless extends IArgParser { @@ -45,8 +43,6 @@ public interface IArgParser { /** * A stated argument parser is similar to a stateless one. It also takes a {@link ICommandArgument}, but it also * takes a second argument that can be any type, referred to as the state. - * - * @see ArgParserManager#REGISTRY */ interface Stated extends IArgParser { diff --git a/src/api/java/baritone/api/command/argparser/IArgParserManager.java b/src/api/java/baritone/api/command/argparser/IArgParserManager.java new file mode 100644 index 00000000..fe819150 --- /dev/null +++ b/src/api/java/baritone/api/command/argparser/IArgParserManager.java @@ -0,0 +1,65 @@ +/* + * 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.command.argparser; + +import baritone.api.command.argument.ICommandArgument; +import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.api.command.registry.Registry; + +/** + * @author Brady + * @since 10/4/2019 + */ +public interface IArgParserManager { + + /** + * @param type The type trying to be parsed + * @return A parser that can parse arguments into this class, if found. + */ + IArgParser.Stateless getParserStateless(Class type); + + /** + * @param type The type trying to be parsed + * @return A parser that can parse arguments into this class, if found. + */ + IArgParser.Stated getParserStated(Class type, Class stateKlass); + + /** + * Attempt to parse the specified argument with a stateless {@link IArgParser} that outputs the specified class. + * + * @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 CommandInvalidTypeException If the parsing failed + */ + T parseStateless(Class type, ICommandArgument arg) throws CommandInvalidTypeException; + + /** + * Attempt to parse the specified argument with a stated {@link IArgParser} that outputs the specified class. + * + * @param type The type to try and parse the argument into. + * @param arg The argument to parse. + * @param state The state to pass to the {@link IArgParser.Stated}. + * @return An instance of the specified class. + * @throws CommandInvalidTypeException If the parsing failed + * @see IArgParser.Stated + */ + T parseStated(Class type, Class stateKlass, ICommandArgument arg, S state) throws CommandInvalidTypeException; + + Registry getRegistry(); +} diff --git a/src/api/java/baritone/api/utils/command/argument/ICommandArgument.java b/src/api/java/baritone/api/command/argument/ICommandArgument.java similarity index 93% rename from src/api/java/baritone/api/utils/command/argument/ICommandArgument.java rename to src/api/java/baritone/api/command/argument/ICommandArgument.java index 7cbe2540..ab912d00 100644 --- a/src/api/java/baritone/api/utils/command/argument/ICommandArgument.java +++ b/src/api/java/baritone/api/command/argument/ICommandArgument.java @@ -15,11 +15,11 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.argument; +package baritone.api.command.argument; -import baritone.api.utils.command.argparser.IArgParser; -import baritone.api.utils.command.exception.CommandInvalidTypeException; -import baritone.api.utils.command.helpers.arguments.IArgConsumer; +import baritone.api.command.helpers.arguments.IArgConsumer; +import baritone.api.command.argparser.IArgParser; +import baritone.api.command.exception.CommandInvalidTypeException; import net.minecraft.util.EnumFacing; /** diff --git a/src/api/java/baritone/api/utils/command/datatypes/BlockById.java b/src/api/java/baritone/api/command/datatypes/BlockById.java similarity index 90% rename from src/api/java/baritone/api/utils/command/datatypes/BlockById.java rename to src/api/java/baritone/api/command/datatypes/BlockById.java index ae659adc..98858d13 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/BlockById.java +++ b/src/api/java/baritone/api/command/datatypes/BlockById.java @@ -15,10 +15,10 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.datatypes; +package baritone.api.command.datatypes; -import baritone.api.utils.command.exception.CommandException; -import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper; +import baritone.api.command.helpers.tabcomplete.TabCompleteHelper; +import baritone.api.command.exception.CommandException; import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.util.ResourceLocation; diff --git a/src/api/java/baritone/api/utils/command/datatypes/EntityClassById.java b/src/api/java/baritone/api/command/datatypes/EntityClassById.java similarity index 90% rename from src/api/java/baritone/api/utils/command/datatypes/EntityClassById.java rename to src/api/java/baritone/api/command/datatypes/EntityClassById.java index 3597141f..40d6ad10 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/EntityClassById.java +++ b/src/api/java/baritone/api/command/datatypes/EntityClassById.java @@ -15,10 +15,10 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.datatypes; +package baritone.api.command.datatypes; -import baritone.api.utils.command.exception.CommandException; -import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper; +import baritone.api.command.helpers.tabcomplete.TabCompleteHelper; +import baritone.api.command.exception.CommandException; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityList; import net.minecraft.util.ResourceLocation; diff --git a/src/api/java/baritone/api/utils/command/datatypes/ForBlockOptionalMeta.java b/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java similarity index 91% rename from src/api/java/baritone/api/utils/command/datatypes/ForBlockOptionalMeta.java rename to src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java index f36826c6..29dc5f0b 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/ForBlockOptionalMeta.java +++ b/src/api/java/baritone/api/command/datatypes/ForBlockOptionalMeta.java @@ -15,10 +15,10 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.datatypes; +package baritone.api.command.datatypes; import baritone.api.utils.BlockOptionalMeta; -import baritone.api.utils.command.exception.CommandException; +import baritone.api.command.exception.CommandException; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/utils/command/datatypes/ForEnumFacing.java b/src/api/java/baritone/api/command/datatypes/ForEnumFacing.java similarity index 88% rename from src/api/java/baritone/api/utils/command/datatypes/ForEnumFacing.java rename to src/api/java/baritone/api/command/datatypes/ForEnumFacing.java index ed6dce31..23f8617c 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/ForEnumFacing.java +++ b/src/api/java/baritone/api/command/datatypes/ForEnumFacing.java @@ -15,10 +15,10 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.datatypes; +package baritone.api.command.datatypes; -import baritone.api.utils.command.exception.CommandException; -import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper; +import baritone.api.command.helpers.tabcomplete.TabCompleteHelper; +import baritone.api.command.exception.CommandException; import net.minecraft.util.EnumFacing; import java.util.Locale; diff --git a/src/api/java/baritone/api/utils/command/datatypes/ForWaypoints.java b/src/api/java/baritone/api/command/datatypes/ForWaypoints.java similarity index 94% rename from src/api/java/baritone/api/utils/command/datatypes/ForWaypoints.java rename to src/api/java/baritone/api/command/datatypes/ForWaypoints.java index e60ff0c6..db506839 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/ForWaypoints.java +++ b/src/api/java/baritone/api/command/datatypes/ForWaypoints.java @@ -15,13 +15,13 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.datatypes; +package baritone.api.command.datatypes; import baritone.api.IBaritone; import baritone.api.cache.IWaypoint; import baritone.api.cache.IWaypointCollection; -import baritone.api.utils.command.exception.CommandException; -import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper; +import baritone.api.command.helpers.tabcomplete.TabCompleteHelper; +import baritone.api.command.exception.CommandException; import java.util.Comparator; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/utils/command/datatypes/IDatatype.java b/src/api/java/baritone/api/command/datatypes/IDatatype.java similarity index 91% rename from src/api/java/baritone/api/utils/command/datatypes/IDatatype.java rename to src/api/java/baritone/api/command/datatypes/IDatatype.java index 36a37fec..385154bc 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/IDatatype.java +++ b/src/api/java/baritone/api/command/datatypes/IDatatype.java @@ -15,11 +15,11 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.datatypes; +package baritone.api.command.datatypes; -import baritone.api.utils.command.argparser.IArgParser; -import baritone.api.utils.command.exception.CommandException; -import baritone.api.utils.command.helpers.arguments.IArgConsumer; +import baritone.api.command.argparser.IArgParser; +import baritone.api.command.helpers.arguments.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/utils/command/datatypes/IDatatypeContext.java b/src/api/java/baritone/api/command/datatypes/IDatatypeContext.java similarity index 92% rename from src/api/java/baritone/api/utils/command/datatypes/IDatatypeContext.java rename to src/api/java/baritone/api/command/datatypes/IDatatypeContext.java index 33f3ad23..4b8269c3 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/IDatatypeContext.java +++ b/src/api/java/baritone/api/command/datatypes/IDatatypeContext.java @@ -15,10 +15,10 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.datatypes; +package baritone.api.command.datatypes; import baritone.api.IBaritone; -import baritone.api.utils.command.helpers.arguments.IArgConsumer; +import baritone.api.command.helpers.arguments.IArgConsumer; /** * Provides an {@link IDatatype} with contextual information so diff --git a/src/api/java/baritone/api/utils/command/datatypes/IDatatypeFor.java b/src/api/java/baritone/api/command/datatypes/IDatatypeFor.java similarity index 94% rename from src/api/java/baritone/api/utils/command/datatypes/IDatatypeFor.java rename to src/api/java/baritone/api/command/datatypes/IDatatypeFor.java index 4f0f4200..2f0a9c14 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/IDatatypeFor.java +++ b/src/api/java/baritone/api/command/datatypes/IDatatypeFor.java @@ -15,9 +15,9 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.datatypes; +package baritone.api.command.datatypes; -import baritone.api.utils.command.exception.CommandException; +import baritone.api.command.exception.CommandException; import java.util.function.Supplier; diff --git a/src/api/java/baritone/api/utils/command/datatypes/IDatatypePost.java b/src/api/java/baritone/api/command/datatypes/IDatatypePost.java similarity index 93% rename from src/api/java/baritone/api/utils/command/datatypes/IDatatypePost.java rename to src/api/java/baritone/api/command/datatypes/IDatatypePost.java index 2e4cc47a..aa5b261d 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/IDatatypePost.java +++ b/src/api/java/baritone/api/command/datatypes/IDatatypePost.java @@ -15,9 +15,9 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.datatypes; +package baritone.api.command.datatypes; -import baritone.api.utils.command.exception.CommandException; +import baritone.api.command.exception.CommandException; import java.util.function.Function; diff --git a/src/api/java/baritone/api/utils/command/datatypes/IDatatypePostFunction.java b/src/api/java/baritone/api/command/datatypes/IDatatypePostFunction.java similarity index 88% rename from src/api/java/baritone/api/utils/command/datatypes/IDatatypePostFunction.java rename to src/api/java/baritone/api/command/datatypes/IDatatypePostFunction.java index a3de089e..fe79d6a6 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/IDatatypePostFunction.java +++ b/src/api/java/baritone/api/command/datatypes/IDatatypePostFunction.java @@ -15,9 +15,9 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.datatypes; +package baritone.api.command.datatypes; -import baritone.api.utils.command.exception.CommandException; +import baritone.api.command.exception.CommandException; /** * @author Brady diff --git a/src/api/java/baritone/api/utils/command/datatypes/NearbyPlayer.java b/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java similarity index 91% rename from src/api/java/baritone/api/utils/command/datatypes/NearbyPlayer.java rename to src/api/java/baritone/api/command/datatypes/NearbyPlayer.java index 78450e1a..aa32fc76 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/NearbyPlayer.java +++ b/src/api/java/baritone/api/command/datatypes/NearbyPlayer.java @@ -15,11 +15,11 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.datatypes; +package baritone.api.command.datatypes; import baritone.api.IBaritone; -import baritone.api.utils.command.exception.CommandException; -import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper; +import baritone.api.command.helpers.tabcomplete.TabCompleteHelper; +import baritone.api.command.exception.CommandException; import net.minecraft.entity.player.EntityPlayer; import java.util.List; diff --git a/src/api/java/baritone/api/utils/command/datatypes/RelativeBlockPos.java b/src/api/java/baritone/api/command/datatypes/RelativeBlockPos.java similarity index 92% rename from src/api/java/baritone/api/utils/command/datatypes/RelativeBlockPos.java rename to src/api/java/baritone/api/command/datatypes/RelativeBlockPos.java index 4a876220..513ef41f 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/RelativeBlockPos.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeBlockPos.java @@ -15,11 +15,11 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.datatypes; +package baritone.api.command.datatypes; +import baritone.api.command.helpers.arguments.IArgConsumer; import baritone.api.utils.BetterBlockPos; -import baritone.api.utils.command.exception.CommandException; -import baritone.api.utils.command.helpers.arguments.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/utils/command/datatypes/RelativeCoordinate.java b/src/api/java/baritone/api/command/datatypes/RelativeCoordinate.java similarity index 84% rename from src/api/java/baritone/api/utils/command/datatypes/RelativeCoordinate.java rename to src/api/java/baritone/api/command/datatypes/RelativeCoordinate.java index 7ef3532a..dc4d5630 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/RelativeCoordinate.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeCoordinate.java @@ -15,10 +15,10 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.datatypes; +package baritone.api.command.datatypes; -import baritone.api.utils.command.exception.CommandException; -import baritone.api.utils.command.helpers.arguments.IArgConsumer; +import baritone.api.command.helpers.arguments.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -26,8 +26,7 @@ import java.util.stream.Stream; public enum RelativeCoordinate implements IDatatypePost { INSTANCE; - - private static Pattern PATTERN = Pattern.compile("^(~?)([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)|)$"); + private static Pattern PATTERN = Pattern.compile("^(~?)([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)([k-k]?)|)$"); @Override public Double apply(IDatatypeContext ctx, Double origin) throws CommandException { @@ -41,7 +40,12 @@ public enum RelativeCoordinate implements IDatatypePost { } boolean isRelative = !matcher.group(1).isEmpty(); - double offset = matcher.group(2).isEmpty() ? 0 : Double.parseDouble(matcher.group(2)); + + double offset = matcher.group(2).isEmpty() ? 0 : Double.parseDouble(matcher.group(2).replaceAll("k", "")); + + if (matcher.group(2).contains("k")) { + offset *= 1000; + } if (isRelative) { return origin + offset; diff --git a/src/api/java/baritone/api/utils/command/datatypes/RelativeFile.java b/src/api/java/baritone/api/command/datatypes/RelativeFile.java similarity index 95% rename from src/api/java/baritone/api/utils/command/datatypes/RelativeFile.java rename to src/api/java/baritone/api/command/datatypes/RelativeFile.java index 0ad4b88b..f886a1c6 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/RelativeFile.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeFile.java @@ -15,10 +15,10 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.datatypes; +package baritone.api.command.datatypes; -import baritone.api.utils.command.exception.CommandException; -import baritone.api.utils.command.helpers.arguments.IArgConsumer; +import baritone.api.command.helpers.arguments.IArgConsumer; +import baritone.api.command.exception.CommandException; import java.io.File; import java.io.IOException; diff --git a/src/api/java/baritone/api/utils/command/datatypes/RelativeGoal.java b/src/api/java/baritone/api/command/datatypes/RelativeGoal.java similarity index 94% rename from src/api/java/baritone/api/utils/command/datatypes/RelativeGoal.java rename to src/api/java/baritone/api/command/datatypes/RelativeGoal.java index 0c98073f..73bc6e0d 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/RelativeGoal.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoal.java @@ -15,15 +15,15 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.datatypes; +package baritone.api.command.datatypes; +import baritone.api.command.helpers.arguments.IArgConsumer; import baritone.api.pathing.goals.Goal; 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.IArgConsumer; +import baritone.api.command.exception.CommandException; import net.minecraft.util.math.MathHelper; import java.util.ArrayList; diff --git a/src/api/java/baritone/api/utils/command/datatypes/RelativeGoalBlock.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java similarity index 91% rename from src/api/java/baritone/api/utils/command/datatypes/RelativeGoalBlock.java rename to src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java index b3c0e284..19621b95 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/RelativeGoalBlock.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalBlock.java @@ -15,12 +15,12 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.datatypes; +package baritone.api.command.datatypes; +import baritone.api.command.helpers.arguments.IArgConsumer; import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; -import baritone.api.utils.command.exception.CommandException; -import baritone.api.utils.command.helpers.arguments.IArgConsumer; +import baritone.api.command.exception.CommandException; import net.minecraft.util.math.MathHelper; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/utils/command/datatypes/RelativeGoalXZ.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java similarity index 91% rename from src/api/java/baritone/api/utils/command/datatypes/RelativeGoalXZ.java rename to src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java index 22d50ebf..83d52de8 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/RelativeGoalXZ.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalXZ.java @@ -15,12 +15,12 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.datatypes; +package baritone.api.command.datatypes; +import baritone.api.command.helpers.arguments.IArgConsumer; import baritone.api.pathing.goals.GoalXZ; import baritone.api.utils.BetterBlockPos; -import baritone.api.utils.command.exception.CommandException; -import baritone.api.utils.command.helpers.arguments.IArgConsumer; +import baritone.api.command.exception.CommandException; import net.minecraft.util.math.MathHelper; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/utils/command/datatypes/RelativeGoalYLevel.java b/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java similarity index 90% rename from src/api/java/baritone/api/utils/command/datatypes/RelativeGoalYLevel.java rename to src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java index 7a443b27..4dd195a4 100644 --- a/src/api/java/baritone/api/utils/command/datatypes/RelativeGoalYLevel.java +++ b/src/api/java/baritone/api/command/datatypes/RelativeGoalYLevel.java @@ -15,12 +15,12 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.datatypes; +package baritone.api.command.datatypes; +import baritone.api.command.helpers.arguments.IArgConsumer; 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.IArgConsumer; +import baritone.api.command.exception.CommandException; import net.minecraft.util.math.MathHelper; import java.util.stream.Stream; diff --git a/src/api/java/baritone/api/utils/command/exception/CommandErrorMessageException.java b/src/api/java/baritone/api/command/exception/CommandErrorMessageException.java similarity index 94% rename from src/api/java/baritone/api/utils/command/exception/CommandErrorMessageException.java rename to src/api/java/baritone/api/command/exception/CommandErrorMessageException.java index 002d328e..4a21bede 100644 --- a/src/api/java/baritone/api/utils/command/exception/CommandErrorMessageException.java +++ b/src/api/java/baritone/api/command/exception/CommandErrorMessageException.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.exception; +package baritone.api.command.exception; public abstract class CommandErrorMessageException extends CommandException { diff --git a/src/api/java/baritone/api/utils/command/exception/CommandException.java b/src/api/java/baritone/api/command/exception/CommandException.java similarity index 94% rename from src/api/java/baritone/api/utils/command/exception/CommandException.java rename to src/api/java/baritone/api/command/exception/CommandException.java index 9fdc3f73..b8962c15 100644 --- a/src/api/java/baritone/api/utils/command/exception/CommandException.java +++ b/src/api/java/baritone/api/command/exception/CommandException.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.exception; +package baritone.api.command.exception; public abstract class CommandException extends Exception implements ICommandException { diff --git a/src/api/java/baritone/api/utils/command/exception/CommandInvalidArgumentException.java b/src/api/java/baritone/api/command/exception/CommandInvalidArgumentException.java similarity index 91% rename from src/api/java/baritone/api/utils/command/exception/CommandInvalidArgumentException.java rename to src/api/java/baritone/api/command/exception/CommandInvalidArgumentException.java index bc9236e4..1902d735 100644 --- a/src/api/java/baritone/api/utils/command/exception/CommandInvalidArgumentException.java +++ b/src/api/java/baritone/api/command/exception/CommandInvalidArgumentException.java @@ -15,9 +15,9 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.exception; +package baritone.api.command.exception; -import baritone.api.utils.command.argument.ICommandArgument; +import baritone.api.command.argument.ICommandArgument; public abstract class CommandInvalidArgumentException extends CommandErrorMessageException { diff --git a/src/api/java/baritone/api/utils/command/exception/CommandInvalidStateException.java b/src/api/java/baritone/api/command/exception/CommandInvalidStateException.java similarity index 94% rename from src/api/java/baritone/api/utils/command/exception/CommandInvalidStateException.java rename to src/api/java/baritone/api/command/exception/CommandInvalidStateException.java index 4e00c1f7..0fa22fcb 100644 --- a/src/api/java/baritone/api/utils/command/exception/CommandInvalidStateException.java +++ b/src/api/java/baritone/api/command/exception/CommandInvalidStateException.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.exception; +package baritone.api.command.exception; public class CommandInvalidStateException extends CommandErrorMessageException { diff --git a/src/api/java/baritone/api/utils/command/exception/CommandInvalidTypeException.java b/src/api/java/baritone/api/command/exception/CommandInvalidTypeException.java similarity index 93% rename from src/api/java/baritone/api/utils/command/exception/CommandInvalidTypeException.java rename to src/api/java/baritone/api/command/exception/CommandInvalidTypeException.java index 8dffe1d0..516fd308 100644 --- a/src/api/java/baritone/api/utils/command/exception/CommandInvalidTypeException.java +++ b/src/api/java/baritone/api/command/exception/CommandInvalidTypeException.java @@ -15,9 +15,9 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.exception; +package baritone.api.command.exception; -import baritone.api.utils.command.argument.ICommandArgument; +import baritone.api.command.argument.ICommandArgument; public class CommandInvalidTypeException extends CommandInvalidArgumentException { diff --git a/src/api/java/baritone/api/utils/command/exception/CommandNoParserForTypeException.java b/src/api/java/baritone/api/command/exception/CommandNoParserForTypeException.java similarity index 95% rename from src/api/java/baritone/api/utils/command/exception/CommandNoParserForTypeException.java rename to src/api/java/baritone/api/command/exception/CommandNoParserForTypeException.java index f4f2d818..4bf7a1ac 100644 --- a/src/api/java/baritone/api/utils/command/exception/CommandNoParserForTypeException.java +++ b/src/api/java/baritone/api/command/exception/CommandNoParserForTypeException.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.exception; +package baritone.api.command.exception; public class CommandNoParserForTypeException extends CommandUnhandledException { diff --git a/src/api/java/baritone/api/utils/command/exception/CommandNotEnoughArgumentsException.java b/src/api/java/baritone/api/command/exception/CommandNotEnoughArgumentsException.java similarity index 95% rename from src/api/java/baritone/api/utils/command/exception/CommandNotEnoughArgumentsException.java rename to src/api/java/baritone/api/command/exception/CommandNotEnoughArgumentsException.java index 655652d6..e2e05cfb 100644 --- a/src/api/java/baritone/api/utils/command/exception/CommandNotEnoughArgumentsException.java +++ b/src/api/java/baritone/api/command/exception/CommandNotEnoughArgumentsException.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.exception; +package baritone.api.command.exception; public class CommandNotEnoughArgumentsException extends CommandErrorMessageException { diff --git a/src/api/java/baritone/api/utils/command/exception/CommandNotFoundException.java b/src/api/java/baritone/api/command/exception/CommandNotFoundException.java similarity index 88% rename from src/api/java/baritone/api/utils/command/exception/CommandNotFoundException.java rename to src/api/java/baritone/api/command/exception/CommandNotFoundException.java index bca8d543..123661c8 100644 --- a/src/api/java/baritone/api/utils/command/exception/CommandNotFoundException.java +++ b/src/api/java/baritone/api/command/exception/CommandNotFoundException.java @@ -15,10 +15,10 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.exception; +package baritone.api.command.exception; -import baritone.api.utils.command.Command; -import baritone.api.utils.command.argument.ICommandArgument; +import baritone.api.command.Command; +import baritone.api.command.argument.ICommandArgument; import java.util.List; diff --git a/src/api/java/baritone/api/utils/command/exception/CommandTooManyArgumentsException.java b/src/api/java/baritone/api/command/exception/CommandTooManyArgumentsException.java similarity index 95% rename from src/api/java/baritone/api/utils/command/exception/CommandTooManyArgumentsException.java rename to src/api/java/baritone/api/command/exception/CommandTooManyArgumentsException.java index 24fc799f..9aec48ea 100644 --- a/src/api/java/baritone/api/utils/command/exception/CommandTooManyArgumentsException.java +++ b/src/api/java/baritone/api/command/exception/CommandTooManyArgumentsException.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.exception; +package baritone.api.command.exception; public class CommandTooManyArgumentsException extends CommandErrorMessageException { diff --git a/src/api/java/baritone/api/utils/command/exception/CommandUnhandledException.java b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java similarity index 90% rename from src/api/java/baritone/api/utils/command/exception/CommandUnhandledException.java rename to src/api/java/baritone/api/command/exception/CommandUnhandledException.java index 55b359cc..394dd65e 100644 --- a/src/api/java/baritone/api/utils/command/exception/CommandUnhandledException.java +++ b/src/api/java/baritone/api/command/exception/CommandUnhandledException.java @@ -15,10 +15,10 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.exception; +package baritone.api.command.exception; -import baritone.api.utils.command.Command; -import baritone.api.utils.command.argument.ICommandArgument; +import baritone.api.command.Command; +import baritone.api.command.argument.ICommandArgument; import net.minecraft.util.text.TextFormatting; import java.util.List; diff --git a/src/api/java/baritone/api/utils/command/exception/ICommandException.java b/src/api/java/baritone/api/command/exception/ICommandException.java similarity index 91% rename from src/api/java/baritone/api/utils/command/exception/ICommandException.java rename to src/api/java/baritone/api/command/exception/ICommandException.java index 229c08c0..3c96cb52 100644 --- a/src/api/java/baritone/api/utils/command/exception/ICommandException.java +++ b/src/api/java/baritone/api/command/exception/ICommandException.java @@ -15,10 +15,10 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.exception; +package baritone.api.command.exception; -import baritone.api.utils.command.Command; -import baritone.api.utils.command.argument.ICommandArgument; +import baritone.api.command.Command; +import baritone.api.command.argument.ICommandArgument; import net.minecraft.util.text.TextFormatting; import java.util.List; diff --git a/src/api/java/baritone/api/utils/command/helpers/arguments/IArgConsumer.java b/src/api/java/baritone/api/command/helpers/arguments/IArgConsumer.java similarity index 97% rename from src/api/java/baritone/api/utils/command/helpers/arguments/IArgConsumer.java rename to src/api/java/baritone/api/command/helpers/arguments/IArgConsumer.java index 1e50a530..c185c1f7 100644 --- a/src/api/java/baritone/api/utils/command/helpers/arguments/IArgConsumer.java +++ b/src/api/java/baritone/api/command/helpers/arguments/IArgConsumer.java @@ -15,19 +15,19 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.helpers.arguments; +package baritone.api.command.helpers.arguments; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandTooManyArgumentsException; import baritone.api.utils.Helper; -import baritone.api.utils.command.Command; -import baritone.api.utils.command.argparser.IArgParser; -import baritone.api.utils.command.argument.ICommandArgument; -import baritone.api.utils.command.datatypes.IDatatype; -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.command.argparser.IArgParser; +import baritone.api.command.argument.ICommandArgument; +import baritone.api.command.datatypes.IDatatype; +import baritone.api.command.datatypes.IDatatypeFor; +import baritone.api.command.datatypes.IDatatypePost; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.api.command.exception.CommandNotEnoughArgumentsException; import net.minecraft.util.EnumFacing; import java.util.Deque; diff --git a/src/api/java/baritone/api/utils/command/helpers/pagination/Paginator.java b/src/api/java/baritone/api/command/helpers/pagination/Paginator.java similarity index 96% rename from src/api/java/baritone/api/utils/command/helpers/pagination/Paginator.java rename to src/api/java/baritone/api/command/helpers/pagination/Paginator.java index cf5d5d7c..e5bf9d55 100644 --- a/src/api/java/baritone/api/utils/command/helpers/pagination/Paginator.java +++ b/src/api/java/baritone/api/command/helpers/pagination/Paginator.java @@ -15,12 +15,12 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.helpers.pagination; +package baritone.api.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.IArgConsumer; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.api.command.helpers.arguments.IArgConsumer; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextFormatting; diff --git a/src/api/java/baritone/api/utils/command/helpers/tabcomplete/TabCompleteHelper.java b/src/api/java/baritone/api/command/helpers/tabcomplete/TabCompleteHelper.java similarity index 97% rename from src/api/java/baritone/api/utils/command/helpers/tabcomplete/TabCompleteHelper.java rename to src/api/java/baritone/api/command/helpers/tabcomplete/TabCompleteHelper.java index 9be9dfb3..57192f0c 100644 --- a/src/api/java/baritone/api/utils/command/helpers/tabcomplete/TabCompleteHelper.java +++ b/src/api/java/baritone/api/command/helpers/tabcomplete/TabCompleteHelper.java @@ -15,14 +15,14 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.helpers.tabcomplete; +package baritone.api.command.helpers.tabcomplete; import baritone.api.BaritoneAPI; import baritone.api.Settings; import baritone.api.event.events.TabCompleteEvent; import baritone.api.utils.SettingsUtil; -import baritone.api.utils.command.helpers.arguments.IArgConsumer; -import baritone.api.utils.command.manager.ICommandManager; +import baritone.api.command.helpers.arguments.IArgConsumer; +import baritone.api.command.manager.ICommandManager; import net.minecraft.util.ResourceLocation; import java.util.Comparator; @@ -241,7 +241,7 @@ public class TabCompleteHelper { */ public TabCompleteHelper addCommands(ICommandManager manager) { return append(manager.getRegistry().descendingStream() - .flatMap(command -> command.names.stream()) + .flatMap(command -> command.getNames().stream()) .distinct() ); } diff --git a/src/api/java/baritone/api/utils/command/manager/ICommandManager.java b/src/api/java/baritone/api/command/manager/ICommandManager.java similarity index 87% rename from src/api/java/baritone/api/utils/command/manager/ICommandManager.java rename to src/api/java/baritone/api/command/manager/ICommandManager.java index d3fac415..f74a3c26 100644 --- a/src/api/java/baritone/api/utils/command/manager/ICommandManager.java +++ b/src/api/java/baritone/api/command/manager/ICommandManager.java @@ -15,12 +15,12 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.manager; +package baritone.api.command.manager; import baritone.api.IBaritone; -import baritone.api.utils.command.Command; -import baritone.api.utils.command.argument.ICommandArgument; -import baritone.api.utils.command.registry.Registry; +import baritone.api.command.Command; +import baritone.api.command.argument.ICommandArgument; +import baritone.api.command.registry.Registry; import net.minecraft.util.Tuple; import java.util.List; diff --git a/src/api/java/baritone/api/utils/command/registry/Registry.java b/src/api/java/baritone/api/command/registry/Registry.java similarity index 99% rename from src/api/java/baritone/api/utils/command/registry/Registry.java rename to src/api/java/baritone/api/command/registry/Registry.java index bac50dcf..06779169 100644 --- a/src/api/java/baritone/api/utils/command/registry/Registry.java +++ b/src/api/java/baritone/api/command/registry/Registry.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.registry; +package baritone.api.command.registry; import java.util.*; import java.util.function.Consumer; diff --git a/src/api/java/baritone/api/process/IGetToBlockProcess.java b/src/api/java/baritone/api/process/IGetToBlockProcess.java index a5a35577..f58efbd3 100644 --- a/src/api/java/baritone/api/process/IGetToBlockProcess.java +++ b/src/api/java/baritone/api/process/IGetToBlockProcess.java @@ -17,6 +17,7 @@ package baritone.api.process; +import baritone.api.utils.BlockOptionalMeta; import net.minecraft.block.Block; /** @@ -24,7 +25,11 @@ import net.minecraft.block.Block; */ public interface IGetToBlockProcess extends IBaritoneProcess { - void getToBlock(Block block); + void getToBlock(BlockOptionalMeta block); + + default void getToBlock(Block block) { + getToBlock(new BlockOptionalMeta(block)); + } boolean blacklistClosest(); } diff --git a/src/api/java/baritone/api/utils/command/argparser/ArgParserManager.java b/src/api/java/baritone/api/utils/command/argparser/ArgParserManager.java deleted file mode 100644 index 2b864f42..00000000 --- a/src/api/java/baritone/api/utils/command/argparser/ArgParserManager.java +++ /dev/null @@ -1,104 +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.api.utils.command.argparser; - -import baritone.api.utils.command.argument.ICommandArgument; -import baritone.api.utils.command.exception.CommandInvalidTypeException; -import baritone.api.utils.command.exception.CommandNoParserForTypeException; -import baritone.api.utils.command.registry.Registry; - -public class ArgParserManager { - - public static final Registry REGISTRY = new Registry<>(); - - static { - DefaultArgParsers.ALL.forEach(REGISTRY::register); - } - - /** - * @param type The type trying to be parsed - * @return A parser that can parse arguments into this class, if found. - */ - public static IArgParser.Stateless getParserStateless(Class type) { - //noinspection unchecked - return REGISTRY.descendingStream() - .filter(IArgParser.Stateless.class::isInstance) - .map(IArgParser.Stateless.class::cast) - .filter(parser -> parser.getTarget().isAssignableFrom(type)) - .findFirst() - .orElse(null); - } - - /** - * @param type The type trying to be parsed - * @return A parser that can parse arguments into this class, if found. - */ - public static IArgParser.Stated getParserStated(Class type, Class stateKlass) { - //noinspection unchecked - return REGISTRY.descendingStream() - .filter(IArgParser.Stated.class::isInstance) - .map(IArgParser.Stated.class::cast) - .filter(parser -> parser.getTarget().isAssignableFrom(type)) - .filter(parser -> parser.getStateType().isAssignableFrom(stateKlass)) - .map(IArgParser.Stated.class::cast) - .findFirst() - .orElse(null); - } - - /** - * Attempt to parse the specified argument with a stateless {@link IArgParser} that outputs the specified class. - * - * @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 CommandInvalidTypeException If the parsing failed - */ - public static T parseStateless(Class type, ICommandArgument arg) throws CommandInvalidTypeException { - IArgParser.Stateless parser = getParserStateless(type); - if (parser == null) { - throw new CommandNoParserForTypeException(type); - } - try { - return parser.parseArg(arg); - } catch (Exception exc) { - throw new CommandInvalidTypeException(arg, type.getSimpleName()); - } - } - - /** - * Attempt to parse the specified argument with a stated {@link IArgParser} that outputs the specified class. - * - * @param type The type to try and parse the argument into. - * @param arg The argument to parse. - * @param state The state to pass to the {@link IArgParser.Stated}. - * @return An instance of the specified class. - * @throws CommandInvalidTypeException If the parsing failed - * @see IArgParser.Stated - */ - public static T parseStated(Class type, Class stateKlass, ICommandArgument arg, S state) throws CommandInvalidTypeException { - IArgParser.Stated parser = getParserStated(type, stateKlass); - if (parser == null) { - throw new CommandNoParserForTypeException(type); - } - try { - return parser.parseArg(arg, state); - } catch (Exception exc) { - throw new CommandInvalidTypeException(arg, type.getSimpleName()); - } - } -} diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index d85db2b6..b0c035a0 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -25,11 +25,11 @@ import baritone.api.utils.Helper; import baritone.api.utils.IPlayerContext; import baritone.behavior.*; import baritone.cache.WorldProvider; +import baritone.command.manager.CommandManager; import baritone.event.GameEventHandler; import baritone.process.*; import baritone.selection.SelectionManager; import baritone.utils.*; -import baritone.utils.command.manager.CommandManager; import net.minecraft.client.Minecraft; import java.io.File; diff --git a/src/main/java/baritone/BaritoneProvider.java b/src/main/java/baritone/BaritoneProvider.java index d7268eb4..e3dd6f67 100644 --- a/src/main/java/baritone/BaritoneProvider.java +++ b/src/main/java/baritone/BaritoneProvider.java @@ -19,12 +19,14 @@ package baritone; import baritone.api.IBaritone; import baritone.api.IBaritoneProvider; +import baritone.api.bot.IBaritoneUser; import baritone.api.bot.IUserManager; import baritone.api.cache.IWorldScanner; -import baritone.api.bot.IBaritoneUser; +import baritone.api.command.ICommandSystem; import baritone.bot.UserManager; -import baritone.utils.command.BaritoneChatControl; import baritone.cache.WorldScanner; +import baritone.command.BaritoneChatControl; +import baritone.command.CommandSystem; import baritone.utils.player.PrimaryPlayerContext; import java.util.ArrayList; @@ -69,4 +71,9 @@ public final class BaritoneProvider implements IBaritoneProvider { public IUserManager getUserManager() { return UserManager.INSTANCE; } + + @Override + public ICommandSystem getCommandSystem() { + return CommandSystem.INSTANCE; + } } diff --git a/src/main/java/baritone/utils/command/BaritoneChatControl.java b/src/main/java/baritone/command/BaritoneChatControl.java similarity index 92% rename from src/main/java/baritone/utils/command/BaritoneChatControl.java rename to src/main/java/baritone/command/BaritoneChatControl.java index 70e2370e..2b81f284 100644 --- a/src/main/java/baritone/utils/command/BaritoneChatControl.java +++ b/src/main/java/baritone/command/BaritoneChatControl.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package baritone.utils.command; +package baritone.command; import baritone.api.BaritoneAPI; import baritone.api.IBaritone; @@ -26,14 +26,14 @@ 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.ICommandArgument; -import baritone.api.utils.command.exception.CommandNotEnoughArgumentsException; -import baritone.api.utils.command.exception.CommandNotFoundException; -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 baritone.api.command.argument.ICommandArgument; +import baritone.api.command.exception.CommandNotEnoughArgumentsException; +import baritone.api.command.exception.CommandNotFoundException; +import baritone.command.helpers.arguments.ArgConsumer; +import baritone.api.command.helpers.tabcomplete.TabCompleteHelper; +import baritone.api.command.manager.ICommandManager; +import baritone.command.argument.CommandArguments; +import baritone.command.manager.CommandManager; import net.minecraft.util.Tuple; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; @@ -47,7 +47,7 @@ import java.util.List; import java.util.Locale; import java.util.stream.Stream; -import static baritone.api.utils.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; public class BaritoneChatControl implements Helper, AbstractGameEventListener { diff --git a/src/main/java/baritone/command/CommandSystem.java b/src/main/java/baritone/command/CommandSystem.java new file mode 100644 index 00000000..49d3685c --- /dev/null +++ b/src/main/java/baritone/command/CommandSystem.java @@ -0,0 +1,35 @@ +/* + * 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.command; + +import baritone.api.command.ICommandSystem; +import baritone.command.argparser.ArgParserManager; +import baritone.api.command.argparser.IArgParserManager; + +/** + * @author Brady + * @since 10/4/2019 + */ +public enum CommandSystem implements ICommandSystem { + INSTANCE; + + @Override + public IArgParserManager getParserManager() { + return ArgParserManager.INSTANCE; + } +} diff --git a/src/main/java/baritone/command/argparser/ArgParserManager.java b/src/main/java/baritone/command/argparser/ArgParserManager.java new file mode 100644 index 00000000..a6acdcbc --- /dev/null +++ b/src/main/java/baritone/command/argparser/ArgParserManager.java @@ -0,0 +1,90 @@ +/* + * 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.command.argparser; + +import baritone.api.command.argparser.IArgParser; +import baritone.api.command.argparser.IArgParserManager; +import baritone.api.command.argument.ICommandArgument; +import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.api.command.exception.CommandNoParserForTypeException; +import baritone.api.command.registry.Registry; + +public enum ArgParserManager implements IArgParserManager { + INSTANCE; + + public final Registry registry = new Registry<>(); + + ArgParserManager() { + DefaultArgParsers.ALL.forEach(this.registry::register); + } + + @Override + public IArgParser.Stateless getParserStateless(Class type) { + //noinspection unchecked + return this.registry.descendingStream() + .filter(IArgParser.Stateless.class::isInstance) + .map(IArgParser.Stateless.class::cast) + .filter(parser -> parser.getTarget().isAssignableFrom(type)) + .findFirst() + .orElse(null); + } + + @Override + public IArgParser.Stated getParserStated(Class type, Class stateKlass) { + //noinspection unchecked + return this.registry.descendingStream() + .filter(IArgParser.Stated.class::isInstance) + .map(IArgParser.Stated.class::cast) + .filter(parser -> parser.getTarget().isAssignableFrom(type)) + .filter(parser -> parser.getStateType().isAssignableFrom(stateKlass)) + .map(IArgParser.Stated.class::cast) + .findFirst() + .orElse(null); + } + + @Override + public T parseStateless(Class type, ICommandArgument arg) throws CommandInvalidTypeException { + IArgParser.Stateless parser = this.getParserStateless(type); + if (parser == null) { + throw new CommandNoParserForTypeException(type); + } + try { + return parser.parseArg(arg); + } catch (Exception exc) { + throw new CommandInvalidTypeException(arg, type.getSimpleName()); + } + } + + @Override + public T parseStated(Class type, Class stateKlass, ICommandArgument arg, S state) throws CommandInvalidTypeException { + IArgParser.Stated parser = this.getParserStated(type, stateKlass); + if (parser == null) { + throw new CommandNoParserForTypeException(type); + } + try { + return parser.parseArg(arg, state); + } catch (Exception exc) { + throw new CommandInvalidTypeException(arg, type.getSimpleName()); + } + } + + @Override + public Registry getRegistry() { + return this.registry; + } +} diff --git a/src/api/java/baritone/api/utils/command/argparser/DefaultArgParsers.java b/src/main/java/baritone/command/argparser/DefaultArgParsers.java similarity index 96% rename from src/api/java/baritone/api/utils/command/argparser/DefaultArgParsers.java rename to src/main/java/baritone/command/argparser/DefaultArgParsers.java index b734f47d..77a14bf9 100644 --- a/src/api/java/baritone/api/utils/command/argparser/DefaultArgParsers.java +++ b/src/main/java/baritone/command/argparser/DefaultArgParsers.java @@ -15,9 +15,10 @@ * along with Baritone. If not, see . */ -package baritone.api.utils.command.argparser; +package baritone.command.argparser; -import baritone.api.utils.command.argument.ICommandArgument; +import baritone.api.command.argparser.IArgParser; +import baritone.api.command.argument.ICommandArgument; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/utils/command/argument/CommandArgument.java b/src/main/java/baritone/command/argument/CommandArgument.java similarity index 84% rename from src/main/java/baritone/utils/command/argument/CommandArgument.java rename to src/main/java/baritone/command/argument/CommandArgument.java index 9c374248..3ce6cda8 100644 --- a/src/main/java/baritone/utils/command/argument/CommandArgument.java +++ b/src/main/java/baritone/command/argument/CommandArgument.java @@ -15,12 +15,11 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.argument; +package baritone.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 baritone.command.argparser.ArgParserManager; +import baritone.api.command.argument.ICommandArgument; +import baritone.api.command.exception.CommandInvalidTypeException; import java.util.stream.Stream; @@ -66,7 +65,7 @@ class CommandArgument implements ICommandArgument { @Override public T getAs(Class type) throws CommandInvalidTypeException { - return ArgParserManager.parseStateless(type, this); + return ArgParserManager.INSTANCE.parseStateless(type, this); } @Override @@ -82,7 +81,7 @@ class CommandArgument implements ICommandArgument { @SuppressWarnings("UnusedReturnValue") @Override public T getAs(Class type, Class stateType, S state) throws CommandInvalidTypeException { - return ArgParserManager.parseStated(type, stateType, this, state); + return ArgParserManager.INSTANCE.parseStated(type, stateType, this, state); } @Override diff --git a/src/main/java/baritone/utils/command/argument/CommandArguments.java b/src/main/java/baritone/command/argument/CommandArguments.java similarity index 93% rename from src/main/java/baritone/utils/command/argument/CommandArguments.java rename to src/main/java/baritone/command/argument/CommandArguments.java index 22f89559..8d26acb4 100644 --- a/src/main/java/baritone/utils/command/argument/CommandArguments.java +++ b/src/main/java/baritone/command/argument/CommandArguments.java @@ -15,10 +15,10 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.argument; +package baritone.command.argument; -import baritone.api.utils.command.argument.ICommandArgument; -import baritone.api.utils.command.exception.CommandInvalidArgumentException; +import baritone.api.command.argument.ICommandArgument; +import baritone.api.command.exception.CommandInvalidArgumentException; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/baritone/utils/command/defaults/AxisCommand.java b/src/main/java/baritone/command/defaults/AxisCommand.java similarity index 86% rename from src/main/java/baritone/utils/command/defaults/AxisCommand.java rename to src/main/java/baritone/command/defaults/AxisCommand.java index f67c82e5..09d00ae7 100644 --- a/src/main/java/baritone/utils/command/defaults/AxisCommand.java +++ b/src/main/java/baritone/command/defaults/AxisCommand.java @@ -15,14 +15,14 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; import baritone.api.IBaritone; 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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.arguments.IArgConsumer; import java.util.Arrays; import java.util.List; @@ -31,7 +31,7 @@ import java.util.stream.Stream; public class AxisCommand extends Command { public AxisCommand(IBaritone baritone) { - super(baritone, Arrays.asList("axis", "highway")); + super(baritone, "axis", "highway"); } @Override diff --git a/src/main/java/baritone/utils/command/defaults/BlacklistCommand.java b/src/main/java/baritone/command/defaults/BlacklistCommand.java similarity index 87% rename from src/main/java/baritone/utils/command/defaults/BlacklistCommand.java rename to src/main/java/baritone/command/defaults/BlacklistCommand.java index accda72b..5069f434 100644 --- a/src/main/java/baritone/utils/command/defaults/BlacklistCommand.java +++ b/src/main/java/baritone/command/defaults/BlacklistCommand.java @@ -15,14 +15,14 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; import baritone.api.IBaritone; 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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.command.helpers.arguments.IArgConsumer; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/utils/command/defaults/BuildCommand.java b/src/main/java/baritone/command/defaults/BuildCommand.java similarity index 88% rename from src/main/java/baritone/utils/command/defaults/BuildCommand.java rename to src/main/java/baritone/command/defaults/BuildCommand.java index b852d0be..b2edbb24 100644 --- a/src/main/java/baritone/utils/command/defaults/BuildCommand.java +++ b/src/main/java/baritone/command/defaults/BuildCommand.java @@ -15,16 +15,16 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; import baritone.api.IBaritone; 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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.datatypes.RelativeBlockPos; +import baritone.api.command.datatypes.RelativeFile; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.command.helpers.arguments.IArgConsumer; import net.minecraft.client.Minecraft; import java.io.File; diff --git a/src/main/java/baritone/utils/command/defaults/CancelCommand.java b/src/main/java/baritone/command/defaults/CancelCommand.java similarity index 85% rename from src/main/java/baritone/utils/command/defaults/CancelCommand.java rename to src/main/java/baritone/command/defaults/CancelCommand.java index 868da5e0..aff839ae 100644 --- a/src/main/java/baritone/utils/command/defaults/CancelCommand.java +++ b/src/main/java/baritone/command/defaults/CancelCommand.java @@ -15,12 +15,12 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.arguments.IArgConsumer; import java.util.Arrays; import java.util.List; @@ -29,7 +29,7 @@ import java.util.stream.Stream; public class CancelCommand extends Command { public CancelCommand(IBaritone baritone) { - super(baritone, Arrays.asList("cancel", "stop")); + super(baritone, "cancel", "stop"); } @Override diff --git a/src/main/java/baritone/utils/command/defaults/ChestsCommand.java b/src/main/java/baritone/command/defaults/ChestsCommand.java similarity index 90% rename from src/main/java/baritone/utils/command/defaults/ChestsCommand.java rename to src/main/java/baritone/command/defaults/ChestsCommand.java index 130d5909..c3755b5a 100644 --- a/src/main/java/baritone/utils/command/defaults/ChestsCommand.java +++ b/src/main/java/baritone/command/defaults/ChestsCommand.java @@ -15,15 +15,15 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; import baritone.api.IBaritone; 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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.command.helpers.arguments.IArgConsumer; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.ITextComponent; diff --git a/src/main/java/baritone/utils/command/defaults/ClickCommand.java b/src/main/java/baritone/command/defaults/ClickCommand.java similarity index 88% rename from src/main/java/baritone/utils/command/defaults/ClickCommand.java rename to src/main/java/baritone/command/defaults/ClickCommand.java index ba8e917c..95b04f52 100644 --- a/src/main/java/baritone/utils/command/defaults/ClickCommand.java +++ b/src/main/java/baritone/command/defaults/ClickCommand.java @@ -15,12 +15,12 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.arguments.IArgConsumer; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/utils/command/defaults/ComeCommand.java b/src/main/java/baritone/command/defaults/ComeCommand.java similarity index 88% rename from src/main/java/baritone/utils/command/defaults/ComeCommand.java rename to src/main/java/baritone/command/defaults/ComeCommand.java index cc4f4071..9b336a25 100644 --- a/src/main/java/baritone/utils/command/defaults/ComeCommand.java +++ b/src/main/java/baritone/command/defaults/ComeCommand.java @@ -15,14 +15,14 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; import baritone.api.IBaritone; 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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.command.helpers.arguments.IArgConsumer; import net.minecraft.entity.Entity; import net.minecraft.util.math.BlockPos; diff --git a/src/main/java/baritone/utils/command/defaults/CommandAlias.java b/src/main/java/baritone/command/defaults/CommandAlias.java similarity index 91% rename from src/main/java/baritone/utils/command/defaults/CommandAlias.java rename to src/main/java/baritone/command/defaults/CommandAlias.java index 6aa32af1..08b1ca05 100644 --- a/src/main/java/baritone/utils/command/defaults/CommandAlias.java +++ b/src/main/java/baritone/command/defaults/CommandAlias.java @@ -15,11 +15,11 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.utils.command.Command; -import baritone.api.utils.command.helpers.arguments.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.helpers.arguments.IArgConsumer; import java.util.Collections; import java.util.List; @@ -31,7 +31,7 @@ public class CommandAlias extends Command { public final String target; public CommandAlias(IBaritone baritone, List names, String shortDesc, String target) { - super(baritone, names); + super(baritone, names.toArray(new String[0])); this.shortDesc = shortDesc; this.target = target; } diff --git a/src/main/java/baritone/utils/command/defaults/DefaultCommands.java b/src/main/java/baritone/command/defaults/DefaultCommands.java similarity index 96% rename from src/main/java/baritone/utils/command/defaults/DefaultCommands.java rename to src/main/java/baritone/command/defaults/DefaultCommands.java index 3f8e3908..dd1a3004 100644 --- a/src/main/java/baritone/utils/command/defaults/DefaultCommands.java +++ b/src/main/java/baritone/command/defaults/DefaultCommands.java @@ -15,10 +15,10 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.utils.command.Command; +import baritone.api.command.Command; import java.util.*; @@ -34,6 +34,7 @@ public final class DefaultCommands { new CommandAlias(baritone, Arrays.asList("modified", "mod", "baritone", "modifiedsettings"), "List modified settings", "set modified"), new CommandAlias(baritone, "reset", "Reset all settings or just one", "set reset"), new GoalCommand(baritone), + new GotoCommand(baritone), new PathCommand(baritone), new ProcCommand(baritone), new VersionCommand(baritone), diff --git a/src/main/java/baritone/utils/command/defaults/ExploreCommand.java b/src/main/java/baritone/command/defaults/ExploreCommand.java similarity index 89% rename from src/main/java/baritone/utils/command/defaults/ExploreCommand.java rename to src/main/java/baritone/command/defaults/ExploreCommand.java index 15a8e241..a2054cc7 100644 --- a/src/main/java/baritone/utils/command/defaults/ExploreCommand.java +++ b/src/main/java/baritone/command/defaults/ExploreCommand.java @@ -15,14 +15,14 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; import baritone.api.IBaritone; 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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.datatypes.RelativeGoalXZ; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.arguments.IArgConsumer; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/utils/command/defaults/ExploreFilterCommand.java b/src/main/java/baritone/command/defaults/ExploreFilterCommand.java similarity index 88% rename from src/main/java/baritone/utils/command/defaults/ExploreFilterCommand.java rename to src/main/java/baritone/command/defaults/ExploreFilterCommand.java index 6f60a55d..a1c5074a 100644 --- a/src/main/java/baritone/utils/command/defaults/ExploreFilterCommand.java +++ b/src/main/java/baritone/command/defaults/ExploreFilterCommand.java @@ -15,15 +15,15 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; import baritone.api.IBaritone; -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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.datatypes.RelativeFile; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.api.command.helpers.arguments.IArgConsumer; import com.google.gson.JsonSyntaxException; import java.io.File; diff --git a/src/main/java/baritone/utils/command/defaults/FarmCommand.java b/src/main/java/baritone/command/defaults/FarmCommand.java similarity index 88% rename from src/main/java/baritone/utils/command/defaults/FarmCommand.java rename to src/main/java/baritone/command/defaults/FarmCommand.java index 0ece390d..9151852c 100644 --- a/src/main/java/baritone/utils/command/defaults/FarmCommand.java +++ b/src/main/java/baritone/command/defaults/FarmCommand.java @@ -15,12 +15,12 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.arguments.IArgConsumer; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/utils/command/defaults/FindCommand.java b/src/main/java/baritone/command/defaults/FindCommand.java similarity index 89% rename from src/main/java/baritone/utils/command/defaults/FindCommand.java rename to src/main/java/baritone/command/defaults/FindCommand.java index 62a49e02..22a8fd87 100644 --- a/src/main/java/baritone/utils/command/defaults/FindCommand.java +++ b/src/main/java/baritone/command/defaults/FindCommand.java @@ -15,14 +15,14 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; import baritone.api.IBaritone; 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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.datatypes.BlockById; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.arguments.IArgConsumer; import net.minecraft.block.Block; import java.util.ArrayList; diff --git a/src/main/java/baritone/utils/command/defaults/FollowCommand.java b/src/main/java/baritone/command/defaults/FollowCommand.java similarity index 91% rename from src/main/java/baritone/utils/command/defaults/FollowCommand.java rename to src/main/java/baritone/command/defaults/FollowCommand.java index b1cb5a80..e9c80ab9 100644 --- a/src/main/java/baritone/utils/command/defaults/FollowCommand.java +++ b/src/main/java/baritone/command/defaults/FollowCommand.java @@ -15,16 +15,16 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.utils.command.Command; -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.IArgConsumer; -import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper; +import baritone.api.command.Command; +import baritone.api.command.datatypes.EntityClassById; +import baritone.api.command.datatypes.IDatatypeFor; +import baritone.api.command.datatypes.NearbyPlayer; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.arguments.IArgConsumer; +import baritone.api.command.helpers.tabcomplete.TabCompleteHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityList; import net.minecraft.entity.EntityLiving; diff --git a/src/main/java/baritone/utils/command/defaults/ForceCancelCommand.java b/src/main/java/baritone/command/defaults/ForceCancelCommand.java similarity index 89% rename from src/main/java/baritone/utils/command/defaults/ForceCancelCommand.java rename to src/main/java/baritone/command/defaults/ForceCancelCommand.java index 7a020b14..f9213482 100644 --- a/src/main/java/baritone/utils/command/defaults/ForceCancelCommand.java +++ b/src/main/java/baritone/command/defaults/ForceCancelCommand.java @@ -15,13 +15,13 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; 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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.arguments.IArgConsumer; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/utils/command/defaults/GcCommand.java b/src/main/java/baritone/command/defaults/GcCommand.java similarity index 88% rename from src/main/java/baritone/utils/command/defaults/GcCommand.java rename to src/main/java/baritone/command/defaults/GcCommand.java index 20b2e334..c64703e9 100644 --- a/src/main/java/baritone/utils/command/defaults/GcCommand.java +++ b/src/main/java/baritone/command/defaults/GcCommand.java @@ -15,12 +15,12 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.arguments.IArgConsumer; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/utils/command/defaults/GoalCommand.java b/src/main/java/baritone/command/defaults/GoalCommand.java similarity index 89% rename from src/main/java/baritone/utils/command/defaults/GoalCommand.java rename to src/main/java/baritone/command/defaults/GoalCommand.java index f2692fb2..46b50695 100644 --- a/src/main/java/baritone/utils/command/defaults/GoalCommand.java +++ b/src/main/java/baritone/command/defaults/GoalCommand.java @@ -15,18 +15,18 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; import baritone.api.IBaritone; import baritone.api.pathing.goals.Goal; import baritone.api.process.ICustomGoalProcess; 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.IArgConsumer; -import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper; +import baritone.api.command.Command; +import baritone.api.command.datatypes.RelativeCoordinate; +import baritone.api.command.datatypes.RelativeGoal; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.arguments.IArgConsumer; +import baritone.api.command.helpers.tabcomplete.TabCompleteHelper; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/command/defaults/GotoCommand.java b/src/main/java/baritone/command/defaults/GotoCommand.java new file mode 100644 index 00000000..9659fff8 --- /dev/null +++ b/src/main/java/baritone/command/defaults/GotoCommand.java @@ -0,0 +1,82 @@ +/* + * 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.command.defaults; + +import baritone.api.IBaritone; +import baritone.api.command.Command; +import baritone.api.command.datatypes.BlockById; +import baritone.api.command.datatypes.ForBlockOptionalMeta; +import baritone.api.command.datatypes.RelativeCoordinate; +import baritone.api.command.datatypes.RelativeGoal; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.arguments.IArgConsumer; +import baritone.api.pathing.goals.Goal; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.BlockOptionalMeta; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +public class GotoCommand extends Command { + + protected GotoCommand(IBaritone baritone) { + super(baritone, "goto"); + } + + @Override + public void execute(String label, IArgConsumer args) throws CommandException { + if (args.peekDatatypeOrNull(RelativeCoordinate.INSTANCE) != null) { // if we have a numeric first argument... + BetterBlockPos origin = baritone.getPlayerContext().playerFeet(); + Goal goal = args.getDatatypePostOrNull(RelativeGoal.INSTANCE, origin); + logDirect(String.format("Going to: %s", goal.toString())); + baritone.getCustomGoalProcess().setGoalAndPath(goal); + return; + } + args.requireMax(1); + BlockOptionalMeta destination = args.getDatatypeFor(ForBlockOptionalMeta.INSTANCE); + baritone.getGetToBlockProcess().getToBlock(destination); + } + + @Override + public Stream tabComplete(String label, IArgConsumer args) throws CommandException { + // since it's either a goal or a block, I don't think we can tab complete properly? + // so just tab complete for the block variant + return args.tabCompleteDatatype(BlockById.INSTANCE); + } + + @Override + public String getShortDesc() { + return "Go to a coordinate or block"; + } + + @Override + public List getLongDesc() { + return Arrays.asList( + "The got command tells Baritone to head towards a given goal or block.", + "", + "Wherever a coordinate is expected, you can use ~ just like in regular Minecraft commands. Or, you can just use regular numbers.", + "", + "Usage:", + "> goto - Go to a block, wherever it is in the world", + "> goto - Go to a Y level", + "> goto - Go to an X,Z position", + "> goto - Go to an X,Y,Z position" + ); + } +} diff --git a/src/main/java/baritone/utils/command/defaults/HelpCommand.java b/src/main/java/baritone/command/defaults/HelpCommand.java similarity index 87% rename from src/main/java/baritone/utils/command/defaults/HelpCommand.java rename to src/main/java/baritone/command/defaults/HelpCommand.java index 480207f1..fe3c4808 100644 --- a/src/main/java/baritone/utils/command/defaults/HelpCommand.java +++ b/src/main/java/baritone/command/defaults/HelpCommand.java @@ -15,15 +15,15 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; 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.IArgConsumer; -import baritone.api.utils.command.helpers.pagination.Paginator; -import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandNotFoundException; +import baritone.api.command.helpers.arguments.IArgConsumer; +import baritone.api.command.helpers.pagination.Paginator; +import baritone.api.command.helpers.tabcomplete.TabCompleteHelper; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextFormatting; @@ -35,12 +35,12 @@ import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; -import static baritone.api.utils.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; public class HelpCommand extends Command { public HelpCommand(IBaritone baritone) { - super(baritone, Arrays.asList("help", "?")); + super(baritone, "help", "?"); } @Override @@ -55,8 +55,8 @@ public class HelpCommand extends Command { ), () -> logDirect("All Baritone commands (clickable):"), command -> { - String names = String.join("/", command.names); - String name = command.names.get(0); + String names = String.join("/", command.getNames()); + String name = command.getNames().get(0); ITextComponent shortDescComponent = new TextComponentString(" - " + command.getShortDesc()); shortDescComponent.getStyle().setColor(TextFormatting.DARK_GRAY); ITextComponent namesComponent = new TextComponentString(names); @@ -66,7 +66,7 @@ public class HelpCommand extends Command { hoverComponent.appendSibling(namesComponent); hoverComponent.appendText("\n" + command.getShortDesc()); hoverComponent.appendText("\n\nClick to view full help"); - String clickCommand = FORCE_COMMAND_PREFIX + String.format("%s %s", label, command.names.get(0)); + String clickCommand = FORCE_COMMAND_PREFIX + String.format("%s %s", label, command.getNames().get(0)); ITextComponent component = new TextComponentString(name); component.getStyle().setColor(TextFormatting.GRAY); component.appendSibling(shortDescComponent); @@ -83,7 +83,7 @@ public class HelpCommand extends Command { if (command == null) { throw new CommandNotFoundException(commandName); } - logDirect(String.format("%s - %s", String.join(" / ", command.names), command.getShortDesc())); + logDirect(String.format("%s - %s", String.join(" / ", command.getNames()), command.getShortDesc())); logDirect(""); command.getLongDesc().forEach(this::logDirect); logDirect(""); diff --git a/src/main/java/baritone/utils/command/defaults/InvertCommand.java b/src/main/java/baritone/command/defaults/InvertCommand.java similarity index 88% rename from src/main/java/baritone/utils/command/defaults/InvertCommand.java rename to src/main/java/baritone/command/defaults/InvertCommand.java index 9b5d0a16..ba79a4a9 100644 --- a/src/main/java/baritone/utils/command/defaults/InvertCommand.java +++ b/src/main/java/baritone/command/defaults/InvertCommand.java @@ -15,16 +15,16 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; import baritone.api.IBaritone; 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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.command.helpers.arguments.IArgConsumer; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/utils/command/defaults/MineCommand.java b/src/main/java/baritone/command/defaults/MineCommand.java similarity index 88% rename from src/main/java/baritone/utils/command/defaults/MineCommand.java rename to src/main/java/baritone/command/defaults/MineCommand.java index 2a91c6e6..d2846e0a 100644 --- a/src/main/java/baritone/utils/command/defaults/MineCommand.java +++ b/src/main/java/baritone/command/defaults/MineCommand.java @@ -15,15 +15,15 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; import baritone.api.IBaritone; 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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.datatypes.BlockById; +import baritone.api.command.datatypes.ForBlockOptionalMeta; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.arguments.IArgConsumer; import baritone.cache.WorldScanner; import java.util.ArrayList; diff --git a/src/main/java/baritone/utils/command/defaults/PathCommand.java b/src/main/java/baritone/command/defaults/PathCommand.java similarity index 51% rename from src/main/java/baritone/utils/command/defaults/PathCommand.java rename to src/main/java/baritone/command/defaults/PathCommand.java index e52a93a4..fff61a70 100644 --- a/src/main/java/baritone/utils/command/defaults/PathCommand.java +++ b/src/main/java/baritone/command/defaults/PathCommand.java @@ -15,18 +15,13 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; import baritone.api.IBaritone; -import baritone.api.pathing.goals.Goal; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.arguments.IArgConsumer; 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.IArgConsumer; -import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper; import baritone.cache.WorldScanner; import java.util.Arrays; @@ -36,47 +31,26 @@ import java.util.stream.Stream; public class PathCommand extends Command { public PathCommand(IBaritone baritone) { - super(baritone, Arrays.asList("path", "goto")); + super(baritone, "path"); } @Override public void execute(String label, IArgConsumer args) throws CommandException { ICustomGoalProcess customGoalProcess = baritone.getCustomGoalProcess(); - Goal goal; - if (args.hasAny()) { - args.requireMax(3); - goal = args.getDatatypePost(RelativeGoal.INSTANCE, ctx.playerFeet()); - } else if ((goal = customGoalProcess.getGoal()) == null) { - throw new CommandInvalidStateException("No goal"); - } args.requireMax(0); WorldScanner.INSTANCE.repack(ctx); - customGoalProcess.setGoalAndPath(goal); + customGoalProcess.path(); logDirect("Now pathing"); } @Override public Stream tabComplete(String label, IArgConsumer args) throws CommandException { - if (args.hasAny() && !args.has(4)) { - while (args.has(2)) { - if (args.peekDatatypeOrNull(RelativeCoordinate.INSTANCE) == null) { - break; - } - args.get(); - if (!args.has(2)) { - return new TabCompleteHelper() - .append("~") - .filterPrefix(args.getString()) - .stream(); - } - } - } return Stream.empty(); } @Override public String getShortDesc() { - return "Start heading towards a goal"; + return "Start heading towards the goal"; } @Override @@ -85,10 +59,7 @@ public class PathCommand extends Command { "The path command tells Baritone to head towards the current goal.", "", "Usage:", - "> path - Start the pathing.", - "> path ", - "> path ", - "> path - Define the goal here" + "> path - Start the pathing." ); } } diff --git a/src/main/java/baritone/utils/command/defaults/PauseResumeCommands.java b/src/main/java/baritone/command/defaults/PauseResumeCommands.java similarity index 95% rename from src/main/java/baritone/utils/command/defaults/PauseResumeCommands.java rename to src/main/java/baritone/command/defaults/PauseResumeCommands.java index 08a0ae66..11e67882 100644 --- a/src/main/java/baritone/utils/command/defaults/PauseResumeCommands.java +++ b/src/main/java/baritone/command/defaults/PauseResumeCommands.java @@ -15,16 +15,16 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; import baritone.api.IBaritone; 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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.command.helpers.arguments.IArgConsumer; import java.util.Arrays; import java.util.List; @@ -114,6 +114,7 @@ public class PauseResumeCommands { @Override public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(0); + baritone.getBuilderProcess().resume(); if (!paused[0]) { throw new CommandInvalidStateException("Not paused"); } diff --git a/src/main/java/baritone/utils/command/defaults/ProcCommand.java b/src/main/java/baritone/command/defaults/ProcCommand.java similarity index 90% rename from src/main/java/baritone/utils/command/defaults/ProcCommand.java rename to src/main/java/baritone/command/defaults/ProcCommand.java index 233c18a3..794a4480 100644 --- a/src/main/java/baritone/utils/command/defaults/ProcCommand.java +++ b/src/main/java/baritone/command/defaults/ProcCommand.java @@ -15,16 +15,16 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; import baritone.api.IBaritone; 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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.command.helpers.arguments.IArgConsumer; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/utils/command/defaults/ReloadAllCommand.java b/src/main/java/baritone/command/defaults/ReloadAllCommand.java similarity index 88% rename from src/main/java/baritone/utils/command/defaults/ReloadAllCommand.java rename to src/main/java/baritone/command/defaults/ReloadAllCommand.java index 6128094c..9f4ddd83 100644 --- a/src/main/java/baritone/utils/command/defaults/ReloadAllCommand.java +++ b/src/main/java/baritone/command/defaults/ReloadAllCommand.java @@ -15,12 +15,12 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.arguments.IArgConsumer; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/utils/command/defaults/RenderCommand.java b/src/main/java/baritone/command/defaults/RenderCommand.java similarity index 90% rename from src/main/java/baritone/utils/command/defaults/RenderCommand.java rename to src/main/java/baritone/command/defaults/RenderCommand.java index 15473afa..ea51edc8 100644 --- a/src/main/java/baritone/utils/command/defaults/RenderCommand.java +++ b/src/main/java/baritone/command/defaults/RenderCommand.java @@ -15,13 +15,13 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; 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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.arguments.IArgConsumer; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/utils/command/defaults/RepackCommand.java b/src/main/java/baritone/command/defaults/RepackCommand.java similarity index 85% rename from src/main/java/baritone/utils/command/defaults/RepackCommand.java rename to src/main/java/baritone/command/defaults/RepackCommand.java index 1f11802a..d42bd95a 100644 --- a/src/main/java/baritone/utils/command/defaults/RepackCommand.java +++ b/src/main/java/baritone/command/defaults/RepackCommand.java @@ -15,12 +15,12 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.arguments.IArgConsumer; import baritone.cache.WorldScanner; import java.util.Arrays; @@ -30,7 +30,7 @@ import java.util.stream.Stream; public class RepackCommand extends Command { public RepackCommand(IBaritone baritone) { - super(baritone, Arrays.asList("repack", "rescan")); + super(baritone, "repack", "rescan"); } @Override diff --git a/src/main/java/baritone/utils/command/defaults/SaveAllCommand.java b/src/main/java/baritone/command/defaults/SaveAllCommand.java similarity index 88% rename from src/main/java/baritone/utils/command/defaults/SaveAllCommand.java rename to src/main/java/baritone/command/defaults/SaveAllCommand.java index 9c507f69..7df2e320 100644 --- a/src/main/java/baritone/utils/command/defaults/SaveAllCommand.java +++ b/src/main/java/baritone/command/defaults/SaveAllCommand.java @@ -15,12 +15,12 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.arguments.IArgConsumer; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/utils/command/defaults/SchematicaCommand.java b/src/main/java/baritone/command/defaults/SchematicaCommand.java similarity index 88% rename from src/main/java/baritone/utils/command/defaults/SchematicaCommand.java rename to src/main/java/baritone/command/defaults/SchematicaCommand.java index c531a48b..5f659d1f 100644 --- a/src/main/java/baritone/utils/command/defaults/SchematicaCommand.java +++ b/src/main/java/baritone/command/defaults/SchematicaCommand.java @@ -15,12 +15,12 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.arguments.IArgConsumer; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/utils/command/defaults/SelCommand.java b/src/main/java/baritone/command/defaults/SelCommand.java similarity index 95% rename from src/main/java/baritone/utils/command/defaults/SelCommand.java rename to src/main/java/baritone/command/defaults/SelCommand.java index 83fc77e3..342d0a31 100644 --- a/src/main/java/baritone/utils/command/defaults/SelCommand.java +++ b/src/main/java/baritone/command/defaults/SelCommand.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; import baritone.Baritone; import baritone.api.IBaritone; @@ -28,15 +28,15 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.BlockOptionalMeta; import baritone.api.utils.BlockOptionalMetaLookup; import baritone.api.utils.ISchematic; -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.IArgConsumer; -import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper; +import baritone.api.command.Command; +import baritone.api.command.datatypes.ForBlockOptionalMeta; +import baritone.api.command.datatypes.ForEnumFacing; +import baritone.api.command.datatypes.RelativeBlockPos; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.api.command.helpers.arguments.IArgConsumer; +import baritone.api.command.helpers.tabcomplete.TabCompleteHelper; import baritone.utils.IRenderer; import net.minecraft.init.Blocks; import net.minecraft.util.EnumFacing; @@ -56,7 +56,7 @@ public class SelCommand extends Command { private BetterBlockPos pos1 = null; public SelCommand(IBaritone baritone) { - super(baritone, Arrays.asList("sel", "selection", "s")); + super(baritone, "sel", "selection", "s"); baritone.getGameEventHandler().registerEventListener(new AbstractGameEventListener() { @Override public void onRenderPass(RenderEvent event) { diff --git a/src/main/java/baritone/utils/command/defaults/SetCommand.java b/src/main/java/baritone/command/defaults/SetCommand.java similarity index 95% rename from src/main/java/baritone/utils/command/defaults/SetCommand.java rename to src/main/java/baritone/command/defaults/SetCommand.java index be07a7ae..280f56ea 100644 --- a/src/main/java/baritone/utils/command/defaults/SetCommand.java +++ b/src/main/java/baritone/command/defaults/SetCommand.java @@ -15,18 +15,18 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; import baritone.Baritone; 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.IArgConsumer; -import baritone.api.utils.command.helpers.pagination.Paginator; -import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.api.command.helpers.arguments.IArgConsumer; +import baritone.api.command.helpers.pagination.Paginator; +import baritone.api.command.helpers.tabcomplete.TabCompleteHelper; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextFormatting; @@ -41,12 +41,12 @@ import java.util.stream.Stream; import static baritone.api.utils.SettingsUtil.settingTypeToString; import static baritone.api.utils.SettingsUtil.settingValueToString; -import static baritone.api.utils.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; public class SetCommand extends Command { public SetCommand(IBaritone baritone) { - super(baritone, Arrays.asList("set", "setting", "settings")); + super(baritone, "set", "setting", "settings"); } @Override diff --git a/src/main/java/baritone/utils/command/defaults/ThisWayCommand.java b/src/main/java/baritone/command/defaults/ThisWayCommand.java similarity index 87% rename from src/main/java/baritone/utils/command/defaults/ThisWayCommand.java rename to src/main/java/baritone/command/defaults/ThisWayCommand.java index bef3a513..9ff42f42 100644 --- a/src/main/java/baritone/utils/command/defaults/ThisWayCommand.java +++ b/src/main/java/baritone/command/defaults/ThisWayCommand.java @@ -15,13 +15,13 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; 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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.arguments.IArgConsumer; import java.util.Arrays; import java.util.List; @@ -30,7 +30,7 @@ import java.util.stream.Stream; public class ThisWayCommand extends Command { public ThisWayCommand(IBaritone baritone) { - super(baritone, Arrays.asList("thisway", "forward")); + super(baritone, "thisway", "forward"); } @Override diff --git a/src/main/java/baritone/utils/command/defaults/TunnelCommand.java b/src/main/java/baritone/command/defaults/TunnelCommand.java similarity index 90% rename from src/main/java/baritone/utils/command/defaults/TunnelCommand.java rename to src/main/java/baritone/command/defaults/TunnelCommand.java index 1b9066f9..e7830c05 100644 --- a/src/main/java/baritone/utils/command/defaults/TunnelCommand.java +++ b/src/main/java/baritone/command/defaults/TunnelCommand.java @@ -15,14 +15,14 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; import baritone.api.IBaritone; 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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.helpers.arguments.IArgConsumer; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/utils/command/defaults/VersionCommand.java b/src/main/java/baritone/command/defaults/VersionCommand.java similarity index 87% rename from src/main/java/baritone/utils/command/defaults/VersionCommand.java rename to src/main/java/baritone/command/defaults/VersionCommand.java index 4c9aa850..6e063b0f 100644 --- a/src/main/java/baritone/utils/command/defaults/VersionCommand.java +++ b/src/main/java/baritone/command/defaults/VersionCommand.java @@ -15,13 +15,13 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; 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.IArgConsumer; +import baritone.api.command.Command; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.command.helpers.arguments.IArgConsumer; import java.util.Arrays; import java.util.List; diff --git a/src/main/java/baritone/utils/command/defaults/WaypointsCommand.java b/src/main/java/baritone/command/defaults/WaypointsCommand.java similarity index 94% rename from src/main/java/baritone/utils/command/defaults/WaypointsCommand.java rename to src/main/java/baritone/command/defaults/WaypointsCommand.java index bda39e2a..c61f6557 100644 --- a/src/main/java/baritone/utils/command/defaults/WaypointsCommand.java +++ b/src/main/java/baritone/command/defaults/WaypointsCommand.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.defaults; +package baritone.command.defaults; import baritone.api.IBaritone; import baritone.api.cache.IWaypoint; @@ -23,15 +23,15 @@ import baritone.api.cache.Waypoint; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalBlock; 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.IArgConsumer; -import baritone.api.utils.command.helpers.pagination.Paginator; -import baritone.api.utils.command.helpers.tabcomplete.TabCompleteHelper; +import baritone.api.command.Command; +import baritone.api.command.datatypes.ForWaypoints; +import baritone.api.command.datatypes.RelativeBlockPos; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.api.command.helpers.arguments.IArgConsumer; +import baritone.api.command.helpers.pagination.Paginator; +import baritone.api.command.helpers.tabcomplete.TabCompleteHelper; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextFormatting; @@ -43,12 +43,12 @@ import java.util.function.BiFunction; import java.util.function.Function; import java.util.stream.Stream; -import static baritone.api.utils.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; public class WaypointsCommand extends Command { public WaypointsCommand(IBaritone baritone) { - super(baritone, Arrays.asList("waypoints", "waypoint", "wp")); + super(baritone, "waypoints", "waypoint", "wp"); } @Override diff --git a/src/main/java/baritone/utils/command/helpers/arguments/ArgConsumer.java b/src/main/java/baritone/command/helpers/arguments/ArgConsumer.java similarity index 94% rename from src/main/java/baritone/utils/command/helpers/arguments/ArgConsumer.java rename to src/main/java/baritone/command/helpers/arguments/ArgConsumer.java index 06aaa6eb..c6a4fb0c 100644 --- a/src/main/java/baritone/utils/command/helpers/arguments/ArgConsumer.java +++ b/src/main/java/baritone/command/helpers/arguments/ArgConsumer.java @@ -15,21 +15,21 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.helpers.arguments; +package baritone.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 baritone.api.command.argument.ICommandArgument; +import baritone.api.command.datatypes.IDatatype; +import baritone.api.command.datatypes.IDatatypeContext; +import baritone.api.command.datatypes.IDatatypeFor; +import baritone.api.command.datatypes.IDatatypePost; +import baritone.api.command.exception.CommandException; +import baritone.api.command.exception.CommandInvalidTypeException; +import baritone.api.command.exception.CommandNotEnoughArgumentsException; +import baritone.api.command.exception.CommandTooManyArgumentsException; +import baritone.api.command.helpers.arguments.IArgConsumer; +import baritone.api.command.manager.ICommandManager; +import baritone.command.argument.CommandArguments; import java.util.ArrayList; import java.util.Deque; diff --git a/src/main/java/baritone/utils/command/manager/CommandManager.java b/src/main/java/baritone/command/manager/CommandManager.java similarity index 86% rename from src/main/java/baritone/utils/command/manager/CommandManager.java rename to src/main/java/baritone/command/manager/CommandManager.java index 290b3852..20f293b1 100644 --- a/src/main/java/baritone/utils/command/manager/CommandManager.java +++ b/src/main/java/baritone/command/manager/CommandManager.java @@ -15,20 +15,20 @@ * along with Baritone. If not, see . */ -package baritone.utils.command.manager; +package baritone.command.manager; import baritone.Baritone; import baritone.api.IBaritone; -import baritone.api.utils.command.Command; -import baritone.api.utils.command.argument.ICommandArgument; -import baritone.api.utils.command.exception.CommandUnhandledException; -import baritone.api.utils.command.exception.ICommandException; -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 baritone.api.command.Command; +import baritone.api.command.argument.ICommandArgument; +import baritone.api.command.exception.CommandUnhandledException; +import baritone.api.command.exception.ICommandException; +import baritone.command.helpers.arguments.ArgConsumer; +import baritone.api.command.helpers.tabcomplete.TabCompleteHelper; +import baritone.api.command.manager.ICommandManager; +import baritone.api.command.registry.Registry; +import baritone.command.argument.CommandArguments; +import baritone.command.defaults.DefaultCommands; import net.minecraft.util.Tuple; import java.util.List; @@ -64,7 +64,7 @@ public class CommandManager implements ICommandManager { @Override public Command getCommand(String name) { for (Command command : this.registry.entries) { - if (command.names.contains(name.toLowerCase(Locale.US))) { + if (command.getNames().contains(name.toLowerCase(Locale.US))) { return command; } } diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index 8e2fc518..124e6f10 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -135,7 +135,7 @@ public class CalculationContext { return get(x, y, z).getBlock(); } - public double costOfPlacingAt(int x, int y, int z) { + public double costOfPlacingAt(int x, int y, int z, IBlockState current) { if (!hasThrowaway) { // only true if allowPlace is true, see constructor return COST_INF; } @@ -149,7 +149,7 @@ public class CalculationContext { return placeBlockCost; } - public double breakCostMultiplierAt(int x, int y, int z) { + public double breakCostMultiplierAt(int x, int y, int z, IBlockState current) { if (!allowBreak) { return COST_INF; } diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index b8739d1c..725a0876 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -376,7 +376,7 @@ public interface MovementHelper extends ActionCosts, Helper { if (block instanceof BlockLiquid) { return COST_INF; } - double mult = context.breakCostMultiplierAt(x, y, z); + double mult = context.breakCostMultiplierAt(x, y, z, state); if (mult >= COST_INF) { return COST_INF; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index 66827a35..4f35ef8e 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -69,7 +69,7 @@ public class MovementAscend extends Movement { IBlockState toPlace = context.get(destX, y, destZ); double additionalPlacementCost = 0; if (!MovementHelper.canWalkOn(context.bsi, destX, y, destZ, toPlace)) { - additionalPlacementCost = context.costOfPlacingAt(destX, y, destZ); + additionalPlacementCost = context.costOfPlacingAt(destX, y, destZ, toPlace); if (additionalPlacementCost >= COST_INF) { return COST_INF; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index 41a183f8..eb032210 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -147,11 +147,11 @@ public class MovementParkour extends Movement { // time 2 pop off with that dank skynet parkour place int destX = x + 4 * xDiff; int destZ = z + 4 * zDiff; - double placeCost = context.costOfPlacingAt(destX, y - 1, destZ); + IBlockState toReplace = context.get(destX, y - 1, destZ); + double placeCost = context.costOfPlacingAt(destX, y - 1, destZ, toReplace); if (placeCost >= COST_INF) { return; } - IBlockState toReplace = context.get(destX, y - 1, destZ); if (!MovementHelper.isReplaceable(destX, y - 1, destZ, toReplace, context.bsi)) { return; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index c444422e..d28ff32c 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -57,7 +57,8 @@ public class MovementPillar extends Movement { } public static double cost(CalculationContext context, int x, int y, int z) { - Block from = context.get(x, y, z).getBlock(); + IBlockState fromState = context.get(x, y, z); + Block from = fromState.getBlock(); boolean ladder = from == Blocks.LADDER || from == Blocks.VINE; IBlockState fromDown = context.get(x, y - 1, z); if (!ladder) { @@ -86,7 +87,7 @@ public class MovementPillar extends Movement { double placeCost = 0; if (!ladder) { // we need to place a block where we started to jump on it - placeCost = context.costOfPlacingAt(x, y, z); + placeCost = context.costOfPlacingAt(x, y, z, fromState); if (placeCost >= COST_INF) { return COST_INF; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index c1f5ed01..29ac1cec 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -117,7 +117,7 @@ public class MovementTraverse extends Movement { // this happens when assume walk on water is true and this is a traverse in water, which isn't allowed return COST_INF; } - double placeCost = context.costOfPlacingAt(destX, y - 1, destZ); + double placeCost = context.costOfPlacingAt(destX, y - 1, destZ, destOn); if (placeCost >= COST_INF) { return COST_INF; } diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index cd15f283..687e6c98 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -791,11 +791,11 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil } @Override - public double costOfPlacingAt(int x, int y, int z) { + public double costOfPlacingAt(int x, int y, int z, IBlockState current) { if (isPossiblyProtected(x, y, z) || !worldBorder.canPlaceAt(x, z)) { // make calculation fail properly if we can't build return COST_INF; } - IBlockState sch = getSchematic(x, y, z, bsi.get0(x, y, z)); + IBlockState sch = getSchematic(x, y, z, current); if (sch != null) { // TODO this can return true even when allowPlace is off.... is that an issue? if (sch.getBlock() == Blocks.AIR) { @@ -825,11 +825,11 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil } @Override - public double breakCostMultiplierAt(int x, int y, int z) { + public double breakCostMultiplierAt(int x, int y, int z, IBlockState current) { if (!allowBreak || isPossiblyProtected(x, y, z)) { return COST_INF; } - IBlockState sch = getSchematic(x, y, z, bsi.get0(x, y, z)); + IBlockState sch = getSchematic(x, y, z, current); if (sch != null) { if (sch.getBlock() == Blocks.AIR) { // it should be air diff --git a/src/main/java/baritone/process/GetToBlockProcess.java b/src/main/java/baritone/process/GetToBlockProcess.java index 5c1d7783..00ec2609 100644 --- a/src/main/java/baritone/process/GetToBlockProcess.java +++ b/src/main/java/baritone/process/GetToBlockProcess.java @@ -22,6 +22,7 @@ import baritone.api.pathing.goals.*; import baritone.api.process.IGetToBlockProcess; import baritone.api.process.PathingCommand; import baritone.api.process.PathingCommandType; +import baritone.api.utils.BlockOptionalMeta; import baritone.api.utils.BlockOptionalMetaLookup; import baritone.api.utils.Rotation; import baritone.api.utils.RotationUtils; @@ -33,14 +34,11 @@ import net.minecraft.init.Blocks; import net.minecraft.inventory.ContainerPlayer; import net.minecraft.util.math.BlockPos; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Optional; +import java.util.*; public final class GetToBlockProcess extends BaritoneProcessHelper implements IGetToBlockProcess { - private Block gettingTo; + private BlockOptionalMeta gettingTo; private List knownLocations; private List blacklist; // locations we failed to calc to private BlockPos start; @@ -53,7 +51,7 @@ public final class GetToBlockProcess extends BaritoneProcessHelper implements IG } @Override - public void getToBlock(Block block) { + public void getToBlock(BlockOptionalMeta block) { onLostControl(); gettingTo = block; start = ctx.playerFeet(); @@ -109,7 +107,7 @@ public final class GetToBlockProcess extends BaritoneProcessHelper implements IG } if (goal.isInGoal(ctx.playerFeet()) && goal.isInGoal(baritone.getPathingBehavior().pathStart()) && isSafeToCancel) { // we're there - if (rightClickOnArrival(gettingTo)) { + if (rightClickOnArrival(gettingTo.getBlock())) { if (rightClick()) { onLostControl(); return new PathingCommand(null, PathingCommandType.CANCEL_AND_SET_GOAL); @@ -175,16 +173,16 @@ public final class GetToBlockProcess extends BaritoneProcessHelper implements IG } private synchronized void rescan(List known, CalculationContext context) { - List positions = MineProcess.searchWorld(context, new BlockOptionalMetaLookup(gettingTo), 64, known, blacklist); + List positions = MineProcess.searchWorld(context, new BlockOptionalMetaLookup(gettingTo), 64, known, blacklist, Collections.emptyList()); positions.removeIf(blacklist::contains); knownLocations = positions; } private Goal createGoal(BlockPos pos) { - if (walkIntoInsteadOfAdjacent(gettingTo)) { + if (walkIntoInsteadOfAdjacent(gettingTo.getBlock())) { return new GoalTwoBlocks(pos); } - if (blockOnTopMustBeRemoved(gettingTo) && baritone.bsi.get0(pos.up()).isBlockNormalCube()) { + if (blockOnTopMustBeRemoved(gettingTo.getBlock()) && baritone.bsi.get0(pos.up()).isBlockNormalCube()) { return new GoalBlock(pos.up()); } return new GoalGetToBlock(pos); diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 4043e627..a76121b8 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -39,7 +39,6 @@ import net.minecraft.entity.item.EntityItem; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; import java.util.*; import java.util.stream.Collectors; @@ -58,6 +57,7 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro private BlockOptionalMetaLookup filter; private List knownOreLocations; private List blacklist; // inaccessible + private Map anticipatedDrops; private BlockPos branchPoint; private GoalRunAway branchPointRunaway; private int desiredQuantity; @@ -101,6 +101,7 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro cancel(); return null; } + updateLoucaSystem(); int mineGoalUpdateInterval = Baritone.settings().mineGoalUpdateInterval.value; List curr = new ArrayList<>(knownOreLocations); if (mineGoalUpdateInterval != 0 && tickCount++ % mineGoalUpdateInterval == 0) { // big brain @@ -141,6 +142,23 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro return command; } + private void updateLoucaSystem() { + Map copy = new HashMap<>(anticipatedDrops); + ctx.getSelectedBlock().ifPresent(pos -> { + if (knownOreLocations.contains(pos)) { + copy.put(pos, System.currentTimeMillis() + Baritone.settings().mineDropLoiterDurationMSThanksLouca.value); + } + }); + // elaborate dance to avoid concurrentmodificationexcepption since rescan thread reads this + // don't want to slow everything down with a gross lock do we now + for (BlockPos pos : anticipatedDrops.keySet()) { + if (copy.get(pos) < System.currentTimeMillis()) { + copy.remove(pos); + } + } + anticipatedDrops = copy; + } + @Override public void onLostControl() { mine(0, (BlockOptionalMetaLookup) null); @@ -155,9 +173,10 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro boolean legit = Baritone.settings().legitMine.value; List locs = knownOreLocations; if (!locs.isEmpty()) { - List locs2 = prune(new CalculationContext(baritone), new ArrayList<>(locs), filter, ORE_LOCATIONS_COUNT, blacklist); + CalculationContext context = new CalculationContext(baritone); + List locs2 = prune(context, new ArrayList<>(locs), filter, ORE_LOCATIONS_COUNT, blacklist, droppedItemsScan()); // can't reassign locs, gotta make a new var locs2, because we use it in a lambda right here, and variables you use in a lambda must be effectively final - Goal goal = new GoalComposite(locs2.stream().map(loc -> coalesce(loc, locs2)).toArray(Goal[]::new)); + Goal goal = new GoalComposite(locs2.stream().map(loc -> coalesce(loc, locs2, context)).toArray(Goal[]::new)); knownOreLocations = locs2; return new PathingCommand(goal, legit ? PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH : PathingCommandType.REVALIDATE_GOAL_AND_PATH); } @@ -197,8 +216,9 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro if (Baritone.settings().legitMine.value) { return; } - List locs = searchWorld(context, filter, ORE_LOCATIONS_COUNT, already, blacklist); - locs.addAll(droppedItemsScan(filter, ctx.world())); + List dropped = droppedItemsScan(); + List locs = searchWorld(context, filter, ORE_LOCATIONS_COUNT, already, blacklist, dropped); + locs.addAll(dropped); if (locs.isEmpty()) { logDirect("No locations for " + filter + " known, cancelling"); cancel(); @@ -207,19 +227,19 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro knownOreLocations = locs; } - private boolean internalMiningGoal(BlockPos pos, IPlayerContext ctx, List locs) { + private boolean internalMiningGoal(BlockPos pos, CalculationContext context, List locs) { // Here, BlockStateInterface is used because the position may be in a cached chunk (the targeted block is one that is kept track of) if (locs.contains(pos)) { return true; } - IBlockState state = BlockStateInterface.get(ctx, pos); + IBlockState state = context.bsi.get0(pos); if (Baritone.settings().internalMiningAirException.value && state.getBlock() instanceof BlockAir) { return true; } - return filter.has(state); + return filter.has(state) && plausibleToBreak(context, pos); } - private Goal coalesce(BlockPos loc, List locs) { + private Goal coalesce(BlockPos loc, List locs, CalculationContext context) { boolean assumeVerticalShaftMine = !(baritone.bsi.get0(loc.up()).getBlock() instanceof BlockFalling); if (!Baritone.settings().forceInternalMining.value) { if (assumeVerticalShaftMine) { @@ -230,9 +250,9 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro return new GoalTwoBlocks(loc); } } - boolean upwardGoal = internalMiningGoal(loc.up(), ctx, locs); - boolean downwardGoal = internalMiningGoal(loc.down(), ctx, locs); - boolean doubleDownwardGoal = internalMiningGoal(loc.down(2), ctx, locs); + boolean upwardGoal = internalMiningGoal(loc.up(), context, locs); + boolean downwardGoal = internalMiningGoal(loc.down(), context, locs); + boolean doubleDownwardGoal = internalMiningGoal(loc.down(2), context, locs); if (upwardGoal == downwardGoal) { // symmetric if (doubleDownwardGoal && assumeVerticalShaftMine) { // we have a checkerboard like pattern @@ -281,12 +301,12 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro } } - public static List droppedItemsScan(BlockOptionalMetaLookup filter, World world) { + public List droppedItemsScan() { if (!Baritone.settings().mineScanDroppedItems.value) { return Collections.emptyList(); } List ret = new ArrayList<>(); - for (Entity entity : world.loadedEntityList) { + for (Entity entity : ctx.world().loadedEntityList) { if (entity instanceof EntityItem) { EntityItem ei = (EntityItem) entity; if (filter.has(ei.getItem())) { @@ -294,10 +314,11 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro } } } + ret.addAll(anticipatedDrops.keySet()); return ret; } - public static List searchWorld(CalculationContext ctx, BlockOptionalMetaLookup filter, int max, List alreadyKnown, List blacklist) { + public static List searchWorld(CalculationContext ctx, BlockOptionalMetaLookup filter, int max, List alreadyKnown, List blacklist, List dropped) { List locs = new ArrayList<>(); List untracked = new ArrayList<>(); for (BlockOptionalMeta bom : filter.blocks()) { @@ -318,7 +339,7 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro } } - locs = prune(ctx, locs, filter, max, blacklist); + locs = prune(ctx, locs, filter, max, blacklist, dropped); if (!untracked.isEmpty() || (Baritone.settings().extendCacheOnThreshold.value && locs.size() < max)) { locs.addAll(WorldScanner.INSTANCE.scanChunkRadius( @@ -332,11 +353,12 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro locs.addAll(alreadyKnown); - return prune(ctx, locs, filter, max, blacklist); + return prune(ctx, locs, filter, max, blacklist, dropped); } private void addNearby() { - knownOreLocations.addAll(droppedItemsScan(filter, ctx.world())); + List dropped = droppedItemsScan(); + knownOreLocations.addAll(dropped); BlockPos playerFeet = ctx.playerFeet(); BlockStateInterface bsi = new BlockStateInterface(ctx); int searchDist = 10; @@ -355,11 +377,10 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro } } } - knownOreLocations = prune(new CalculationContext(baritone), knownOreLocations, filter, ORE_LOCATIONS_COUNT, blacklist); + knownOreLocations = prune(new CalculationContext(baritone), knownOreLocations, filter, ORE_LOCATIONS_COUNT, blacklist, dropped); } - private static List prune(CalculationContext ctx, List locs2, BlockOptionalMetaLookup filter, int max, List blacklist) { - List dropped = droppedItemsScan(filter, ctx.world); + private static List prune(CalculationContext ctx, List locs2, BlockOptionalMetaLookup filter, int max, List blacklist, List dropped) { dropped.removeIf(drop -> { for (BlockPos pos : locs2) { if (pos.distanceSq(drop) <= 9 && filter.has(ctx.get(pos.getX(), pos.getY(), pos.getZ())) && MineProcess.plausibleToBreak(ctx, pos)) { // TODO maybe drop also has to be supported? no lava below? @@ -416,6 +437,7 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro this.blacklist = new ArrayList<>(); this.branchPoint = null; this.branchPointRunaway = null; + this.anticipatedDrops = new HashMap<>(); if (filter != null) { rescan(new ArrayList<>(), new CalculationContext(baritone)); } diff --git a/src/main/java/baritone/utils/GuiClick.java b/src/main/java/baritone/utils/GuiClick.java index fc97605f..4f89100d 100644 --- a/src/main/java/baritone/utils/GuiClick.java +++ b/src/main/java/baritone/utils/GuiClick.java @@ -44,7 +44,7 @@ import java.nio.IntBuffer; import java.util.Collections; import static org.lwjgl.opengl.GL11.*; -import static baritone.api.utils.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; public class GuiClick extends GuiScreen {