diff --git a/src/launch/java/baritone/launch/mixins/MixinNBTTagLongArray.java b/src/launch/java/baritone/launch/mixins/MixinNBTTagLongArray.java
new file mode 100644
index 000000000..2c05e5442
--- /dev/null
+++ b/src/launch/java/baritone/launch/mixins/MixinNBTTagLongArray.java
@@ -0,0 +1,35 @@
+/*
+ * This file is part of Baritone.
+ *
+ * Baritone is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Baritone is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Baritone. If not, see .
+ */
+
+package baritone.launch.mixins;
+
+import baritone.utils.accessor.INBTTagLongArray;
+import net.minecraft.nbt.NBTTagLongArray;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Accessor;
+
+/**
+ * @author rycbar
+ * @since 26.09.2022
+ */
+@Mixin(NBTTagLongArray.class)
+public abstract class MixinNBTTagLongArray implements INBTTagLongArray {
+
+ @Accessor("data")
+ @Override
+ public abstract long[] getLongArray();
+}
\ No newline at end of file
diff --git a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java
index 8a53e7d41..eaab75286 100644
--- a/src/main/java/baritone/command/defaults/ExecutionControlCommands.java
+++ b/src/main/java/baritone/command/defaults/ExecutionControlCommands.java
@@ -79,7 +79,7 @@ public class ExecutionControlCommands {
}
}
);
- pauseCommand = new Command(baritone, "pause", "p") {
+ pauseCommand = new Command(baritone, "pause", "p", "paws") {
@Override
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
@@ -112,7 +112,7 @@ public class ExecutionControlCommands {
);
}
};
- resumeCommand = new Command(baritone, "resume", "r", "unpause") {
+ resumeCommand = new Command(baritone, "resume", "r", "unpause", "unpaws") {
@Override
public void execute(String label, IArgConsumer args) throws CommandException {
args.requireMax(0);
diff --git a/src/main/java/baritone/command/defaults/FindCommand.java b/src/main/java/baritone/command/defaults/FindCommand.java
index a6b6a7b7a..b45f7050e 100644
--- a/src/main/java/baritone/command/defaults/FindCommand.java
+++ b/src/main/java/baritone/command/defaults/FindCommand.java
@@ -22,15 +22,23 @@ import baritone.api.command.Command;
import baritone.api.command.argument.IArgConsumer;
import baritone.api.command.datatypes.BlockById;
import baritone.api.command.exception.CommandException;
+import baritone.api.command.helpers.TabCompleteHelper;
import baritone.api.utils.BetterBlockPos;
+import baritone.cache.CachedChunk;
import net.minecraft.block.Block;
import net.minecraft.util.registry.Registry;
+import net.minecraft.util.text.ITextComponent;
+import net.minecraft.util.text.TextFormatting;
+import net.minecraft.util.text.event.ClickEvent;
+import net.minecraft.util.text.event.HoverEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
+import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX;
+
public class FindCommand extends Command {
public FindCommand(IBaritone baritone) {
@@ -39,12 +47,13 @@ public class FindCommand extends Command {
@Override
public void execute(String label, IArgConsumer args) throws CommandException {
+ args.requireMin(1);
List toFind = new ArrayList<>();
while (args.hasAny()) {
toFind.add(args.getDatatypeFor(BlockById.INSTANCE));
}
BetterBlockPos origin = ctx.playerFeet();
- toFind.stream()
+ ITextComponent[] components = toFind.stream()
.flatMap(block ->
ctx.worldData().getCachedWorld().getLocationsOf(
Registry.BLOCK.getKey(block).getPath(),
@@ -55,13 +64,39 @@ public class FindCommand extends Command {
).stream()
)
.map(BetterBlockPos::new)
- .map(BetterBlockPos::toString)
- .forEach(this::logDirect);
+ .map(this::positionToComponent)
+ .toArray(ITextComponent[]::new);
+ if (components.length > 0) {
+ Arrays.asList(components).forEach(this::logDirect);
+ } else {
+ logDirect("No positions known, are you sure the blocks are cached?");
+ }
+ }
+
+ private ITextComponent positionToComponent(BetterBlockPos pos) {
+ String positionText = String.format("%s %s %s", pos.x, pos.y, pos.z);
+ String command = String.format("%sgoal %s", FORCE_COMMAND_PREFIX, positionText);
+ ITextComponent baseComponent = new TextComponentString(pos.toString());
+ ITextComponent hoverComponent = new TextComponentString("Click to set goal to this position");
+ baseComponent.getStyle()
+ .setColor(TextFormatting.GRAY)
+ .setInsertion(positionText)
+ .setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command))
+ .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent));
+ return baseComponent;
}
@Override
- public Stream tabComplete(String label, IArgConsumer args) {
- return args.tabCompleteDatatype(BlockById.INSTANCE);
+ public Stream tabComplete(String label, IArgConsumer args) throws CommandException {
+ return new TabCompleteHelper()
+ .append(
+ CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.stream()
+ .map(Registry.BLOCK::getNameForObject)
+ .map(Object::toString)
+ )
+ .filterPrefixNamespaced(args.getString())
+ .sortAlphabetically()
+ .stream();
}
@Override
@@ -73,9 +108,10 @@ public class FindCommand extends Command {
public List getLongDesc() {
return Arrays.asList(
"The find command searches through Baritone's cache and attempts to find the location of the block.",
+ "Tab completion will suggest only cached blocks and uncached blocks can not be found.",
"",
"Usage:",
- "> find - Find positions of a certain block"
+ "> find [...] - Try finding the listed blocks"
);
}
}
diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java
index 4d524870b..3d743771a 100644
--- a/src/main/java/baritone/pathing/path/PathExecutor.java
+++ b/src/main/java/baritone/pathing/path/PathExecutor.java
@@ -72,8 +72,8 @@ public class PathExecutor implements IPathExecutor, Helper {
private HashSet toPlace = new HashSet<>();
private HashSet toWalkInto = new HashSet<>();
- private PathingBehavior behavior;
- private IPlayerContext ctx;
+ private final PathingBehavior behavior;
+ private final IPlayerContext ctx;
private boolean sprintNextTick;
@@ -396,11 +396,20 @@ public class PathExecutor implements IPathExecutor, Helper {
return true;
}
if (canSprintFromDescendInto(ctx, current, next)) {
+
+ if (next instanceof MovementDescend && pathPosition < path.length() - 3) {
+ IMovement next_next = path.movements().get(pathPosition + 2);
+ if (next_next instanceof MovementDescend && !canSprintFromDescendInto(ctx, next, next_next)) {
+ return false;
+ }
+
+ }
if (ctx.playerFeet().equals(current.getDest())) {
pathPosition++;
onChangeInPathPosition();
onTick();
}
+
return true;
}
//logDebug("Turning off sprinting " + movement + " " + next + " " + movement.getDirection() + " " + next.getDirection().down() + " " + next.getDirection().down().equals(movement.getDirection()));
diff --git a/src/main/java/baritone/process/BackfillProcess.java b/src/main/java/baritone/process/BackfillProcess.java
index 490dc8745..eb96c4402 100644
--- a/src/main/java/baritone/process/BackfillProcess.java
+++ b/src/main/java/baritone/process/BackfillProcess.java
@@ -55,12 +55,12 @@ public final class BackfillProcess extends BaritoneProcessHelper {
Baritone.settings().backfill.value = false;
return false;
}
- amIBreakingABlockHMMMMMMM();
for (BlockPos pos : new ArrayList<>(blocksToReplace.keySet())) {
- if (ctx.world().getChunk(pos) instanceof EmptyChunk) {
+ if (ctx.world().getChunk(pos) instanceof EmptyChunk || ctx.world().getBlockState(pos).getBlock() != Blocks.AIR) {
blocksToReplace.remove(pos);
}
}
+ amIBreakingABlockHMMMMMMM();
baritone.getInputOverrideHandler().clearAllKeys();
return !toFillIn().isEmpty();
@@ -92,7 +92,7 @@ public final class BackfillProcess extends BaritoneProcessHelper {
}
private void amIBreakingABlockHMMMMMMM() {
- if (!ctx.getSelectedBlock().isPresent()) {
+ if (!ctx.getSelectedBlock().isPresent() || !baritone.getPathingBehavior().isPathing()) {
return;
}
blocksToReplace.put(ctx.getSelectedBlock().get(), ctx.world().getBlockState(ctx.getSelectedBlock().get()));
diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java
index ca61ab9a6..fa5a66ba9 100644
--- a/src/main/java/baritone/process/BuilderProcess.java
+++ b/src/main/java/baritone/process/BuilderProcess.java
@@ -26,9 +26,9 @@ import baritone.api.process.IBuilderProcess;
import baritone.api.process.PathingCommand;
import baritone.api.process.PathingCommandType;
import baritone.api.schematic.FillSchematic;
-import baritone.api.schematic.SubstituteSchematic;
import baritone.api.schematic.ISchematic;
import baritone.api.schematic.IStaticSchematic;
+import baritone.api.schematic.SubstituteSchematic;
import baritone.api.schematic.format.ISchematicFormat;
import baritone.api.utils.BetterBlockPos;
import baritone.api.utils.RayTraceUtils;
diff --git a/src/main/java/baritone/utils/accessor/INBTTagLongArray.java b/src/main/java/baritone/utils/accessor/INBTTagLongArray.java
new file mode 100644
index 000000000..fe4f0bd87
--- /dev/null
+++ b/src/main/java/baritone/utils/accessor/INBTTagLongArray.java
@@ -0,0 +1,27 @@
+/*
+ * This file is part of Baritone.
+ *
+ * Baritone is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Baritone is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Baritone. If not, see .
+ */
+
+package baritone.utils.accessor;
+
+/**
+ * @author rycbar
+ * @since 26.09.2022
+ */
+public interface INBTTagLongArray {
+
+ long[] getLongArray();
+}
\ No newline at end of file