diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index 0eabe84c3..5643db97b 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -90,6 +90,10 @@ public final class InventoryBehavior extends Behavior implements Helper { } } + private InventorySlot bestToolAgainst(final Block against, final Class cla$$) { + return new ToolSet(ctx).getBestSlot(against.getDefaultState(), Baritone.settings().preferSilkTouch.value, stack -> cla$$.isInstance(stack.getItem())); + } + public boolean attemptToPutOnHotbar(int inMainInvy, IntPredicate disallowedHotbar) { OptionalInt destination = getTempHotbarSlot(disallowedHotbar); if (destination.isPresent()) { @@ -137,25 +141,6 @@ public final class InventoryBehavior extends Behavior implements Helper { return true; } - private InventorySlot bestToolAgainst(final Block against, final Class cla$$) { - // TODO: Replace with ToolSet.getBestSlot - return this.findBestSlotMatching( - Comparator.comparingDouble(stack -> ToolSet.calculateSpeedVsBlock(stack, against.getDefaultState())), - stack -> { - if (stack.isEmpty()) { - return false; - } - if (Baritone.settings().itemSaver.value - && stack.getItemDamage() + Baritone.settings().itemSaverThreshold.value >= stack.getMaxDamage() - && stack.getMaxDamage() > 1 - ) { - return false; - } - return cla$$.isInstance(stack.getItem()); - } - ); - } - public boolean hasGenericThrowaway() { return this.canSelectItem(this::isThrowawayItem); } diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 63abf3a59..f9e49f657 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -581,20 +581,9 @@ public interface MovementHelper extends ActionCosts, Helper { * @param state The blockstate to mine */ static void switchToBestToolFor(IPlayerContext ctx, IBlockState state) { - switchToBestToolFor(ctx, state, new ToolSet(ctx), Baritone.settings().preferSilkTouch.value); - } - - /** - * AutoTool for a specific block with precomputed ToolSet data - * - * @param ctx The player context - * @param state The blockstate to mine - * @param ts Previously calculated ToolSet - */ - static void switchToBestToolFor(IPlayerContext ctx, IBlockState state, ToolSet ts, boolean preferSilkTouch) { if (ToolSet.isAutoTool()) { // TODO: Submit through InventoryBehavior, instead of executing the strategy here - final InventorySlot slot = ts.getBestSlot(state, preferSilkTouch); + final InventorySlot slot = new ToolSet(ctx).getBestSlot(state, Baritone.settings().preferSilkTouch.value, null); final InventoryBehavior.SelectionStrategy strategy = ((Baritone) ctx.baritone()).getInventoryBehavior().resolveSelectionStrategy(slot); if (strategy != null) { strategy.run(); diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index cb2796d4a..128c0a4db 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -33,6 +33,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSword; import java.util.Comparator; +import java.util.function.Predicate; import java.util.function.ToDoubleFunction; /** @@ -86,7 +87,7 @@ public final class ToolSet { */ private double getBestDestructionSpeed(IBlockState state) { final ItemStack stack = isAutoTool() - ? ctx.inventory().itemAt(this.getBestSlot(state, false)) + ? ctx.inventory().itemAt(this.getBestSlot(state, false, null)) : ctx.player().getHeldItemMainhand(); return calculateSpeedVsBlock(stack, state) * avoidanceMultiplier(state.getBlock()); } @@ -113,9 +114,11 @@ public final class ToolSet { * * @param state the blockstate to be mined * @param preferSilkTouch whether to prefer silk touch tools + * @param extra An additional filter to apply on top of the default, setting-based ones, may be {@code null} * @return An int containing the index in the tools array that worked best */ - public InventorySlot getBestSlot(IBlockState state, boolean preferSilkTouch) { + public InventorySlot getBestSlot(final IBlockState state, final boolean preferSilkTouch, + final Predicate extra) { final Comparator compare = Comparator // Prioritize mining speed over everything .comparingDouble(stack -> calculateSpeedVsBlock(stack, state)) @@ -136,7 +139,7 @@ public final class ToolSet { ) { return false; } - return true; + return extra == null || extra.test(stack); } ); }