diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 98bcf7a3f..6374e7524 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -1399,6 +1399,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H public WalkOffCalculationContext(IBaritone baritone) { super(baritone, true); this.allowFallIntoLava = true; + this.minFallHeight = 8; this.maxFallHeightNoWater = 10000; } diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index 2e7db9946..75b6acd9b 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -71,6 +71,7 @@ public class CalculationContext { public final boolean allowDiagonalDescend; public final boolean allowDiagonalAscend; public final boolean allowDownward; + public int minFallHeight; public int maxFallHeightNoWater; public final int maxFallHeightBucket; public final double waterWalkSpeed; @@ -111,6 +112,7 @@ public class CalculationContext { this.allowDiagonalDescend = Baritone.settings().allowDiagonalDescend.value; this.allowDiagonalAscend = Baritone.settings().allowDiagonalAscend.value; this.allowDownward = Baritone.settings().allowDownward.value; + this.minFallHeight = 3; // Minimum fall height used by MovementFall this.maxFallHeightNoWater = Baritone.settings().maxFallHeightNoWater.value; this.maxFallHeightBucket = Baritone.settings().maxFallHeightBucket.value; int depth = EnchantmentHelper.getDepthStriderModifier(player); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index 51275bc00..032171fe9 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -154,10 +154,11 @@ public class MovementDescend extends Movement { // this check prevents it from getting the block at y=-1 and crashing return false; } + boolean reachedMinimum = fallHeight >= context.minFallHeight; IBlockState ontoBlock = context.get(destX, newY, destZ); int unprotectedFallHeight = fallHeight - (y - effectiveStartHeight); // equal to fallHeight - y + effectiveFallHeight, which is equal to -newY + effectiveFallHeight, which is equal to effectiveFallHeight - newY double tentativeCost = WALK_OFF_BLOCK_COST + FALL_N_BLOCKS_COST[unprotectedFallHeight] + frontBreak + costSoFar; - if (MovementHelper.isWater(ontoBlock.getBlock())) { + if (reachedMinimum && MovementHelper.isWater(ontoBlock.getBlock())) { if (!MovementHelper.canWalkThrough(context, destX, newY, destZ, ontoBlock)) { return false; } @@ -178,7 +179,7 @@ public class MovementDescend extends Movement { res.cost = tentativeCost;// TODO incorporate water swim up cost? return false; } - if (fallHeight >= 8 && context.allowFallIntoLava && MovementHelper.isLava(ontoBlock.getBlock())) { + if (reachedMinimum && context.allowFallIntoLava && MovementHelper.isLava(ontoBlock.getBlock())) { // found a fall into lava res.x = destX; res.y = newY; @@ -203,7 +204,7 @@ public class MovementDescend extends Movement { if (MovementHelper.isBottomSlab(ontoBlock)) { return false; // falling onto a half slab is really glitchy, and can cause more fall damage than we'd expect } - if (unprotectedFallHeight <= context.maxFallHeightNoWater + 1) { + if (reachedMinimum && unprotectedFallHeight <= context.maxFallHeightNoWater + 1) { // fallHeight = 4 means onto.up() is 3 blocks down, which is the max res.x = destX; res.y = newY + 1; @@ -211,7 +212,7 @@ public class MovementDescend extends Movement { res.cost = tentativeCost; return false; } - if (context.hasWaterBucket && unprotectedFallHeight <= context.maxFallHeightBucket + 1) { + if (reachedMinimum && context.hasWaterBucket && unprotectedFallHeight <= context.maxFallHeightBucket + 1) { res.x = destX; res.y = newY + 1;// this is the block we're falling onto, so dest is +1 res.z = destZ;