improve isSafeToCancel in MovementDiagonal even more

It did not return true early enough for backfill while cornering over air
This commit is contained in:
ZacSharp 2020-08-20 22:40:16 +02:00
parent 4eea8308d7
commit 5f686c1c12

View File

@ -31,6 +31,7 @@ import baritone.utils.pathing.MutableMoveResult;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.init.Blocks; import net.minecraft.init.Blocks;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@ -58,11 +59,34 @@ public class MovementDiagonal extends Movement {
@Override @Override
protected boolean safeToCancel(MovementState state) { protected boolean safeToCancel(MovementState state) {
return ctx.playerFeet().equals(src) || (( //too simple. backfill does not work after cornering with this
MovementHelper.canWalkOn(ctx, new BlockPos(src.x, src.y - 1, dest.z)) //return MovementHelper.canWalkOn(ctx, ctx.playerFeet().down());
) && EntityPlayerSP player = ctx.player();
MovementHelper.canWalkOn(ctx, new BlockPos(dest.x, src.y - 1, src.z))); double offset = 0.25;
} double x = player.posX;
double y = player.posY - 1;
double z = player.posZ;
//standard
if (ctx.playerFeet().equals(src)){
return true;
}
//both corners are walkable
if (MovementHelper.canWalkOn(ctx, new BlockPos(src.x, src.y - 1, dest.z))
&& MovementHelper.canWalkOn(ctx, new BlockPos(dest.x, src.y - 1, src.z))){
return true;
}
//we are in a likely unwalkable corner, check for a supporting block
if (ctx.playerFeet().equals(new BetterBlockPos(src.x, src.y, dest.z))
|| ctx.playerFeet().equals(new BetterBlockPos(dest.x, src.y, src.z))){
if (MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z + offset))
|| MovementHelper.canWalkOn(ctx, new BetterBlockPos(x + offset, y, z - offset))
|| MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z + offset))
|| MovementHelper.canWalkOn(ctx, new BetterBlockPos(x - offset, y, z - offset))){
return true;
}
}
return false;
}
@Override @Override
public double calculateCost(CalculationContext context) { public double calculateCost(CalculationContext context) {