Merge pull request #1964 from ZacSharp/master

Fix MovementDiagonal being safeToCancel while cornering over air 2.0
This commit is contained in:
Leijurv 2020-08-24 16:20:01 -07:00 committed by GitHub
commit bf723deced
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 27 additions and 5 deletions

View File

@ -31,6 +31,7 @@ import baritone.utils.pathing.MutableMoveResult;
import com.google.common.collect.ImmutableSet;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.init.Blocks;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
@ -58,11 +59,32 @@ public class MovementDiagonal extends Movement {
@Override
protected boolean safeToCancel(MovementState state) {
return ctx.playerFeet().equals(src) || ((
MovementHelper.canWalkOn(ctx, new BlockPos(src.x, src.y - 1, dest.z))
) &&
MovementHelper.canWalkOn(ctx, new BlockPos(dest.x, src.y - 1, src.z)));
}
//too simple. backfill does not work after cornering with this
//return MovementHelper.canWalkOn(ctx, ctx.playerFeet().down());
EntityPlayerSP player = ctx.player();
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))){
return (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;
}
@Override
public double calculateCost(CalculationContext context) {