From 5d3522ca0a91ae83920c7c8000a13d14e8b1a591 Mon Sep 17 00:00:00 2001 From: millennIumAMbiguity <37588844+millennIumAMbiguity@users.noreply.github.com> Date: Fri, 16 Oct 2020 23:32:53 +0200 Subject: [PATCH 1/5] Added range argument to farm --- src/api/java/baritone/api/process/IFarmProcess.java | 4 +++- .../java/baritone/command/defaults/FarmCommand.java | 13 ++++++++++--- src/main/java/baritone/process/FarmProcess.java | 12 +++++++++++- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/api/java/baritone/api/process/IFarmProcess.java b/src/api/java/baritone/api/process/IFarmProcess.java index 6ced16fba..c9295b765 100644 --- a/src/api/java/baritone/api/process/IFarmProcess.java +++ b/src/api/java/baritone/api/process/IFarmProcess.java @@ -17,7 +17,9 @@ package baritone.api.process; +import net.minecraft.util.math.BlockPos; + public interface IFarmProcess extends IBaritoneProcess { - void farm(); + void farm(int range, BlockPos pos); } diff --git a/src/main/java/baritone/command/defaults/FarmCommand.java b/src/main/java/baritone/command/defaults/FarmCommand.java index 786d01249..89a173d1b 100644 --- a/src/main/java/baritone/command/defaults/FarmCommand.java +++ b/src/main/java/baritone/command/defaults/FarmCommand.java @@ -21,6 +21,7 @@ import baritone.api.IBaritone; import baritone.api.command.Command; import baritone.api.command.exception.CommandException; import baritone.api.command.argument.IArgConsumer; +import baritone.api.utils.BetterBlockPos; import java.util.Arrays; import java.util.List; @@ -34,8 +35,13 @@ public class FarmCommand extends Command { @Override public void execute(String label, IArgConsumer args) throws CommandException { - args.requireMax(0); - baritone.getFarmProcess().farm(); + args.requireMax(1); + int range = 0; + if (args.hasExactly(1)) { + range = args.getAs(Integer.class); + } + BetterBlockPos origin = baritone.getPlayerContext().playerFeet(); + baritone.getFarmProcess().farm(range, origin); logDirect("Farming"); } @@ -55,7 +61,8 @@ public class FarmCommand extends Command { "The farm command starts farming nearby plants. It harvests mature crops and plants new ones.", "", "Usage:", - "> farm" + "> farm - farms every crop it can find.", + "> farm 100 - farm crops within a 100 block radius from the starting position." ); } } diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index 407157b37..599fa6df8 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -61,6 +61,9 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro private List locations; private int tickCount; + private int range; + private BlockPos center; + private static final List FARMLAND_PLANTABLE = Arrays.asList( Items.BEETROOT_SEEDS, Items.MELON_SEEDS, @@ -97,7 +100,9 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro } @Override - public void farm() { + public void farm(int range, BlockPos pos) { + center = pos; + this.range = range; active = true; locations = null; } @@ -191,6 +196,11 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro List bonemealable = new ArrayList<>(); List openSoulsand = new ArrayList<>(); 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); boolean airAbove = ctx.world().getBlockState(pos.up()).getBlock() instanceof BlockAir; if (state.getBlock() == Blocks.FARMLAND) { 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 2/5] 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 89a173d1b..37c6a78ef 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." ); } } From 7218a46211c6e1e7a44625e1d1b1b5c4d4d03273 Mon Sep 17 00:00:00 2001 From: millennIumAMbiguity <37588844+millennIumAMbiguity@users.noreply.github.com> Date: Mon, 2 Nov 2020 00:33:31 +0100 Subject: [PATCH 3/5] Added defaults and javadocs --- .../baritone/api/process/IFarmProcess.java | 20 +++++++++++++++++++ .../command/defaults/FarmCommand.java | 5 +---- .../java/baritone/process/FarmProcess.java | 6 +++++- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/api/java/baritone/api/process/IFarmProcess.java b/src/api/java/baritone/api/process/IFarmProcess.java index c9295b765..224307afa 100644 --- a/src/api/java/baritone/api/process/IFarmProcess.java +++ b/src/api/java/baritone/api/process/IFarmProcess.java @@ -21,5 +21,25 @@ import net.minecraft.util.math.BlockPos; public interface IFarmProcess extends IBaritoneProcess { + /** + * 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);} } diff --git a/src/main/java/baritone/command/defaults/FarmCommand.java b/src/main/java/baritone/command/defaults/FarmCommand.java index 37c6a78ef..9f841acdf 100644 --- a/src/main/java/baritone/command/defaults/FarmCommand.java +++ b/src/main/java/baritone/command/defaults/FarmCommand.java @@ -45,7 +45,7 @@ public class FarmCommand extends Command { public void execute(String label, IArgConsumer args) throws CommandException { args.requireMax(2); int range = 0; - BetterBlockPos origin; + BetterBlockPos origin = null; //range if (args.has(1)) { range = args.getAs(Integer.class); @@ -81,11 +81,8 @@ public class FarmCommand extends Command { } else { origin = waypoint.getLocation(); } - } else { - origin = baritone.getPlayerContext().playerFeet(); } - baritone.getFarmProcess().farm(range, origin); logDirect("Farming"); } diff --git a/src/main/java/baritone/process/FarmProcess.java b/src/main/java/baritone/process/FarmProcess.java index 599fa6df8..a8806d2ba 100644 --- a/src/main/java/baritone/process/FarmProcess.java +++ b/src/main/java/baritone/process/FarmProcess.java @@ -101,7 +101,11 @@ public final class FarmProcess extends BaritoneProcessHelper implements IFarmPro @Override public void farm(int range, BlockPos pos) { - center = pos; + if (pos == null) { + center = baritone.getPlayerContext().playerFeet(); + } else { + center = pos; + } this.range = range; active = true; locations = null; From f4706fff18f73f171843dfd35fb041a6b5451d7f Mon Sep 17 00:00:00 2001 From: millennIumAMbiguity <37588844+millennIumAMbiguity@users.noreply.github.com> Date: Mon, 2 Nov 2020 01:25:25 +0100 Subject: [PATCH 4/5] Simplified and optimised code --- .../command/defaults/FarmCommand.java | 31 ++++++------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/src/main/java/baritone/command/defaults/FarmCommand.java b/src/main/java/baritone/command/defaults/FarmCommand.java index 9f841acdf..cae884b71 100644 --- a/src/main/java/baritone/command/defaults/FarmCommand.java +++ b/src/main/java/baritone/command/defaults/FarmCommand.java @@ -51,30 +51,17 @@ public class FarmCommand extends Command { range = args.getAs(Integer.class); } //waypoint - if (args.hasExactly(1)){ + if (args.has(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; - } + 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"); From 853b5ca77175d74f5e21699c3c7d2b46b8ec0f23 Mon Sep 17 00:00:00 2001 From: millennIumAMbiguity <37588844+millennIumAMbiguity@users.noreply.github.com> Date: Mon, 2 Nov 2020 01:44:12 +0100 Subject: [PATCH 5/5] Moved throw up into the default: --- src/main/java/baritone/command/defaults/FarmCommand.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/main/java/baritone/command/defaults/FarmCommand.java b/src/main/java/baritone/command/defaults/FarmCommand.java index cae884b71..1903f89f3 100644 --- a/src/main/java/baritone/command/defaults/FarmCommand.java +++ b/src/main/java/baritone/command/defaults/FarmCommand.java @@ -61,13 +61,9 @@ public class FarmCommand extends Command { waypoint = waypoints[0]; break; default: - break; - } - if (waypoint == null) { - throw new CommandInvalidStateException("Multiple waypoints were found"); - } else { - origin = waypoint.getLocation(); + throw new CommandInvalidStateException("Multiple waypoints were found"); } + origin = waypoint.getLocation(); } baritone.getFarmProcess().farm(range, origin);