mirror of https://github.com/cabaletta/baritone
Utilize ToolSet for hotbar management's `bestToolAgainst`
This commit is contained in:
parent
dbf5058066
commit
6a6d0642be
|
@ -90,6 +90,10 @@ public final class InventoryBehavior extends Behavior implements Helper {
|
|||
}
|
||||
}
|
||||
|
||||
private InventorySlot bestToolAgainst(final Block against, final Class<? extends ItemTool> 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<? extends ItemTool> 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);
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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<? super ItemStack> extra) {
|
||||
final Comparator<ItemStack> compare = Comparator
|
||||
// Prioritize mining speed over everything
|
||||
.<ItemStack>comparingDouble(stack -> calculateSpeedVsBlock(stack, state))
|
||||
|
@ -136,7 +139,7 @@ public final class ToolSet {
|
|||
) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
return extra == null || extra.test(stack);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue