Merge branch 'master' into swordSaver

This commit is contained in:
scorbett123 2021-02-07 12:19:18 +00:00 committed by GitHub
commit 4ae81a3b0b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
87 changed files with 274 additions and 333 deletions

View File

@ -10,7 +10,6 @@ install:
script: script:
- docker run --name baritone cabaletta/baritone ./gradlew javadoc - docker run --name baritone cabaletta/baritone ./gradlew javadoc
#- docker run --name baritone cabaletta/baritone /bin/sh -c "set -e; /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 128x128x24 -ac +extension GLX +render; DISPLAY=:99 BARITONE_AUTO_TEST=true ./gradlew runClient"
- docker cp baritone:/code/dist dist - docker cp baritone:/code/dist dist
- ls dist - ls dist
- cat dist/checksums.txt - cat dist/checksums.txt

View File

@ -1,7 +1,5 @@
FROM debian:stretch FROM debian:stretch
RUN echo 'deb http://deb.debian.org/debian stretch-backports main' > /etc/apt/sources.list.d/stretch-backports.list
ENV DEBIAN_FRONTEND noninteractive ENV DEBIAN_FRONTEND noninteractive
RUN apt update -y RUN apt update -y
@ -10,14 +8,8 @@ RUN apt install \
openjdk-8-jdk \ openjdk-8-jdk \
--assume-yes --assume-yes
RUN apt install -qq --assume-yes mesa-utils libgl1-mesa-glx libxcursor1 libxrandr2 libxxf86vm1 x11-xserver-utils xfonts-base xserver-common
COPY . /code COPY . /code
WORKDIR /code WORKDIR /code
# this .deb is specially patched to support lwjgl
# source: https://github.com/tectonicus/tectonicus/issues/60#issuecomment-154239173
RUN dpkg -i scripts/xvfb_1.16.4-1_amd64.deb
RUN ./gradlew build RUN ./gradlew build

View File

