From 65a5677b33defb80c1d5c26026fdb5c2cc086468 Mon Sep 17 00:00:00 2001 From: millennIumAMbiguity <37588844+millennIumAMbiguity@users.noreply.github.com> Date: Thu, 22 Oct 2020 00:36:19 +0200 Subject: [PATCH] Added the feature to only farm within range of a waypoint. --- .../command/defaults/FarmCommand.java | 54 +++++++++++++++++-- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/command/defaults/FarmCommand.java b/src/main/java/baritone/command/defaults/FarmCommand.java index 89a173d1..37c6a78e 100644 --- a/src/main/java/baritone/command/defaults/FarmCommand.java +++ b/src/main/java/baritone/command/defaults/FarmCommand.java @@ -18,15 +18,23 @@ package baritone.command.defaults; import baritone.api.IBaritone; +import baritone.api.cache.IWaypoint; import baritone.api.command.Command; +import baritone.api.command.datatypes.ForWaypoints; import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.command.exception.CommandInvalidStateException; +import baritone.api.command.helpers.Paginator; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalBlock; import baritone.api.utils.BetterBlockPos; import java.util.Arrays; import java.util.List; import java.util.stream.Stream; +import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX; + public class FarmCommand extends Command { public FarmCommand(IBaritone baritone) { @@ -35,12 +43,49 @@ public class FarmCommand extends Command { @Override public void execute(String label, IArgConsumer args) throws CommandException { - args.requireMax(1); + args.requireMax(2); int range = 0; - if (args.hasExactly(1)) { + BetterBlockPos origin; + //range + if (args.has(1)) { range = args.getAs(Integer.class); } - BetterBlockPos origin = baritone.getPlayerContext().playerFeet(); + //waypoint + if (args.hasExactly(1)){ + IWaypoint[] waypoints = args.getDatatypeFor(ForWaypoints.INSTANCE); + IWaypoint waypoint = null; + if (args.hasAny() && args.peekString().equals("@")) { + long timestamp = args.getAs(Long.class); + for (IWaypoint iWaypoint : waypoints) { + if (iWaypoint.getCreationTimestamp() == timestamp) { + waypoint = iWaypoint; + break; + } + } + if (waypoint == null) { + throw new CommandInvalidStateException("Timestamp was specified but no waypoint was found"); + } + } else { + switch (waypoints.length) { + case 0: + throw new CommandInvalidStateException("No waypoints found"); + case 1: + waypoint = waypoints[0]; + break; + default: + break; + } + } + if (waypoint == null) { + throw new CommandInvalidStateException("Multiple waypoints were found"); + } else { + origin = waypoint.getLocation(); + } + } else { + origin = baritone.getPlayerContext().playerFeet(); + } + + baritone.getFarmProcess().farm(range, origin); logDirect("Farming"); } @@ -62,7 +107,8 @@ public class FarmCommand extends Command { "", "Usage:", "> farm - farms every crop it can find.", - "> farm 100 - farm crops within a 100 block radius from the starting position." + "> farm - farm crops within range from the starting position.", + "> farm - farm crops within range from waypoint." ); } }