diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 267fe782..cd3a0a80 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -107,6 +107,13 @@ public final class Settings { */ public final Setting walkOnWaterOnePenalty = new Setting<>(3D); + /** + * Don't allow breaking blocks next to liquids. + *

+ * Enable if you have mods adding custom fluid physics. + */ + public final Setting strictLiquidCheck = new Setting<>(false); + /** * Allow Baritone to fall arbitrary distances and place a water bucket beneath it. * Reliability: questionable. diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index dd0ddff4..d1cea8dc 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -77,7 +77,18 @@ public interface MovementHelper extends ActionCosts, Helper { && BlockFalling.canFallThrough(bsi.get0(x, y - 1, z))) { // and if it would fall (i.e. it's unsupported) return true; // dont break a block that is adjacent to unsupported gravel because it can cause really weird stuff } - return block instanceof BlockLiquid; + if (block instanceof BlockLiquid) { + if (directlyAbove || Baritone.settings().strictLiquidCheck.value) { + return true; + } + int level = state.getValue(BlockLiquid.LEVEL); + if (level == 0) { + return true; // source blocks like to flow horizontally + } + // everything else will prefer flowing down + return !(bsi.get0(x, y - 1, z).getBlock() instanceof BlockLiquid); // assume everything is in a static state + } + return false; } static boolean canWalkThrough(IPlayerContext ctx, BetterBlockPos pos) {