diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 9900ef8e9..8609a0a88 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -385,6 +385,12 @@ public final class Settings { */ public final Setting blockReachDistance = new Setting<>(4.5f); + /** + * How many ticks between breaking a block and starting to break the next block. Default in game is 6 ticks. + * Values under 2 will be clamped. + */ + public final Setting blockBreakSpeed = new Setting<>(6); + /** * How many degrees to randomize the pitch and yaw every tick. Set to 0 to disable */ diff --git a/src/main/java/baritone/utils/BlockBreakHelper.java b/src/main/java/baritone/utils/BlockBreakHelper.java index 2d209c721..3332aec76 100644 --- a/src/main/java/baritone/utils/BlockBreakHelper.java +++ b/src/main/java/baritone/utils/BlockBreakHelper.java @@ -17,6 +17,7 @@ package baritone.utils; +import baritone.api.BaritoneAPI; import baritone.api.utils.IPlayerContext; import net.minecraft.world.InteractionHand; import net.minecraft.world.phys.BlockHitResult; @@ -27,9 +28,12 @@ import net.minecraft.world.phys.HitResult; * @since 8/25/2018 */ public final class BlockBreakHelper { + // base ticks between block breaks caused by tick logic + private static final int BASE_BREAK_DELAY = 2; private final IPlayerContext ctx; private boolean didBreakLastTick; + private int breakDelayTimer = 0; BlockBreakHelper(IPlayerContext ctx) { this.ctx = ctx; @@ -48,6 +52,10 @@ public final class BlockBreakHelper { } public void tick(boolean isLeftClick) { + if (breakDelayTimer > 0) { + breakDelayTimer--; + return; + } HitResult trace = ctx.objectMouseOver(); boolean isBlockTrace = trace != null && trace.getType() == HitResult.Type.BLOCK; @@ -68,6 +76,7 @@ public final class BlockBreakHelper { didBreakLastTick = true; } else if (didBreakLastTick) { stopBreakingBlock(); + breakDelayTimer = BaritoneAPI.getSettings().blockBreakSpeed.value - BASE_BREAK_DELAY; didBreakLastTick = false; } }