@ -10,6 +10,9 @@
[![Minecraft](https://img.shields.io/badge/MC-1.13.2-brightgreen.svg)](https://github.com/cabaletta/baritone/tree/1.13.2/) [![Minecraft](https://img.shields.io/badge/MC-1.13.2-brightgreen.svg)](https://github.com/cabaletta/baritone/tree/1.13.2/)
[![Minecraft](https://img.shields.io/badge/MC-1.14.4-brightgreen.svg)](https://github.com/cabaletta/baritone/tree/1.14.4/) [![Minecraft](https://img.shields.io/badge/MC-1.14.4-brightgreen.svg)](https://github.com/cabaletta/baritone/tree/1.14.4/)
[![Minecraft](https://img.shields.io/badge/MC-1.15.2-brightgreen.svg)](https://github.com/cabaletta/baritone/tree/1.15.2/) [![Minecraft](https://img.shields.io/badge/MC-1.15.2-brightgreen.svg)](https://github.com/cabaletta/baritone/tree/1.15.2/)
[![Minecraft](https://img.shields.io/badge/MC-1.16.2-brightgreen.svg)](https://github.com/cabaletta/baritone/tree/1.16.2/)
[![Minecraft](https://img.shields.io/badge/MC-1.16.4-brightgreen.svg)](https://github.com/cabaletta/baritone/tree/1.16.4/)
[![Minecraft](https://img.shields.io/badge/MC-1.16.5-brightgreen.svg)](https://github.com/cabaletta/baritone/tree/1.16.5/)
[![Code of Conduct](https://img.shields.io/badge/%E2%9D%A4-code%20of%20conduct-blue.svg?style=flat)](https://github.com/cabaletta/baritone/blob/master/CODE_OF_CONDUCT.md) [![Code of Conduct](https://img.shields.io/badge/%E2%9D%A4-code%20of%20conduct-blue.svg?style=flat)](https://github.com/cabaletta/baritone/blob/master/CODE_OF_CONDUCT.md)
[![Known Vulnerabilities](https://snyk.io/test/github/cabaletta/baritone/badge.svg?targetFile=build.gradle)](https://snyk.io/test/github/cabaletta/baritone?targetFile=build.gradle) [![Known Vulnerabilities](https://snyk.io/test/github/cabaletta/baritone/badge.svg?targetFile=build.gradle)](https://snyk.io/test/github/cabaletta/baritone?targetFile=build.gradle)
[![Contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/cabaletta/baritone/issues/) [![Contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/cabaletta/baritone/issues/)
@ -25,7 +28,7 @@
[![KAMI Blue integration](https://img.shields.io/badge/KAMI%20Blue%20integration-v1.2.14--master-green)](https://github.com/kami-blue/client) [![KAMI Blue integration](https://img.shields.io/badge/KAMI%20Blue%20integration-v1.2.14--master-green)](https://github.com/kami-blue/client)
[![ForgeHax integration](https://img.shields.io/badge/ForgeHax%20%22integration%22-scuffed-yellow.svg)](https://github.com/fr1kin/ForgeHax/) [![ForgeHax integration](https://img.shields.io/badge/ForgeHax%20%22integration%22-scuffed-yellow.svg)](https://github.com/fr1kin/ForgeHax/)
[![Aristois add-on integration](https://img.shields.io/badge/Aristois%20add--on%20integration-v1.3.4%20/%20v1.4.1-green.svg)](https://gitlab.com/emc-mods-indrit/baritone_api) [![Aristois add-on integration](https://img.shields.io/badge/Aristois%20add--on%20integration-v1.3.4%20/%20v1.4.1-green.svg)](https://gitlab.com/emc-mods-indrit/baritone_api)
[![rootNET integration](https://img.shields.io/badge/rootNET%20integration-v1.2.11-green.svg)](https://rootnet.dev/) [![rootNET integration](https://img.shields.io/badge/rootNET%20integration-v1.2.14-green.svg)](https://rootnet.dev/)
[![Future integration](https://img.shields.io/badge/Future%20integration-v1.2.12%20%2F%20v1.3.6%20%2F%20v1.4.4-red)](https://futureclient.net/) [![Future integration](https://img.shields.io/badge/Future%20integration-v1.2.12%20%2F%20v1.3.6%20%2F%20v1.4.4-red)](https://futureclient.net/)
[![RusherHack integration](https://img.shields.io/badge/RusherHack%20integration-v1.2.14-green)](https://rusherhack.org/) [![RusherHack integration](https://img.shields.io/badge/RusherHack%20integration-v1.2.14-green)](https://rusherhack.org/)
[![forthebadge](https://forthebadge.com/images/badges/built-with-swag.svg)](http://forthebadge.com/) [![forthebadge](https://forthebadge.com/images/badges/built-with-swag.svg)](http://forthebadge.com/)
@ -39,8 +42,10 @@ The easiest way to install Baritone is to install [Impact](https://impactclient.
For 1.15.2, [click here](https://www.youtube.com/watch?v=j1qKtCZFURM) and see description. If you need Forge 1.15.2, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.5.3), follow the instructions, and get the `api-forge` jar. For 1.15.2, [click here](https://www.youtube.com/watch?v=j1qKtCZFURM) and see description. If you need Forge 1.15.2, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.5.3), follow the instructions, and get the `api-forge` jar.
For 1.16.5, [click here](https://www.youtube.com/watch?v=_4eVJ9Qz2J8) and see description. If you need Forge or Fabric 1.16.5, look [here](https://github.com/cabaletta/baritone/releases/tag/v1.6.3) and get the `api-forge` or `api-fabric` jar. **For 1.16.5 Fabric, just click [here](https://github.com/cabaletta/baritone/releases/download/v1.6.3/baritone-api-fabric-1.6.3.jar)**.
This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/), This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/),
the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 through 1.15.2. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths). the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 through 1.16.5. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths).
Have committed at least once a day from Aug 1, 2018, to Aug 1, 2019. Have committed at least once a day from Aug 1, 2018, to Aug 1, 2019.

View File

@ -2,7 +2,7 @@
The easiest way to install Baritone is to install [Impact](https://impactclient.net/), which comes with Baritone. The easiest way to install Baritone is to install [Impact](https://impactclient.net/), which comes with Baritone.
You can also use a custom version json for Minecraft, with the [1.14.4](https://www.dropbox.com/s/rkml3hjokd3qv0m/1.14.4-Baritone.zip?dl=1) version or the [1.15.2](https://www.dropbox.com/s/8rx6f0kts9hvd4f/1.15.2-Baritone.zip?dl=1) version You can also use a custom version json for Minecraft, with the [1.14.4](https://www.dropbox.com/s/rkml3hjokd3qv0m/1.14.4-Baritone.zip?dl=1) version or the [1.15.2](https://www.dropbox.com/s/8rx6f0kts9hvd4f/1.15.2-Baritone.zip?dl=1) version or the [1.16.5](https://www.dropbox.com/s/i6f292o2i7o9acp/1.16.5-Baritone.zip?dl=1) version.
Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it. Once Baritone is installed, look [here](USAGE.md) for instructions on how to use it.
@ -11,9 +11,9 @@ These releases are not always completely up to date with latest features, and ar
Link to the releases page: [Releases](https://github.com/cabaletta/baritone/releases) Link to the releases page: [Releases](https://github.com/cabaletta/baritone/releases)
v1.2.* is for 1.12.2, v1.3.* is for 1.13.2 v1.2.* is for 1.12.2, v1.3.* is for 1.13.2, v1.4.* is for 1.14.4, v1.5.* is for 1.15.2, v1.6.* is for 1.16.2 or 1.16.4 or 1.16.5 (LOL)
Any official release will be GPG signed by leijurv (44A3EA646EADAC6A) and ZeroMemes (73A788379A197567). Please verify that the hash of the file you download is in `checksums.txt` and that `checksums_signed.asc` is a valid signature by those two public keys of `checksums.txt`. Any official release will be GPG signed by leijurv (44A3EA646EADAC6A). Please verify that the hash of the file you download is in `checksums.txt` and that `checksums_signed.asc` is a valid signature by that public keys of `checksums.txt`.
The build is fully deterministic and reproducible, and you can verify Travis did it properly by running `docker build --no-cache -t cabaletta/baritone .` yourself and comparing the shasum. This works identically on Travis, Mac, and Linux (if you have docker on Windows, I'd be grateful if you could let me know if it works there too). The build is fully deterministic and reproducible, and you can verify Travis did it properly by running `docker build --no-cache -t cabaletta/baritone .` yourself and comparing the shasum. This works identically on Travis, Mac, and Linux (if you have docker on Windows, I'd be grateful if you could let me know if it works there too).
@ -32,11 +32,6 @@ If another one of your Forge mods has a Baritone integration, you want `baritone
- **Forge Standalone**: Same as Standalone, but packaged for Forge. This should be used when Baritone is your only Forge mod, or none of your other Forge mods integrate with Baritone. - **Forge Standalone**: Same as Standalone, but packaged for Forge. This should be used when Baritone is your only Forge mod, or none of your other Forge mods integrate with Baritone.
- **Unoptimized**: Nothing is obfuscated. This shouldn't be used ever in production. - **Unoptimized**: Nothing is obfuscated. This shouldn't be used ever in production.
## More Info
To replace out Impact 4.5's Baritone build with a customized one, build Baritone as above then copy & **rename** `dist/baritone-api-$VERSION$.jar` into `minecraft/libraries/cabaletta/baritone-api/1.2/baritone-api-1.2.jar`, replacing the jar that was previously there. You also need to edit `minecraft/versions/1.12.2-Impact_4.5/1.12.2-Impact_4.5.json`, find the line `"name": "cabaletta:baritone-api:1.2"`, remove the comma from the end, and **entirely remove the NEXT line** (starts with `"url"`). **Restart your launcher** then load as normal.
You can verify whether or not it worked by running `.b version` in chat (only valid in Impact). It should print out the version that you downloaded. Note: The version that comes with 4.5 is `v1.2.3`.
## Build it yourself ## Build it yourself
- Clone or download Baritone - Clone or download Baritone
@ -83,6 +78,12 @@ Building Baritone:
$ gradlew build $ gradlew build
``` ```
For minecraft 1.15.2+, run the following instead to include the Forge jars:
```
$ gradlew build -Pbaritone.forge_build
```
Running Baritone: Running Baritone:
``` ```

View File

@ -40,8 +40,8 @@ Some common examples:
- `goal clear` to clear the goal - `goal clear` to clear the goal
- `cancel` or `stop` to stop everything - `cancel` or `stop` to stop everything
- `goto portal` or `goto ender_chest` or `goto block_type` to go to a block. (in Impact, `.goto` is an alias for `.b goto` for the most part) - `goto portal` or `goto ender_chest` or `goto block_type` to go to a block. (in Impact, `.goto` is an alias for `.b goto` for the most part)
- `mine diamond_ore iron_ore` to mine diamond ore or iron ore (turn on the setting `legitMine` to only mine ores that it can actually see. It will explore randomly around y=11 until it finds them.) An amount of blocks can also be specified, for example, `mine diamond_ore 64`. - `mine diamond_ore iron_ore` to mine diamond ore or iron ore (turn on the setting `legitMine` to only mine ores that it can actually see. It will explore randomly around y=11 until it finds them.) An amount of blocks can also be specified, for example, `mine 64 diamond_ore`.
- `click` to click your destination on the screen. Right click path to on top of the block, left click to path into it (either at foot level or eye level), and left click and drag to clear all blocks from an area. - `click` to click your destination on the screen. Right click path to on top of the block, left click to path into it (either at foot level or eye level), and left click and drag to select an area (`#help sel` to see what you can do with that selection).
- `follow player playerName` to follow a player. `follow players` to follow any players in range (combine with Kill Aura for a fun time). `follow entities` to follow any entities. `follow entity pig` to follow entities of a specific type. - `follow player playerName` to follow a player. `follow players` to follow any players in range (combine with Kill Aura for a fun time). `follow entities` to follow any entities. `follow entity pig` to follow entities of a specific type.
- `wp` for waypoints. A "tag" is like "home" (created automatically on right clicking a bed) or "death" (created automatically on death) or "user" (has to be created manually). So you might want `#wp save user coolbiome`, then to set the goal `#wp goal coolbiome` then `#path` to path to it. For death, `#wp goal death` will list waypoints under the "death" tag (remember stuff is clickable!) - `wp` for waypoints. A "tag" is like "home" (created automatically on right clicking a bed) or "death" (created automatically on death) or "user" (has to be created manually). So you might want `#wp save user coolbiome`, then to set the goal `#wp goal coolbiome` then `#path` to path to it. For death, `#wp goal death` will list waypoints under the "death" tag (remember stuff is clickable!)
- `build` to build a schematic. `build blah.schematic` will load `schematics/blah.schematic` and build it with the origin being your player feet. `build blah.schematic x y z` to set the origin. Any of those can be relative to your player (`~ 69 ~-420` would build at x=player x, y=69, z=player z-420). - `build` to build a schematic. `build blah.schematic` will load `schematics/blah.schematic` and build it with the origin being your player feet. `build blah.schematic x y z` to set the origin. Any of those can be relative to your player (`~ 69 ~-420` would build at x=player x, y=69, z=player z-420).

View File

@ -26,7 +26,7 @@ buildscript {
} }
maven { maven {
name = 'SpongePowered' name = 'SpongePowered'
url = 'http://repo.spongepowered.org/maven' url = 'https://repo.spongepowered.org/repository/maven-public/'
} }
jcenter() jcenter()
} }
@ -80,7 +80,7 @@ repositories {
maven { maven {
name = 'spongepowered-repo' name = 'spongepowered-repo'
url = 'http://repo.spongepowered.org/maven/' url = 'https://repo.spongepowered.org/repository/maven-public/'
} }
maven { maven {

Binary file not shown.

View File

@ -20,13 +20,13 @@ package baritone.api;
import baritone.api.behavior.ILookBehavior; import baritone.api.behavior.ILookBehavior;
import baritone.api.behavior.IPathingBehavior; import baritone.api.behavior.IPathingBehavior;
import baritone.api.cache.IWorldProvider; import baritone.api.cache.IWorldProvider;
import baritone.api.command.manager.ICommandManager;
import baritone.api.event.listener.IEventBus; import baritone.api.event.listener.IEventBus;
import baritone.api.pathing.calc.IPathingControlManager; import baritone.api.pathing.calc.IPathingControlManager;
import baritone.api.process.*; import baritone.api.process.*;
import baritone.api.selection.ISelectionManager; import baritone.api.selection.ISelectionManager;
import baritone.api.utils.IInputOverrideHandler; import baritone.api.utils.IInputOverrideHandler;
import baritone.api.utils.IPlayerContext; import baritone.api.utils.IPlayerContext;
import baritone.api.command.manager.ICommandManager;
/** /**
* @author Brady * @author Brady

View File

@ -696,6 +696,11 @@ public final class Settings {
*/ */
public final Setting<Boolean> censorRanCommands = new Setting<>(false); public final Setting<Boolean> censorRanCommands = new Setting<>(false);
/**
* Stop using tools just before they are going to break.
*/
public final Setting<Boolean> itemSaver = new Setting<>(false);
/** /**
* Always prefer silk touch tools over regular tools. This will not sacrifice speed, but it will always prefer silk * Always prefer silk touch tools over regular tools. This will not sacrifice speed, but it will always prefer silk
* touch tools over other tools of the same speed. This includes always choosing ANY silk touch tool over your hand. * touch tools over other tools of the same speed. This includes always choosing ANY silk touch tool over your hand.
@ -814,6 +819,11 @@ public final class Settings {
*/ */
public final Setting<Integer> startAtLayer = new Setting<>(0); public final Setting<Integer> startAtLayer = new Setting<>(0);
/**
* If a layer is unable to be constructed, just skip it.
*/
public final Setting<Boolean> skipFailedLayers = new Setting<>(false);
/** /**
* How far to move before repeating the build. 0 to disable repeating on a certain axis, 0,0,0 to disable entirely * How far to move before repeating the build. 0 to disable repeating on a certain axis, 0,0,0 to disable entirely
*/ */

View File

@ -88,7 +88,7 @@ public interface IWorldScanner {
* Queues the chunks in a square formation around the specified player, using the specified * Queues the chunks in a square formation around the specified player, using the specified
* range, which represents 1/2 the square's dimensions, where the player is in the center. * range, which represents 1/2 the square's dimensions, where the player is in the center.
* *
* @param ctx The player, describing the origin * @param ctx The player, describing the origin
* @param range The range to repack * @param range The range to repack
* @return The amount of chunks successfully queued for repacking * @return The amount of chunks successfully queued for repacking
*/ */

View File

@ -34,9 +34,8 @@ import java.util.stream.Stream;
* So basically, you should use it because it provides a small amount of boilerplate, * So basically, you should use it because it provides a small amount of boilerplate,
* but you're not forced to use it. * but you're not forced to use it.
* *
* @see ICommand
*
* @author LoganDark * @author LoganDark
* @see ICommand
*/ */
public abstract class Command implements ICommand { public abstract class Command implements ICommand {

View File

@ -46,8 +46,8 @@ public interface IArgParserManager {
/** /**
* Attempt to parse the specified argument with a stateless {@link IArgParser} that outputs the specified class. * 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 type The type to try and parse the argument into.
* @param arg The argument to parse. * @param arg The argument to parse.
* @return An instance of the specified class. * @return An instance of the specified class.
* @throws CommandInvalidTypeException If the parsing failed * @throws CommandInvalidTypeException If the parsing failed
*/ */

View File

@ -18,8 +18,6 @@
package baritone.api.command.argument; package baritone.api.command.argument;
import baritone.api.command.ICommand; import baritone.api.command.ICommand;
import baritone.api.command.exception.CommandTooManyArgumentsException;
import baritone.api.utils.Helper;
import baritone.api.command.argparser.IArgParser; import baritone.api.command.argparser.IArgParser;
import baritone.api.command.datatypes.IDatatype; import baritone.api.command.datatypes.IDatatype;
import baritone.api.command.datatypes.IDatatypeFor; import baritone.api.command.datatypes.IDatatypeFor;
@ -27,6 +25,8 @@ import baritone.api.command.datatypes.IDatatypePost;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.command.exception.CommandInvalidTypeException; import baritone.api.command.exception.CommandInvalidTypeException;
import baritone.api.command.exception.CommandNotEnoughArgumentsException; import baritone.api.command.exception.CommandNotEnoughArgumentsException;
import baritone.api.command.exception.CommandTooManyArgumentsException;
import baritone.api.utils.Helper;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import java.util.Deque; import java.util.Deque;
@ -223,7 +223,7 @@ public interface IArgConsumer {
* @param type The type to peek as * @param type The type to peek as
* @param index The index to peek * @param index The index to peek
* @return An instance of the specified type * @return An instance of the specified type
* @throws CommandInvalidTypeException If the parsing failed * @throws CommandInvalidTypeException If the parsing failed
* @see IArgParser * @see IArgParser
* @see #peekAs(Class) * @see #peekAs(Class)
* @see #peekAsOrDefault(Class, Object, int) * @see #peekAsOrDefault(Class, Object, int)
@ -240,7 +240,7 @@ public interface IArgConsumer {
* *
* @param type The type to peek as * @param type The type to peek as
* @return An instance of the specified type * @return An instance of the specified type
* @throws CommandInvalidTypeException If the parsing failed * @throws CommandInvalidTypeException If the parsing failed
* @see IArgParser * @see IArgParser
* @see #peekAs(Class, int) * @see #peekAs(Class, int)
* @see #peekAsOrDefault(Class, Object) * @see #peekAsOrDefault(Class, Object)
@ -458,7 +458,7 @@ public interface IArgConsumer {
* *
* @param type The type to peek as * @param type The type to peek as
* @return An instance of the specified type * @return An instance of the specified type
* @throws CommandInvalidTypeException If the parsing failed * @throws CommandInvalidTypeException If the parsing failed
* @see IArgParser * @see IArgParser
* @see #get() * @see #get()
* @see #getAsOrDefault(Class, Object) * @see #getAsOrDefault(Class, Object)

View File

@ -87,7 +87,7 @@ public interface ICommandArgument {
* *
* @param type The class to parse this argument into * @param type The class to parse this argument into
* @return An instance of the specified type * @return An instance of the specified type
* @throws CommandInvalidTypeException If the parsing failed * @throws CommandInvalidTypeException If the parsing failed
*/ */
<T, S> T getAs(Class<T> type, Class<S> stateType, S state) throws CommandInvalidTypeException; <T, S> T getAs(Class<T> type, Class<S> stateType, S state) throws CommandInvalidTypeException;

View File

@ -17,8 +17,8 @@
package baritone.api.command.datatypes; package baritone.api.command.datatypes;
import baritone.api.command.helpers.TabCompleteHelper;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.command.helpers.TabCompleteHelper;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.init.Blocks; import net.minecraft.init.Blocks;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;

View File

@ -17,8 +17,8 @@
package baritone.api.command.datatypes; package baritone.api.command.datatypes;
import baritone.api.command.helpers.TabCompleteHelper;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.command.helpers.TabCompleteHelper;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityList; import net.minecraft.entity.EntityList;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
@ -34,7 +34,7 @@ public enum EntityClassById implements IDatatypeFor<Class<? extends Entity>> {
Class<? extends Entity> entity; Class<? extends Entity> entity;
try { try {
entity = EntityList.REGISTRY.getObject(id); entity = EntityList.REGISTRY.getObject(id);
} catch(NoSuchFieldError e) { } catch (NoSuchFieldError e) {
// Forge removes EntityList.REGISTRY field and provides the getClass method as a replacement // Forge removes EntityList.REGISTRY field and provides the getClass method as a replacement
// See https://github.com/MinecraftForge/MinecraftForge/blob/1.12.x/patches/minecraft/net/minecraft/entity/EntityList.java.patch // See https://github.com/MinecraftForge/MinecraftForge/blob/1.12.x/patches/minecraft/net/minecraft/entity/EntityList.java.patch
try { try {

View File

@ -17,8 +17,8 @@
package baritone.api.command.datatypes; package baritone.api.command.datatypes;
import baritone.api.utils.BlockOptionalMeta;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.utils.BlockOptionalMeta;
import java.util.stream.Stream; import java.util.stream.Stream;

View File

@ -17,8 +17,8 @@
package baritone.api.command.datatypes; package baritone.api.command.datatypes;
import baritone.api.command.helpers.TabCompleteHelper;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.command.helpers.TabCompleteHelper;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import java.util.Locale; import java.util.Locale;

View File

@ -20,8 +20,8 @@ package baritone.api.command.datatypes;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.cache.IWaypoint; import baritone.api.cache.IWaypoint;
import baritone.api.cache.IWaypointCollection; import baritone.api.cache.IWaypointCollection;
import baritone.api.command.helpers.TabCompleteHelper;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.command.helpers.TabCompleteHelper;
import java.util.Comparator; import java.util.Comparator;
import java.util.stream.Stream; import java.util.stream.Stream;

View File

@ -24,9 +24,8 @@ import baritone.api.command.argument.IArgConsumer;
* Provides an {@link IDatatype} with contextual information so * Provides an {@link IDatatype} with contextual information so
* that it can perform the desired operation on the target level. * that it can perform the desired operation on the target level.
* *
* @see IDatatype
*
* @author Brady * @author Brady
* @see IDatatype
* @since 9/26/2019 * @since 9/26/2019
*/ */
public interface IDatatypeContext { public interface IDatatypeContext {

View File

@ -34,11 +34,10 @@ public interface IDatatypeFor<T> extends IDatatype {
* if the expected input does not conform to a parseable value. As far as a {@link CommandException} being * if the expected input does not conform to a parseable value. As far as a {@link CommandException} being
* thrown is concerned, see the note below for specifics. * thrown is concerned, see the note below for specifics.
* *
* @see IDatatypeContext
*
* @param ctx The context * @param ctx The context
* @return The parsed data-type * @return The parsed data-type
* @throws CommandException If there was an issue parsing using another type or arguments could not be polled. * @throws CommandException If there was an issue parsing using another type or arguments could not be polled.
* @see IDatatypeContext
*/ */
T get(IDatatypeContext ctx) throws CommandException; T get(IDatatypeContext ctx) throws CommandException;
} }

View File

@ -18,8 +18,8 @@
package baritone.api.command.datatypes; package baritone.api.command.datatypes;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.command.helpers.TabCompleteHelper;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.command.helpers.TabCompleteHelper;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import java.util.List; import java.util.List;

View File

@ -18,8 +18,8 @@
package baritone.api.command.datatypes; package baritone.api.command.datatypes;
import baritone.api.command.argument.IArgConsumer; import baritone.api.command.argument.IArgConsumer;
import baritone.api.utils.BetterBlockPos;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.utils.BetterBlockPos;
import java.util.stream.Stream; import java.util.stream.Stream;

View File

@ -18,16 +18,13 @@
package baritone.api.command.datatypes; package baritone.api.command.datatypes;
import baritone.api.command.argument.IArgConsumer; import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException;
import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.Goal;
import baritone.api.pathing.goals.GoalBlock; import baritone.api.pathing.goals.GoalBlock;
import baritone.api.pathing.goals.GoalXZ; import baritone.api.pathing.goals.GoalXZ;
import baritone.api.pathing.goals.GoalYLevel; import baritone.api.pathing.goals.GoalYLevel;
import baritone.api.utils.BetterBlockPos; import baritone.api.utils.BetterBlockPos;
import baritone.api.command.exception.CommandException;
import net.minecraft.util.math.MathHelper;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream; import java.util.stream.Stream;
public enum RelativeGoal implements IDatatypePost<Goal, BetterBlockPos> { public enum RelativeGoal implements IDatatypePost<Goal, BetterBlockPos> {

View File

@ -18,9 +18,9 @@
package baritone.api.command.datatypes; package baritone.api.command.datatypes;
import baritone.api.command.argument.IArgConsumer; import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException;
import baritone.api.pathing.goals.GoalBlock; import baritone.api.pathing.goals.GoalBlock;
import baritone.api.utils.BetterBlockPos; import baritone.api.utils.BetterBlockPos;
import baritone.api.command.exception.CommandException;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import java.util.stream.Stream; import java.util.stream.Stream;

View File

@ -18,9 +18,9 @@
package baritone.api.command.datatypes; package baritone.api.command.datatypes;
import baritone.api.command.argument.IArgConsumer; import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException;
import baritone.api.pathing.goals.GoalXZ; import baritone.api.pathing.goals.GoalXZ;
import baritone.api.utils.BetterBlockPos; import baritone.api.utils.BetterBlockPos;
import baritone.api.command.exception.CommandException;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import java.util.stream.Stream; import java.util.stream.Stream;

View File

@ -18,9 +18,9 @@
package baritone.api.command.datatypes; package baritone.api.command.datatypes;
import baritone.api.command.argument.IArgConsumer; import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException;
import baritone.api.pathing.goals.GoalYLevel; import baritone.api.pathing.goals.GoalYLevel;
import baritone.api.utils.BetterBlockPos; import baritone.api.utils.BetterBlockPos;
import baritone.api.command.exception.CommandException;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import java.util.stream.Stream; import java.util.stream.Stream;

View File

@ -38,7 +38,7 @@ public class CommandUnhandledException extends RuntimeException implements IComm
@Override @Override
public void handle(ICommand command, List<ICommandArgument> args) { public void handle(ICommand command, List<ICommandArgument> args) {
HELPER.logDirect("An unhandled exception occurred. " + HELPER.logDirect("An unhandled exception occurred. " +
"The error is in your game's log, please report this at https://github.com/cabaletta/baritone/issues", "The error is in your game's log, please report this at https://github.com/cabaletta/baritone/issues",
TextFormatting.RED); TextFormatting.RED);
this.printStackTrace(); this.printStackTrace();

View File

@ -38,8 +38,8 @@ import static baritone.api.utils.Helper.HELPER;
public interface ICommandException { public interface ICommandException {
/** /**
* @see Exception#getMessage()
* @return The exception details * @return The exception details
* @see Exception#getMessage()
*/ */
String getMessage(); String getMessage();

View File

@ -17,10 +17,10 @@
package baritone.api.command.helpers; package baritone.api.command.helpers;
import baritone.api.utils.Helper; import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.command.exception.CommandInvalidTypeException; import baritone.api.command.exception.CommandInvalidTypeException;
import baritone.api.command.argument.IArgConsumer; import baritone.api.utils.Helper;
import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextComponentString;
import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.TextFormatting;

View File

@ -19,10 +19,10 @@ package baritone.api.command.helpers;
import baritone.api.BaritoneAPI; import baritone.api.BaritoneAPI;
import baritone.api.Settings; import baritone.api.Settings;
import baritone.api.event.events.TabCompleteEvent;
import baritone.api.utils.SettingsUtil;
import baritone.api.command.argument.IArgConsumer; import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.manager.ICommandManager; import baritone.api.command.manager.ICommandManager;
import baritone.api.event.events.TabCompleteEvent;
import baritone.api.utils.SettingsUtil;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import java.util.Comparator; import java.util.Comparator;
@ -236,7 +236,6 @@ public class TabCompleteHelper {
* Appends every command in the specified {@link ICommandManager} to this {@link TabCompleteHelper} * Appends every command in the specified {@link ICommandManager} to this {@link TabCompleteHelper}
* *
* @param manager A command manager * @param manager A command manager
*
* @return This {@link TabCompleteHelper} * @return This {@link TabCompleteHelper}
*/ */
public TabCompleteHelper addCommands(ICommandManager manager) { public TabCompleteHelper addCommands(ICommandManager manager) {

View File

@ -18,7 +18,6 @@
package baritone.api.event.events; package baritone.api.event.events;
import baritone.api.event.events.type.Cancellable; import baritone.api.event.events.type.Cancellable;
import baritone.api.event.events.type.Overrideable;
/** /**
* @author LoganDark * @author LoganDark

View File

@ -31,7 +31,7 @@ public class GoalRunAway implements Goal {
private final BlockPos[] from; private final BlockPos[] from;
private final double distanceSq; private final int distanceSq;
private final Integer maintainY; private final Integer maintainY;
@ -44,7 +44,7 @@ public class GoalRunAway implements Goal {
throw new IllegalArgumentException(); throw new IllegalArgumentException();
} }
this.from = from; this.from = from;
this.distanceSq = distance * distance; this.distanceSq = (int) (distance * distance);
this.maintainY = maintainY; this.maintainY = maintainY;
} }
@ -56,7 +56,7 @@ public class GoalRunAway implements Goal {
for (BlockPos p : from) { for (BlockPos p : from) {
int diffX = x - p.getX(); int diffX = x - p.getX();
int diffZ = z - p.getZ(); int diffZ = z - p.getZ();
double distSq = diffX * diffX + diffZ * diffZ; int distSq = diffX * diffX + diffZ * diffZ;
if (distSq < distanceSq) { if (distSq < distanceSq) {
return false; return false;
} }

View File

@ -17,7 +17,29 @@
package baritone.api.process; package baritone.api.process;
import net.minecraft.util.math.BlockPos;
public interface IFarmProcess extends IBaritoneProcess { public interface IFarmProcess extends IBaritoneProcess {
void farm(); /**
* Begin to search for crops to farm with in specified aria
* from specified location.
*
* @param range The distance from center to farm from
* @param pos The center position to base the range from
*/
void farm(int range, BlockPos pos);
/**
* Begin to search for nearby crops to farm.
*/
default void farm() {farm(0, null);}
/**
* Begin to search for crops to farm with in specified aria
* from the position the command was executed.
*
* @param range The distance to search for crops to farm
*/
default void farm(int range) {farm(range, null);}
} }

View File

@ -22,10 +22,9 @@ import net.minecraft.block.state.IBlockState;
/** /**
* A static schematic is capable of providing the desired state at a given position without * A static schematic is capable of providing the desired state at a given position without
* additional context. Schematics of this type are expected to have non-varying contents. * additional context. Schematics of this type are expected to have non-varying contents.
*
* @see #getDirect(int, int, int)
* *
* @author Brady * @author Brady
* @see #getDirect(int, int, int)
* @since 12/24/2019 * @since 12/24/2019
*/ */
public interface IStaticSchematic extends ISchematic { public interface IStaticSchematic extends ISchematic {

View File

@ -234,11 +234,10 @@ public final class BlockOptionalMeta {
/** /**
* Evaluate the target meta value for the specified state. The target meta value is * Evaluate the target meta value for the specified state. The target meta value is
* most often that which is influenced by the variant/color property of the block state. * most often that which is influenced by the variant/color property of the block state.
* *
* @see #normalize(IBlockState)
*
* @param state The state to check * @param state The state to check
* @return The target meta of the state * @return The target meta of the state
* @see #normalize(IBlockState)
*/ */
public static int stateMeta(IBlockState state) { public static int stateMeta(IBlockState state) {
return state.getBlock().getMetaFromState(normalize(state)); return state.getBlock().getMetaFromState(normalize(state));

View File

@ -67,7 +67,7 @@ public interface Helper {
/** /**
* Send a message to display as a toast popup * Send a message to display as a toast popup
* *
* @param title The title to display in the popup * @param title The title to display in the popup
* @param message The message to display in the popup * @param message The message to display in the popup
*/ */
default void logToast(ITextComponent title, ITextComponent message) { default void logToast(ITextComponent title, ITextComponent message) {
@ -77,7 +77,7 @@ public interface Helper {
/** /**
* Send a message to display as a toast popup * Send a message to display as a toast popup
* *
* @param title The title to display in the popup * @param title The title to display in the popup
* @param message The message to display in the popup * @param message The message to display in the popup
*/ */
default void logToast(String title, String message) { default void logToast(String title, String message) {
@ -144,8 +144,8 @@ public interface Helper {
* Send a message to chat regardless of chatDebug (should only be used for critically important messages, or as a * Send a message to chat regardless of chatDebug (should only be used for critically important messages, or as a
* direct response to a chat command) * direct response to a chat command)
* *
* @param message The message to display in chat * @param message The message to display in chat
* @param color The color to print that message in * @param color The color to print that message in
* @param logAsToast Whether to log as a toast notification * @param logAsToast Whether to log as a toast notification
*/ */
default void logDirect(String message, TextFormatting color, boolean logAsToast) { default void logDirect(String message, TextFormatting color, boolean logAsToast) {
@ -171,7 +171,7 @@ public interface Helper {
* Send a message to chat regardless of chatDebug (should only be used for critically important messages, or as a * Send a message to chat regardless of chatDebug (should only be used for critically important messages, or as a
* direct response to a chat command) * direct response to a chat command)
* *
* @param message The message to display in chat * @param message The message to display in chat
* @param logAsToast Whether to log as a toast notification * @param logAsToast Whether to log as a toast notification
*/ */
default void logDirect(String message, boolean logAsToast) { default void logDirect(String message, boolean logAsToast) {

View File

@ -20,7 +20,6 @@ package baritone.api.utils;
import baritone.api.cache.IWorldData; import baritone.api.cache.IWorldData;
import net.minecraft.block.BlockSlab; import net.minecraft.block.BlockSlab;
import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.entity.Entity;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;

View File

@ -23,7 +23,6 @@ import baritone.api.event.events.BlockInteractEvent;
import baritone.api.event.events.TickEvent; import baritone.api.event.events.TickEvent;
import baritone.api.event.events.WorldEvent; import baritone.api.event.events.WorldEvent;
import baritone.api.event.events.type.EventState; import baritone.api.event.events.type.EventState;
import baritone.utils.BaritoneAutoTest;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiScreen;
@ -63,17 +62,6 @@ public class MixinMinecraft {
BaritoneAPI.getProvider().getPrimaryBaritone(); BaritoneAPI.getProvider().getPrimaryBaritone();
} }
@Inject(
method = "init",
at = @At(
value = "INVOKE",
target = "net/minecraft/client/Minecraft.startTimerHackThread()V"
)
)
private void preInit(CallbackInfo ci) {
BaritoneAutoTest.INSTANCE.onPreInit();
}
@Inject( @Inject(
method = "runTick", method = "runTick",
at = @At( at = @At(

View File

@ -25,11 +25,14 @@ import baritone.api.utils.Helper;
import baritone.api.utils.IPlayerContext; import baritone.api.utils.IPlayerContext;
import baritone.behavior.*; import baritone.behavior.*;
import baritone.cache.WorldProvider; import baritone.cache.WorldProvider;
import baritone.command.manager.CommandManager;
import baritone.event.GameEventHandler; import baritone.event.GameEventHandler;
import baritone.process.*; import baritone.process.*;
import baritone.selection.SelectionManager; import baritone.selection.SelectionManager;
import baritone.utils.*; import baritone.utils.BlockStateInterface;
import baritone.command.manager.CommandManager; import baritone.utils.GuiClick;
import baritone.utils.InputOverrideHandler;
import baritone.utils.PathingControlManager;
import baritone.utils.player.PrimaryPlayerContext; import baritone.utils.player.PrimaryPlayerContext;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -117,10 +120,6 @@ public class Baritone implements IBaritone {
this.worldProvider = new WorldProvider(); this.worldProvider = new WorldProvider();
this.selectionManager = new SelectionManager(this); this.selectionManager = new SelectionManager(this);
this.commandManager = new CommandManager(this); this.commandManager = new CommandManager(this);
if (BaritoneAutoTest.ENABLE_AUTO_TEST) {
this.gameEventHandler.registerEventListener(BaritoneAutoTest.INSTANCE);
}
} }
@Override @Override

View File

@ -22,9 +22,9 @@ import baritone.api.IBaritoneProvider;
import baritone.api.cache.IWorldScanner; import baritone.api.cache.IWorldScanner;
import baritone.api.command.ICommandSystem; import baritone.api.command.ICommandSystem;
import baritone.api.schematic.ISchematicSystem; import baritone.api.schematic.ISchematicSystem;
import baritone.command.ExampleBaritoneControl;
import baritone.cache.WorldScanner; import baritone.cache.WorldScanner;
import baritone.command.CommandSystem; import baritone.command.CommandSystem;
import baritone.command.ExampleBaritoneControl;
import baritone.utils.schematic.SchematicSystem; import baritone.utils.schematic.SchematicSystem;
import java.util.Collections; import java.util.Collections;

View File

@ -18,4 +18,4 @@
package baritone; package baritone;
// Annotation for classes and class members that should not be renamed by proguard // Annotation for classes and class members that should not be renamed by proguard
public @interface KeepName { } public @interface KeepName {}

View File

@ -112,6 +112,9 @@ public final class InventoryBehavior extends Behavior {
if (stack.isEmpty()) { if (stack.isEmpty()) {
continue; continue;
} }
if (Baritone.settings().itemSaver.value && stack.getItemDamage() >= stack.getMaxDamage() && stack.getMaxDamage() > 1) {
continue;
}
if (cla$$.isInstance(stack.getItem())) { if (cla$$.isInstance(stack.getItem())) {
double speed = ToolSet.calculateSpeedVsBlock(stack, against.getDefaultState()); // takes into account enchants double speed = ToolSet.calculateSpeedVsBlock(stack, against.getDefaultState()); // takes into account enchants
if (speed > bestSpeed) { if (speed > bestSpeed) {

View File

@ -18,8 +18,8 @@
package baritone.command; package baritone.command;
import baritone.api.command.ICommandSystem; import baritone.api.command.ICommandSystem;
import baritone.command.argparser.ArgParserManager;
import baritone.api.command.argparser.IArgParserManager; import baritone.api.command.argparser.IArgParserManager;
import baritone.command.argparser.ArgParserManager;
/** /**
* @author Brady * @author Brady

View File

@ -20,20 +20,20 @@ package baritone.command;
import baritone.api.BaritoneAPI; import baritone.api.BaritoneAPI;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.Settings; import baritone.api.Settings;
import baritone.utils.accessor.IGuiScreen; import baritone.api.command.argument.ICommandArgument;
import baritone.api.command.exception.CommandNotEnoughArgumentsException;
import baritone.api.command.exception.CommandNotFoundException;
import baritone.api.command.helpers.TabCompleteHelper;
import baritone.api.command.manager.ICommandManager;
import baritone.api.event.events.ChatEvent; import baritone.api.event.events.ChatEvent;
import baritone.api.event.events.TabCompleteEvent; import baritone.api.event.events.TabCompleteEvent;
import baritone.api.event.listener.AbstractGameEventListener; import baritone.api.event.listener.AbstractGameEventListener;
import baritone.api.utils.Helper; import baritone.api.utils.Helper;
import baritone.api.utils.SettingsUtil; import baritone.api.utils.SettingsUtil;
import baritone.api.command.argument.ICommandArgument;
import baritone.api.command.exception.CommandNotEnoughArgumentsException;
import baritone.api.command.exception.CommandNotFoundException;
import baritone.command.argument.ArgConsumer; import baritone.command.argument.ArgConsumer;
import baritone.api.command.helpers.TabCompleteHelper;
import baritone.api.command.manager.ICommandManager;
import baritone.command.argument.CommandArguments; import baritone.command.argument.CommandArguments;
import baritone.command.manager.CommandManager; import baritone.command.manager.CommandManager;
import baritone.utils.accessor.IGuiScreen;
import net.minecraft.util.Tuple; import net.minecraft.util.Tuple;
import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextComponentString;

View File

@ -18,6 +18,7 @@
package baritone.command.argument; package baritone.command.argument;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.argument.ICommandArgument; import baritone.api.command.argument.ICommandArgument;
import baritone.api.command.datatypes.IDatatype; import baritone.api.command.datatypes.IDatatype;
import baritone.api.command.datatypes.IDatatypeContext; import baritone.api.command.datatypes.IDatatypeContext;
@ -27,7 +28,6 @@ import baritone.api.command.exception.CommandException;
import baritone.api.command.exception.CommandInvalidTypeException; import baritone.api.command.exception.CommandInvalidTypeException;
import baritone.api.command.exception.CommandNotEnoughArgumentsException; import baritone.api.command.exception.CommandNotEnoughArgumentsException;
import baritone.api.command.exception.CommandTooManyArgumentsException; import baritone.api.command.exception.CommandTooManyArgumentsException;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.manager.ICommandManager; import baritone.api.command.manager.ICommandManager;
import java.util.ArrayList; import java.util.ArrayList;

View File

@ -17,9 +17,9 @@
package baritone.command.argument; package baritone.command.argument;
import baritone.command.argparser.ArgParserManager;
import baritone.api.command.argument.ICommandArgument; import baritone.api.command.argument.ICommandArgument;
import baritone.api.command.exception.CommandInvalidTypeException; import baritone.api.command.exception.CommandInvalidTypeException;
import baritone.command.argparser.ArgParserManager;
import java.util.stream.Stream; import java.util.stream.Stream;

View File

@ -48,9 +48,9 @@ public final class CommandArguments {
int lastEnd = -1; int lastEnd = -1;
while (argMatcher.find()) { while (argMatcher.find()) {
args.add(new CommandArgument( args.add(new CommandArgument(
args.size(), args.size(),
argMatcher.group(), argMatcher.group(),
string.substring(argMatcher.start()) string.substring(argMatcher.start())
)); ));
lastEnd = argMatcher.end(); lastEnd = argMatcher.end();
} }

View File

@ -18,11 +18,11 @@
package baritone.command.defaults; package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.command.Command;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException;
import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.Goal;
import baritone.api.pathing.goals.GoalAxis; import baritone.api.pathing.goals.GoalAxis;
import baritone.api.command.Command;
import baritone.api.command.exception.CommandException;
import baritone.api.command.argument.IArgConsumer;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;

View File

@ -18,11 +18,11 @@
package baritone.command.defaults; package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.process.IGetToBlockProcess;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.command.exception.CommandInvalidStateException;
import baritone.api.command.argument.IArgConsumer; import baritone.api.process.IGetToBlockProcess;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;

View File

@ -19,11 +19,11 @@ package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.cache.IRememberedInventory; import baritone.api.cache.IRememberedInventory;
import baritone.api.utils.BetterBlockPos;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.command.exception.CommandInvalidStateException;
import baritone.api.command.argument.IArgConsumer; import baritone.api.utils.BetterBlockPos;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.ITextComponent;

View File

@ -19,8 +19,8 @@ package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.exception.CommandException;
import baritone.api.command.argument.IArgConsumer; import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;

View File

@ -18,11 +18,11 @@
package baritone.command.defaults; package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.pathing.goals.GoalBlock;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.command.exception.CommandInvalidStateException;
import baritone.api.command.argument.IArgConsumer; import baritone.api.pathing.goals.GoalBlock;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;

View File

@ -18,11 +18,11 @@
package baritone.command.defaults; package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.pathing.goals.GoalXZ;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.datatypes.RelativeGoalXZ; import baritone.api.command.datatypes.RelativeGoalXZ;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.command.argument.IArgConsumer; import baritone.api.pathing.goals.GoalXZ;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;

View File

@ -19,11 +19,11 @@ package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.datatypes.RelativeFile; import baritone.api.command.datatypes.RelativeFile;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.command.exception.CommandInvalidStateException;
import baritone.api.command.exception.CommandInvalidTypeException; import baritone.api.command.exception.CommandInvalidTypeException;
import baritone.api.command.argument.IArgConsumer;
import com.google.gson.JsonSyntaxException; import com.google.gson.JsonSyntaxException;
import java.io.File; import java.io.File;

View File

@ -18,9 +18,13 @@
package baritone.command.defaults; package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.cache.IWaypoint;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.exception.CommandException;
import baritone.api.command.argument.IArgConsumer; import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.datatypes.ForWaypoints;
import baritone.api.command.exception.CommandException;
import baritone.api.command.exception.CommandInvalidStateException;
import baritone.api.utils.BetterBlockPos;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@ -34,8 +38,30 @@ public class FarmCommand extends Command {
@Override @Override
public void execute(String label, IArgConsumer args) throws CommandException { public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0); args.requireMax(2);
baritone.getFarmProcess().farm(); int range = 0;
BetterBlockPos origin = null;
//range
if (args.has(1)) {
range = args.getAs(Integer.class);
}
//waypoint
if (args.has(1)) {
IWaypoint[] waypoints = args.getDatatypeFor(ForWaypoints.INSTANCE);
IWaypoint waypoint = null;
switch (waypoints.length) {
case 0:
throw new CommandInvalidStateException("No waypoints found");
case 1:
waypoint = waypoints[0];
break;
default:
throw new CommandInvalidStateException("Multiple waypoints were found");
}
origin = waypoint.getLocation();
}
baritone.getFarmProcess().farm(range, origin);
logDirect("Farming"); logDirect("Farming");
} }
@ -55,7 +81,9 @@ public class FarmCommand extends Command {
"The farm command starts farming nearby plants. It harvests mature crops and plants new ones.", "The farm command starts farming nearby plants. It harvests mature crops and plants new ones.",
"", "",
"Usage:", "Usage:",
"> farm" "> farm - farms every crop it can find.",
"> farm <range> - farm crops within range from the starting position.",
"> farm <range> <waypoint> - farm crops within range from waypoint."
); );
} }
} }

View File

@ -18,11 +18,11 @@
package baritone.command.defaults; package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.utils.BetterBlockPos;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.datatypes.BlockById; import baritone.api.command.datatypes.BlockById;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.command.argument.IArgConsumer; import baritone.api.utils.BetterBlockPos;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import java.util.ArrayList; import java.util.ArrayList;

View File

@ -20,11 +20,11 @@ package baritone.command.defaults;
import baritone.KeepName; import baritone.KeepName;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.datatypes.EntityClassById; import baritone.api.command.datatypes.EntityClassById;
import baritone.api.command.datatypes.IDatatypeFor; import baritone.api.command.datatypes.IDatatypeFor;
import baritone.api.command.datatypes.NearbyPlayer; import baritone.api.command.datatypes.NearbyPlayer;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.command.helpers.TabCompleteHelper;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityList; import net.minecraft.entity.EntityList;

View File

@ -20,8 +20,8 @@ package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.behavior.IPathingBehavior; import baritone.api.behavior.IPathingBehavior;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.exception.CommandException;
import baritone.api.command.argument.IArgConsumer; import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;

View File

@ -19,8 +19,8 @@ package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.exception.CommandException;
import baritone.api.command.argument.IArgConsumer; import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;

View File

@ -18,15 +18,15 @@
package baritone.command.defaults; package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.pathing.goals.Goal;
import baritone.api.process.ICustomGoalProcess;
import baritone.api.utils.BetterBlockPos;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.datatypes.RelativeCoordinate; import baritone.api.command.datatypes.RelativeCoordinate;
import baritone.api.command.datatypes.RelativeGoal; import baritone.api.command.datatypes.RelativeGoal;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.command.helpers.TabCompleteHelper;
import baritone.api.pathing.goals.Goal;
import baritone.api.process.ICustomGoalProcess;
import baritone.api.utils.BetterBlockPos;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;

View File

@ -19,12 +19,12 @@ package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.datatypes.BlockById; import baritone.api.command.datatypes.BlockById;
import baritone.api.command.datatypes.ForBlockOptionalMeta; import baritone.api.command.datatypes.ForBlockOptionalMeta;
import baritone.api.command.datatypes.RelativeCoordinate; import baritone.api.command.datatypes.RelativeCoordinate;
import baritone.api.command.datatypes.RelativeGoal; import baritone.api.command.datatypes.RelativeGoal;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.Goal;
import baritone.api.utils.BetterBlockPos; import baritone.api.utils.BetterBlockPos;
import baritone.api.utils.BlockOptionalMeta; import baritone.api.utils.BlockOptionalMeta;

View File

@ -20,9 +20,9 @@ package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.ICommand; import baritone.api.command.ICommand;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.command.exception.CommandNotFoundException; import baritone.api.command.exception.CommandNotFoundException;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.Paginator;
import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.command.helpers.TabCompleteHelper;
import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.ITextComponent;

View File

@ -18,13 +18,13 @@
package baritone.command.defaults; package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.command.Command;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException;
import baritone.api.command.exception.CommandInvalidStateException;
import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.Goal;
import baritone.api.pathing.goals.GoalInverted; import baritone.api.pathing.goals.GoalInverted;
import baritone.api.process.ICustomGoalProcess; import baritone.api.process.ICustomGoalProcess;
import baritone.api.command.Command;
import baritone.api.command.exception.CommandException;
import baritone.api.command.exception.CommandInvalidStateException;
import baritone.api.command.argument.IArgConsumer;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;

View File

@ -18,12 +18,12 @@
package baritone.command.defaults; package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.utils.BlockOptionalMeta;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.datatypes.BlockById; import baritone.api.command.datatypes.BlockById;
import baritone.api.command.datatypes.ForBlockOptionalMeta; import baritone.api.command.datatypes.ForBlockOptionalMeta;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.command.argument.IArgConsumer; import baritone.api.utils.BlockOptionalMeta;
import baritone.cache.WorldScanner; import baritone.cache.WorldScanner;
import java.util.ArrayList; import java.util.ArrayList;

View File

@ -19,8 +19,8 @@ package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.exception.CommandException;
import baritone.api.command.argument.IArgConsumer; import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException;
import baritone.api.process.ICustomGoalProcess; import baritone.api.process.ICustomGoalProcess;
import baritone.cache.WorldScanner; import baritone.cache.WorldScanner;

View File

@ -18,13 +18,13 @@
package baritone.command.defaults; package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.command.Command;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException;
import baritone.api.command.exception.CommandInvalidStateException;
import baritone.api.pathing.calc.IPathingControlManager; import baritone.api.pathing.calc.IPathingControlManager;
import baritone.api.process.IBaritoneProcess; import baritone.api.process.IBaritoneProcess;
import baritone.api.process.PathingCommand; import baritone.api.process.PathingCommand;
import baritone.api.command.Command;
import baritone.api.command.exception.CommandException;
import baritone.api.command.exception.CommandInvalidStateException;
import baritone.api.command.argument.IArgConsumer;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;

View File

@ -19,8 +19,8 @@ package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.exception.CommandException;
import baritone.api.command.argument.IArgConsumer; import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;

View File

@ -18,10 +18,10 @@
package baritone.command.defaults; package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.utils.BetterBlockPos;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.exception.CommandException;
import baritone.api.command.argument.IArgConsumer; import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException;
import baritone.api.utils.BetterBlockPos;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;

View File

@ -19,8 +19,8 @@ package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.exception.CommandException;
import baritone.api.command.argument.IArgConsumer; import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException;
import baritone.cache.WorldScanner; import baritone.cache.WorldScanner;
import java.util.Arrays; import java.util.Arrays;

View File

@ -19,8 +19,8 @@ package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.exception.CommandException;
import baritone.api.command.argument.IArgConsumer; import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;

View File

@ -19,8 +19,8 @@ package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.exception.CommandException;
import baritone.api.command.argument.IArgConsumer; import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;

View File

@ -19,6 +19,15 @@ package baritone.command.defaults;
import baritone.Baritone; import baritone.Baritone;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.command.Command;
import baritone.api.command.argument.IArgConsumer;
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.TabCompleteHelper;
import baritone.api.event.events.RenderEvent; import baritone.api.event.events.RenderEvent;
import baritone.api.event.listener.AbstractGameEventListener; import baritone.api.event.listener.AbstractGameEventListener;
import baritone.api.schematic.*; import baritone.api.schematic.*;
@ -27,16 +36,6 @@ import baritone.api.selection.ISelectionManager;
import baritone.api.utils.BetterBlockPos; import baritone.api.utils.BetterBlockPos;
import baritone.api.utils.BlockOptionalMeta; import baritone.api.utils.BlockOptionalMeta;
import baritone.api.utils.BlockOptionalMetaLookup; import baritone.api.utils.BlockOptionalMetaLookup;
import baritone.api.schematic.ISchematic;
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.argument.IArgConsumer;
import baritone.api.command.helpers.TabCompleteHelper;
import baritone.utils.IRenderer; import baritone.utils.IRenderer;
import net.minecraft.init.Blocks; import net.minecraft.init.Blocks;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;

View File

@ -20,13 +20,13 @@ package baritone.command.defaults;
import baritone.Baritone; import baritone.Baritone;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.Settings; import baritone.api.Settings;
import baritone.api.utils.SettingsUtil;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.command.exception.CommandInvalidTypeException; import baritone.api.command.exception.CommandInvalidTypeException;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.Paginator;
import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.command.helpers.TabCompleteHelper;
import baritone.api.utils.SettingsUtil;
import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextComponentString;
import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.TextFormatting;
@ -39,9 +39,9 @@ import java.util.Locale;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX;
import static baritone.api.utils.SettingsUtil.settingTypeToString; import static baritone.api.utils.SettingsUtil.settingTypeToString;
import static baritone.api.utils.SettingsUtil.settingValueToString; import static baritone.api.utils.SettingsUtil.settingValueToString;
import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX;
public class SetCommand extends Command { public class SetCommand extends Command {

View File

@ -18,10 +18,10 @@
package baritone.command.defaults; package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.pathing.goals.GoalXZ;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.exception.CommandException;
import baritone.api.command.argument.IArgConsumer; import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException;
import baritone.api.pathing.goals.GoalXZ;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;

View File

@ -77,7 +77,7 @@ public class TunnelCommand extends Command {
default: default:
throw new IllegalStateException("Unexpected value: " + enumFacing); throw new IllegalStateException("Unexpected value: " + enumFacing);
} }
logDirect(String.format("Creating a tunnel %s block(s) high, %s block(s) wide, and %s block(s) deep", height+1, width+1, depth)); logDirect(String.format("Creating a tunnel %s block(s) high, %s block(s) wide, and %s block(s) deep", height + 1, width + 1, depth));
baritone.getBuilderProcess().clearArea(corner1, corner2); baritone.getBuilderProcess().clearArea(corner1, corner2);
} }
} else { } else {

View File

@ -19,9 +19,9 @@ package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.command.Command; import baritone.api.command.Command;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.command.exception.CommandInvalidStateException;
import baritone.api.command.argument.IArgConsumer;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;

View File

@ -20,18 +20,18 @@ package baritone.command.defaults;
import baritone.api.IBaritone; import baritone.api.IBaritone;
import baritone.api.cache.IWaypoint; import baritone.api.cache.IWaypoint;
import baritone.api.cache.Waypoint; 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.command.Command; import baritone.api.command.Command;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.datatypes.ForWaypoints; import baritone.api.command.datatypes.ForWaypoints;
import baritone.api.command.datatypes.RelativeBlockPos; import baritone.api.command.datatypes.RelativeBlockPos;
import baritone.api.command.exception.CommandException; import baritone.api.command.exception.CommandException;
import baritone.api.command.exception.CommandInvalidStateException; import baritone.api.command.exception.CommandInvalidStateException;
import baritone.api.command.exception.CommandInvalidTypeException; import baritone.api.command.exception.CommandInvalidTypeException;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.helpers.Paginator; import baritone.api.command.helpers.Paginator;
import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.command.helpers.TabCompleteHelper;
import baritone.api.pathing.goals.Goal;
import baritone.api.pathing.goals.GoalBlock;
import baritone.api.utils.BetterBlockPos;
import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextComponentString;
import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.TextFormatting;

View File

@ -23,10 +23,10 @@ import baritone.api.command.ICommand;
import baritone.api.command.argument.ICommandArgument; import baritone.api.command.argument.ICommandArgument;
import baritone.api.command.exception.CommandUnhandledException; import baritone.api.command.exception.CommandUnhandledException;
import baritone.api.command.exception.ICommandException; import baritone.api.command.exception.ICommandException;
import baritone.command.argument.ArgConsumer;
import baritone.api.command.helpers.TabCompleteHelper; import baritone.api.command.helpers.TabCompleteHelper;
import baritone.api.command.manager.ICommandManager; import baritone.api.command.manager.ICommandManager;
import baritone.api.command.registry.Registry; import baritone.api.command.registry.Registry;
import baritone.command.argument.ArgConsumer;
import baritone.command.argument.CommandArguments; import baritone.command.argument.CommandArguments;
import baritone.command.defaults.DefaultCommands; import baritone.command.defaults.DefaultCommands;
import net.minecraft.util.Tuple; import net.minecraft.util.Tuple;

View File

@ -25,8 +25,8 @@ import baritone.api.utils.BetterBlockPos;
import baritone.api.utils.Helper; import baritone.api.utils.Helper;
import baritone.api.utils.PathCalculationResult; import baritone.api.utils.PathCalculationResult;
import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.CalculationContext;
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
import baritone.utils.NotificationHelper; import baritone.utils.NotificationHelper;
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
import java.util.Optional; import java.util.Optional;

View File

@ -562,6 +562,7 @@ public interface MovementHelper extends ActionCosts, Helper {
enum PlaceResult { enum PlaceResult {
READY_TO_PLACE, ATTEMPTING, NO_OPTION; READY_TO_PLACE, ATTEMPTING, NO_OPTION;
} }
static boolean isTransparent(Block b) { static boolean isTransparent(Block b) {
return b == Blocks.AIR || return b == Blocks.AIR ||

View File

@ -67,24 +67,24 @@ public class MovementDiagonal extends Movement {
double y = player.posY - 1; double y = player.posY - 1;
double z = player.posZ; double z = player.posZ;
//standard //standard
if (ctx.playerFeet().equals(src)){ if (ctx.playerFeet().equals(src)) {
return true; return true;
} }
//both corners are walkable //both corners are walkable
if (MovementHelper.canWalkOn(ctx, new BlockPos(src.x, src.y - 1, dest.z)) if (MovementHelper.canWalkOn(ctx, new BlockPos(src.x, src.y - 1, dest.z))
&& MovementHelper.canWalkOn(ctx, new BlockPos(dest.x, src.y - 1, src.z))){ && MovementHelper.canWalkOn(ctx, new BlockPos(dest.x, src.y - 1, src.z))) {
return true; return true;
} }
//we are in a likely unwalkable corner, check for a supporting block //we are in a likely unwalkable corner, check for a supporting block
if (ctx.playerFeet().equals(new BetterBlockPos(src.x, src.y, dest.z)) if (ctx.playerFeet().equals(new BetterBlockPos(src.x, src.y, dest.z))
|| ctx.playerFeet().equals(new BetterBlockPos(dest.x, src.y, src.z))){ || ctx.playerFeet().equals(new BetterBlockPos(dest.x, src.y, src.z))) {
return (MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z + offset)) return (MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z + offset))
|| MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z - offset)) || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z - offset))
|| MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z + offset)) || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z + offset))
|| MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z - offset))); || MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z - offset)));
} }
return true; return true;
} }
@Override @Override
public double calculateCost(CalculationContext context) { public double calculateCost(CalculationContext context) {

View File

@ -58,6 +58,7 @@ import net.minecraft.util.math.*;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
import static baritone.api.pathing.movement.ActionCosts.COST_INF; import static baritone.api.pathing.movement.ActionCosts.COST_INF;
@ -482,8 +483,13 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil
Goal goal = assemble(bcc, approxPlaceable.subList(0, 9)); Goal goal = assemble(bcc, approxPlaceable.subList(0, 9));
if (goal == null) { if (goal == null) {
goal = assemble(bcc, approxPlaceable); // we're far away, so assume that we have our whole inventory to recalculate placeable properly goal = assemble(bcc, approxPlaceable, true); // we're far away, so assume that we have our whole inventory to recalculate placeable properly
if (goal == null) { if (goal == null) {
if (Baritone.settings().skipFailedLayers.value && Baritone.settings().buildInLayers.value && layer < realSchematic.heightY()) {
logDirect("Skipping layer that I cannot construct! Layer #" + layer);
layer++;
return onTick(calcFailed, isSafeToCancel);
}
logDirect("Unable to do it. Pausing. resume to resume, cancel to cancel"); logDirect("Unable to do it. Pausing. resume to resume, cancel to cancel");
paused = true; paused = true;
return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE); return new PathingCommand(null, PathingCommandType.REQUEST_PAUSE);
@ -581,14 +587,23 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil
} }
private Goal assemble(BuilderCalculationContext bcc, List<IBlockState> approxPlaceable) { private Goal assemble(BuilderCalculationContext bcc, List<IBlockState> approxPlaceable) {
return assemble(bcc, approxPlaceable, false);
}
private Goal assemble(BuilderCalculationContext bcc, List<IBlockState> approxPlaceable, boolean logMissing) {
List<BetterBlockPos> placeable = new ArrayList<>(); List<BetterBlockPos> placeable = new ArrayList<>();
List<BetterBlockPos> breakable = new ArrayList<>(); List<BetterBlockPos> breakable = new ArrayList<>();
List<BetterBlockPos> sourceLiquids = new ArrayList<>(); List<BetterBlockPos> sourceLiquids = new ArrayList<>();
List<BetterBlockPos> flowingLiquids = new ArrayList<>();
Map<IBlockState, Integer> missing = new HashMap<>();
incorrectPositions.forEach(pos -> { incorrectPositions.forEach(pos -> {
IBlockState state = bcc.bsi.get0(pos); IBlockState state = bcc.bsi.get0(pos);
if (state.getBlock() instanceof BlockAir) { if (state.getBlock() instanceof BlockAir) {
if (approxPlaceable.contains(bcc.getSchematic(pos.x, pos.y, pos.z, state))) { if (approxPlaceable.contains(bcc.getSchematic(pos.x, pos.y, pos.z, state))) {
placeable.add(pos); placeable.add(pos);
} else {
IBlockState desired = bcc.getSchematic(pos.x, pos.y, pos.z, state);
missing.put(desired, 1 + missing.getOrDefault(desired, 0));
} }
} else { } else {
if (state.getBlock() instanceof BlockLiquid) { if (state.getBlock() instanceof BlockLiquid) {
@ -597,6 +612,8 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil
if (!MovementHelper.possiblyFlowing(state)) { if (!MovementHelper.possiblyFlowing(state)) {
// if it's a source block then we want to replace it with a throwaway // if it's a source block then we want to replace it with a throwaway
sourceLiquids.add(pos); sourceLiquids.add(pos);
} else {
flowingLiquids.add(pos);
} }
} else { } else {
breakable.add(pos); breakable.add(pos);
@ -617,6 +634,18 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil
return new JankyGoalComposite(new GoalComposite(toPlace.toArray(new Goal[0])), new GoalComposite(toBreak.toArray(new Goal[0]))); return new JankyGoalComposite(new GoalComposite(toPlace.toArray(new Goal[0])), new GoalComposite(toBreak.toArray(new Goal[0])));
} }
if (toBreak.isEmpty()) { if (toBreak.isEmpty()) {
if (logMissing && !missing.isEmpty()) {
logDirect("Missing materials for at least:");
logDirect(missing.entrySet().stream()
.map(e -> String.format("%sx %s", e.getValue(), e.getKey()))
.collect(Collectors.joining("\n")));
}
if (logMissing && !flowingLiquids.isEmpty()) {
logDirect("Unreplaceable liquids at at least:");
logDirect(flowingLiquids.stream()
.map(p -> String.format("%s %s %s", p.x, p.y, p.z))
.collect(Collectors.joining("\n")));
}
return null; return null;
} }
return new GoalComposite(toBreak.toArray(new Goal[0])); return new GoalComposite(toBreak.toArray(new Goal[0]));

View File

@ -61,6 +61,9 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro
private List<BlockPos> locations; private List<BlockPos> locations;
private int tickCount; private int tickCount;
private int range;
private BlockPos center;
private static final List<Item> FARMLAND_PLANTABLE = Arrays.asList( private static final List<Item> FARMLAND_PLANTABLE = Arrays.asList(
Items.BEETROOT_SEEDS, Items.BEETROOT_SEEDS,
Items.MELON_SEEDS, Items.MELON_SEEDS,
@ -97,7 +100,13 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro
} }
@Override @Override
public void farm() { public void farm(int range, BlockPos pos) {
if (pos == null) {
center = baritone.getPlayerContext().playerFeet();
} else {
center = pos;
}
this.range = range;
active = true; active = true;
locations = null; locations = null;
} }
@ -191,6 +200,11 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro
List<BlockPos> bonemealable = new ArrayList<>(); List<BlockPos> bonemealable = new ArrayList<>();
List<BlockPos> openSoulsand = new ArrayList<>(); List<BlockPos> openSoulsand = new ArrayList<>();
for (BlockPos pos : locations) { for (BlockPos pos : locations) {
//check if the target block is out of range.
if (range != 0 && pos.getDistance(center.getX(), center.getY(), center.getZ()) > range) {
continue;
}
IBlockState state = ctx.world().getBlockState(pos); IBlockState state = ctx.world().getBlockState(pos);
boolean airAbove = ctx.world().getBlockState(pos.up()).getBlock() instanceof BlockAir; boolean airAbove = ctx.world().getBlockState(pos.up()).getBlock() instanceof BlockAir;
if (state.getBlock() == Blocks.FARMLAND) { if (state.getBlock() == Blocks.FARMLAND) {

View File

@ -1,142 +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 <https://www.gnu.org/licenses/>.
*/
package baritone.utils;
import baritone.api.BaritoneAPI;
import baritone.api.event.events.TickEvent;
import baritone.api.event.listener.AbstractGameEventListener;
import baritone.api.pathing.goals.Goal;
import baritone.api.pathing.goals.GoalBlock;
import baritone.api.utils.Helper;
import baritone.api.utils.IPlayerContext;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiMainMenu;
import net.minecraft.client.settings.GameSettings;
import net.minecraft.client.tutorial.TutorialSteps;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.*;
/**
* Responsible for automatically testing Baritone's pathing algorithm by automatically creating a world with a specific
* seed, setting a specified goal, and only allowing a certain amount of ticks to pass before the pathing test is
* considered a failure. In order to test locally, docker may be used, or through an IDE: Create a run config which runs
* in a separate directory from the primary one (./run), and set the enrivonmental variable {@code BARITONE_AUTO_TEST}
* to {@code true}.
*
* @author leijurv, Brady
*/
public class BaritoneAutoTest implements AbstractGameEventListener, Helper {
public static final BaritoneAutoTest INSTANCE = new BaritoneAutoTest();
public static final boolean ENABLE_AUTO_TEST = "true".equals(System.getenv("BARITONE_AUTO_TEST"));
private static final long TEST_SEED = -928872506371745L;
private static final BlockPos STARTING_POSITION = new BlockPos(0, 65, 0);
private static final Goal GOAL = new GoalBlock(69, 69, 420);
private static final int MAX_TICKS = 3300;
/**
* Called right after the {@link GameSettings} object is created in the {@link Minecraft} instance.
*/
public void onPreInit() {
if (!BaritoneAutoTest.ENABLE_AUTO_TEST) {
return;
}
System.out.println("Optimizing Game Settings");
GameSettings s = mc.gameSettings;
s.limitFramerate = 20;
s.mipmapLevels = 0;
s.particleSetting = 2;
s.overrideWidth = 128;
s.overrideHeight = 128;
s.heldItemTooltips = false;
s.entityShadows = false;
s.chatScale = 0.0F;
s.ambientOcclusion = 0;
s.clouds = 0;
s.fancyGraphics = false;
s.tutorialStep = TutorialSteps.NONE;
s.hideGUI = true;
s.fovSetting = 30.0F;
}
@Override
public void onTick(TickEvent event) {
IPlayerContext ctx = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext();
// If we're on the main menu then create the test world and launch the integrated server
if (mc.currentScreen instanceof GuiMainMenu) {
System.out.println("Beginning Baritone automatic test routine");
mc.displayGuiScreen(null);
WorldSettings worldsettings = new WorldSettings(TEST_SEED, GameType.SURVIVAL, true, false, WorldType.DEFAULT);
mc.launchIntegratedServer("BaritoneAutoTest", "BaritoneAutoTest", worldsettings);
}
// If the integrated server is running, set the difficulty to peaceful
if (mc.getIntegratedServer() != null) {
mc.getIntegratedServer().setDifficultyForAllWorlds(EnumDifficulty.PEACEFUL);
for (final WorldServer world : mc.getIntegratedServer().worlds) {
// If the world has initialized, set the spawn point to our defined starting position
if (world != null) {
world.setSpawnPoint(STARTING_POSITION);
world.getGameRules().setOrCreateGameRule("spawnRadius", "0");
}
}
}
if (event.getType() == TickEvent.Type.IN) { // If we're in-game
// Force the integrated server to share the world to LAN so that
// the ingame pause menu gui doesn't actually pause our game
if (mc.isSingleplayer() && !mc.getIntegratedServer().getPublic()) {
mc.getIntegratedServer().shareToLAN(GameType.SURVIVAL, false);
}
// For the first 200 ticks, wait for the world to generate
if (event.getCount() < 200) {
System.out.println("Waiting for world to generate... " + event.getCount());
return;
}
// Print out an update of our position every 5 seconds
if (event.getCount() % 100 == 0) {
System.out.println(ctx.playerFeet() + " " + event.getCount());
}
// Setup Baritone's pathing goal and (if needed) begin pathing
if (!BaritoneAPI.getProvider().getPrimaryBaritone().getCustomGoalProcess().isActive()) {
BaritoneAPI.getProvider().getPrimaryBaritone().getCustomGoalProcess().setGoalAndPath(GOAL);
}
// If we have reached our goal, print a message and safely close the game
if (GOAL.isInGoal(ctx.playerFeet())) {
System.out.println("Successfully pathed to " + ctx.playerFeet() + " in " + event.getCount() + " ticks");
mc.shutdown();
}
// If we have exceeded the expected number of ticks to complete the pathing
// task, then throw an IllegalStateException to cause the build to fail
if (event.getCount() > MAX_TICKS) {
throw new IllegalStateException("took too long");
}
}
}
private BaritoneAutoTest() {}
}

View File

@ -125,8 +125,14 @@ public class ToolSet {
IBlockState blockState = b.getDefaultState(); IBlockState blockState = b.getDefaultState();
for (int i = 0; i < 9; i++) { for (int i = 0; i < 9; i++) {
ItemStack itemStack = player.inventory.getStackInSlot(i); ItemStack itemStack = player.inventory.getStackInSlot(i);
if (!Baritone.settings().useSwordToMine.value && itemStack.getItem() instanceof ItemSword) if (!Baritone.settings().useSwordToMine.value && itemStack.getItem() instanceof ItemSword){
continue; continue;
}
if (Baritone.settings().itemSaver.value && itemStack.getItemDamage() >= itemStack.getMaxDamage() && itemStack.getMaxDamage() > 1) {
continue;
}
double speed = calculateSpeedVsBlock(itemStack, blockState); double speed = calculateSpeedVsBlock(itemStack, blockState);
boolean silkTouch = hasSilkTouch(itemStack); boolean silkTouch = hasSilkTouch(itemStack);
if (speed > highestSpeed) { if (speed > highestSpeed) {

View File

@ -41,7 +41,6 @@ public enum DefaultSchematicFormats implements ISchematicFormat {
* The MCEdit schematic specification. Commonly denoted by the ".schematic" file extension. * The MCEdit schematic specification. Commonly denoted by the ".schematic" file extension.
*/ */
MCEDIT("schematic") { MCEDIT("schematic") {
@Override @Override
public IStaticSchematic parse(InputStream input) throws IOException { public IStaticSchematic parse(InputStream input) throws IOException {
return new MCEditSchematic(CompressedStreamTools.readCompressed(input)); return new MCEditSchematic(CompressedStreamTools.readCompressed(input));
@ -54,7 +53,6 @@ public enum DefaultSchematicFormats implements ISchematicFormat {
* @see <a href="https://github.com/SpongePowered/Schematic-Specification">Sponge Schematic Specification</a> * @see <a href="https://github.com/SpongePowered/Schematic-Specification">Sponge Schematic Specification</a>
*/ */
SPONGE("schem") { SPONGE("schem") {
@Override @Override
public IStaticSchematic parse(InputStream input) throws IOException { public IStaticSchematic parse(InputStream input) throws IOException {
NBTTagCompound nbt = CompressedStreamTools.readCompressed(input); NBTTagCompound nbt = CompressedStreamTools.readCompressed(input);