diff --git a/README.md b/README.md
index 26ff3b3b2..274dbe0f5 100644
--- a/README.md
+++ b/README.md
@@ -43,7 +43,7 @@ For 1.15.2, [click here](https://www.youtube.com/watch?v=j1qKtCZFURM) and see de
This project is an updated version of [MineBot](https://github.com/leijurv/MineBot/),
the original version of the bot for Minecraft 1.8.9, rebuilt for 1.12.2 through 1.15.2. Baritone focuses on reliability and particularly performance (it's over [30x faster](https://github.com/cabaletta/baritone/pull/180#issuecomment-423822928) than MineBot at calculating paths).
-Have committed at least once a day from Aug 1 2018 to Aug 1 2019.
+Have committed at least once a day from Aug 1, 2018, to Aug 1, 2019.
1Leijurv3DWTrGAfmmiTphjhXLvQiHg7K2
@@ -71,7 +71,7 @@ The API is heavily documented, you can find the Javadocs for the latest release
Please note that usage of anything located outside of the ``baritone.api`` package is not supported by the API release
jar.
-Below is an example of basic usage for changing some settings, and then pathing to a X/Z goal.
+Below is an example of basic usage for changing some settings, and then pathing to an X/Z goal.
```
BaritoneAPI.getSettings().allowSprint.value = true;
@@ -84,7 +84,7 @@ BaritoneAPI.getProvider().getPrimaryBaritone().getCustomGoalProcess().setGoalAnd
## Can I use Baritone as a library in my custom utility client?
-That's what it's for, sure! (As long as usage is in compliance with the LGPL 3.0 License)
+That's what it's for, sure! (As long as usage complies with the LGPL 3.0 License)
## How is it so fast?
diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java
index 55b5ca888..c5ba95bc2 100644
--- a/src/api/java/baritone/api/Settings.java
+++ b/src/api/java/baritone/api/Settings.java
@@ -64,7 +64,7 @@ public final class Settings {
/**
* Disable baritone's auto-tool at runtime, but still assume that another mod will provide auto tool functionality
*
- * Specifically, path calculation will still assume that an auto tool wil run at execution time, even though
+ * Specifically, path calculation will still assume that an auto tool will run at execution time, even though
* Baritone itself will not do that.
*/
public final Setting assumeExternalAutoTool = new Setting<>(false);
diff --git a/src/api/java/baritone/api/process/IBaritoneProcess.java b/src/api/java/baritone/api/process/IBaritoneProcess.java
index 726260d82..9c62d203d 100644
--- a/src/api/java/baritone/api/process/IBaritoneProcess.java
+++ b/src/api/java/baritone/api/process/IBaritoneProcess.java
@@ -75,7 +75,7 @@ public interface IBaritoneProcess {
* to start eating this tick. {@code PauseForAutoEatProcess} should only actually right click once onTick is called with
* {@code isSafeToCancel} true though.
*
- * @return Whethor or not if this control is temporary
+ * @return Whether or not if this control is temporary
*/
boolean isTemporary();
diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java
index 8ce3271b2..f746110e5 100644
--- a/src/api/java/baritone/api/utils/IPlayerContext.java
+++ b/src/api/java/baritone/api/utils/IPlayerContext.java
@@ -97,17 +97,4 @@ public interface IPlayerContext {
default boolean isLookingAt(BlockPos pos) {
return getSelectedBlock().equals(Optional.of(pos));
}
-
- /**
- * Returns the entity that the crosshair is currently placed over. Updated once per tick.
- *
- * @return The entity
- */
- default Optional getSelectedEntity() {
- RayTraceResult result = objectMouseOver();
- if (result != null && result.typeOfHit == RayTraceResult.Type.ENTITY) {
- return Optional.of(result.entityHit);
- }
- return Optional.empty();
- }
}
diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java
index 2631af840..b5ea19a9c 100644
--- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java
+++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java
@@ -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) {