fixes to BlockBreakHelper
This commit is contained in:
parent
c74ccaafbf
commit
57b60c734b
@ -17,6 +17,9 @@
|
|||||||
|
|
||||||
package baritone.utils;
|
package baritone.utils;
|
||||||
|
|
||||||
|
import baritone.Baritone;
|
||||||
|
import baritone.api.BaritoneAPI;
|
||||||
|
import baritone.api.utils.IPlayerContext;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
@ -32,41 +35,62 @@ public final class BlockBreakHelper implements Helper {
|
|||||||
* The last block that we tried to break, if this value changes
|
* The last block that we tried to break, if this value changes
|
||||||
* between attempts, then we re-initialize the breaking process.
|
* between attempts, then we re-initialize the breaking process.
|
||||||
*/
|
*/
|
||||||
private static BlockPos lastBlock;
|
private BlockPos lastBlock;
|
||||||
private static boolean didBreakLastTick;
|
private boolean didBreakLastTick;
|
||||||
|
|
||||||
private BlockBreakHelper() {}
|
private IPlayerContext playerContext;
|
||||||
|
|
||||||
public static void tryBreakBlock(BlockPos pos, EnumFacing side) {
|
public BlockBreakHelper(IPlayerContext playerContext) {
|
||||||
if (!pos.equals(lastBlock)) {
|
this.playerContext = playerContext;
|
||||||
mc.playerController.clickBlock(pos, side);
|
|
||||||
}
|
}
|
||||||
if (mc.playerController.onPlayerDamageBlock(pos, side)) {
|
|
||||||
mc.player.swingArm(EnumHand.MAIN_HAND);
|
public void tryBreakBlock(BlockPos pos, EnumFacing side) {
|
||||||
|
if (!pos.equals(lastBlock)) {
|
||||||
|
playerContext.playerController().clickBlock(pos, side);
|
||||||
|
}
|
||||||
|
if (playerContext.playerController().onPlayerDamageBlock(pos, side)) {
|
||||||
|
playerContext.player().swingArm(EnumHand.MAIN_HAND);
|
||||||
}
|
}
|
||||||
lastBlock = pos;
|
lastBlock = pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void stopBreakingBlock() {
|
public void stopBreakingBlock() {
|
||||||
if (mc.playerController != null) {
|
if (playerContext.playerController() != null) {
|
||||||
mc.playerController.resetBlockRemoving();
|
playerContext.playerController().resetBlockRemoving();
|
||||||
}
|
}
|
||||||
lastBlock = null;
|
lastBlock = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean tick(boolean isLeftClick) {
|
private boolean fakeBreak() {
|
||||||
RayTraceResult trace = mc.objectMouseOver;
|
if (playerContext != BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext()) {
|
||||||
|
// for a non primary player, we need to fake break always, CLICK_LEFT has no effect
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!Baritone.settings().leftClickWorkaround.get()) {
|
||||||
|
// if this setting is false, we CLICK_LEFT regardless of gui status
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return mc.currentScreen != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean tick(boolean isLeftClick) {
|
||||||
|
if (!fakeBreak()) {
|
||||||
|
if (didBreakLastTick) {
|
||||||
|
stopBreakingBlock();
|
||||||
|
}
|
||||||
|
return isLeftClick;
|
||||||
|
}
|
||||||
|
|
||||||
|
RayTraceResult trace = mc.objectMouseOver; // TODO per-player objectMouseOver
|
||||||
boolean isBlockTrace = trace != null && trace.typeOfHit == RayTraceResult.Type.BLOCK;
|
boolean isBlockTrace = trace != null && trace.typeOfHit == RayTraceResult.Type.BLOCK;
|
||||||
|
|
||||||
// If we're forcing left click, we're in a gui screen, and we're looking
|
if (isLeftClick && isBlockTrace) {
|
||||||
// at a block, break the block without a direct game input manipulation.
|
|
||||||
if (mc.currentScreen != null && isLeftClick && isBlockTrace) {
|
|
||||||
tryBreakBlock(trace.getBlockPos(), trace.sideHit);
|
tryBreakBlock(trace.getBlockPos(), trace.sideHit);
|
||||||
didBreakLastTick = true;
|
didBreakLastTick = true;
|
||||||
} else if (didBreakLastTick) {
|
} else if (didBreakLastTick) {
|
||||||
stopBreakingBlock();
|
stopBreakingBlock();
|
||||||
didBreakLastTick = false;
|
didBreakLastTick = false;
|
||||||
}
|
}
|
||||||
return !didBreakLastTick && isLeftClick;
|
return false; // fakeBreak is true so no matter what we aren't forcing CLICK_LEFT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,8 +43,11 @@ public final class InputOverrideHandler extends Behavior implements IInputOverri
|
|||||||
*/
|
*/
|
||||||
private final Map<Input, Boolean> inputForceStateMap = new HashMap<>();
|
private final Map<Input, Boolean> inputForceStateMap = new HashMap<>();
|
||||||
|
|
||||||
|
private final BlockBreakHelper blockBreakHelper;
|
||||||
|
|
||||||
public InputOverrideHandler(Baritone baritone) {
|
public InputOverrideHandler(Baritone baritone) {
|
||||||
super(baritone);
|
super(baritone);
|
||||||
|
this.blockBreakHelper = new BlockBreakHelper(baritone.getPlayerContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -109,9 +112,7 @@ public final class InputOverrideHandler extends Behavior implements IInputOverri
|
|||||||
if (event.getType() == TickEvent.Type.OUT) {
|
if (event.getType() == TickEvent.Type.OUT) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Baritone.settings().leftClickWorkaround.get()) {
|
boolean stillClick = blockBreakHelper.tick(isInputForcedDown(Input.CLICK_LEFT.getKeyBinding()));
|
||||||
boolean stillClick = BlockBreakHelper.tick(isInputForcedDown(Input.CLICK_LEFT.getKeyBinding()));
|
|
||||||
setInputForceState(Input.CLICK_LEFT, stillClick);
|
setInputForceState(Input.CLICK_LEFT, stillClick);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user