From a2a6769742d87235466d2a9d3014fe531d4728cd Mon Sep 17 00:00:00 2001 From: Murat65536 Date: Sat, 23 Aug 2025 20:25:16 -0400 Subject: [PATCH] Round yaw to 45 degrees when bridging. --- .../pathing/movement/MovementHelper.java | 35 ++++++++++--------- .../pathing/movement/MovementOption.java | 15 ++++++++ .../movement/movements/MovementTraverse.java | 1 + 3 files changed, 34 insertions(+), 17 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 89f61659c..6e82172c5 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -661,27 +661,28 @@ public interface MovementHelper extends ActionCosts, Helper { } static void moveTowardsWithoutRotation(IPlayerContext ctx, MovementState state, BlockPos dest) { - float ax = Mth.sin(ctx.playerRotations().getYaw() * DEG_TO_RAD_F); - float az = Mth.cos(ctx.playerRotations().getYaw() * DEG_TO_RAD_F); - Rotation blockRotation = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), + float idealYaw = RotationUtils.calcRotationFromVec3d( + ctx.playerHead(), VecUtils.getBlockPosCenter(dest), - ctx.playerRotations()); - boolean canSprint = Baritone.settings().allowSprint.value; - Arrays.stream(new MovementOption[]{ - new MovementOption(Input.MOVE_FORWARD, canSprint ? ax * 1.3f : ax, canSprint ? az * 1.3f : az), - new MovementOption(Input.MOVE_BACK, -ax, -az), - new MovementOption(Input.MOVE_LEFT, -az, ax), - new MovementOption(Input.MOVE_RIGHT, az, -ax), - new MovementOption(Input.MOVE_FORWARD, Input.MOVE_LEFT, (canSprint ? ax * 1.3f : ax) - az, (canSprint ? az * 1.3f : az) + ax), - new MovementOption(Input.MOVE_FORWARD, Input.MOVE_RIGHT, (canSprint ? ax * 1.3f : ax) + az, (canSprint ? az * 1.3f : az) - ax), - new MovementOption(Input.MOVE_BACK, Input.MOVE_LEFT, -ax - az, -az + ax), - new MovementOption(Input.MOVE_BACK, Input.MOVE_RIGHT, -ax + az, -az - ax), - }).min(Comparator.comparing(option -> option.distanceToSq( - Mth.sin(blockRotation.getYaw() * DEG_TO_RAD_F), - Mth.cos(blockRotation.getYaw() * DEG_TO_RAD_F) + ctx.playerRotations() + ).getYaw(); + MovementOption.getOptions( + Mth.sin(ctx.playerRotations().getYaw() * DEG_TO_RAD_F), + Mth.cos(ctx.playerRotations().getYaw() * DEG_TO_RAD_F), + Baritone.settings().allowSprint.value + ).min(Comparator.comparing(option -> option.distanceToSq( + Mth.sin(idealYaw * DEG_TO_RAD_F), + Mth.cos(idealYaw * DEG_TO_RAD_F) ))).ifPresent(selection -> selection.setInputs(state)); } + static void roundYaw(IPlayerContext ctx, MovementState state) { + state.setTarget(new MovementTarget(new Rotation( + Math.round(ctx.playerRotations().getYaw() / 45f) * 45f, + ctx.playerRotations().getPitch() + ), true)); + } + /** * Returns whether or not the specified block is * water, regardless of whether or not it is flowing. diff --git a/src/main/java/baritone/pathing/movement/MovementOption.java b/src/main/java/baritone/pathing/movement/MovementOption.java index a63cb0d52..22b8a7e25 100644 --- a/src/main/java/baritone/pathing/movement/MovementOption.java +++ b/src/main/java/baritone/pathing/movement/MovementOption.java @@ -20,6 +20,8 @@ package baritone.pathing.movement; import baritone.api.utils.input.Input; import net.minecraft.util.Mth; +import java.util.stream.Stream; + public record MovementOption(Input input1, Input input2, float motionX, float motionZ) { public MovementOption(Input input1, float motionX, float motionZ) { @@ -38,4 +40,17 @@ public record MovementOption(Input input1, Input input2, float motionX, float mo public float distanceToSq(float otherX, float otherZ) { return Mth.abs(motionX() - otherX) + Mth.abs(motionZ() - otherZ); } + + public static Stream getOptions(float motionX, float motionZ, boolean canSprint) { + return Stream.of( + new MovementOption(Input.MOVE_FORWARD, canSprint ? motionX * 1.3f : motionX, canSprint ? motionZ * 1.3f : motionZ), + new MovementOption(Input.MOVE_BACK, -motionX, -motionZ), + new MovementOption(Input.MOVE_LEFT, -motionZ, motionX), + new MovementOption(Input.MOVE_RIGHT, motionZ, -motionX), + new MovementOption(Input.MOVE_FORWARD, Input.MOVE_LEFT, (canSprint ? motionX * 1.3f : motionX) - motionZ, (canSprint ? motionZ * 1.3f : motionZ) + motionX), + new MovementOption(Input.MOVE_FORWARD, Input.MOVE_RIGHT, (canSprint ? motionX * 1.3f : motionX) + motionZ, (canSprint ? motionZ * 1.3f : motionZ) - motionX), + new MovementOption(Input.MOVE_BACK, Input.MOVE_LEFT, -motionX - motionZ, -motionZ + motionX), + new MovementOption(Input.MOVE_BACK, Input.MOVE_RIGHT, -motionX + motionZ, -motionZ - motionX) + ); + } } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 1e2dc8457..e1d7571d8 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -356,6 +356,7 @@ public class MovementTraverse extends Movement { } return state; } + MovementHelper.roundYaw(ctx, state); MovementHelper.moveTowardsWithoutRotation(ctx, state, dest); return state; }