- MoveParkour: replace full-rectangle intermediate check with diagonal
strip check (CheckFlightPath) so walls outside the actual flight
corridor no longer block valid parkour jumps.
- MoveParkour: require both cardinal neighbors passable for diagonal
parkour takeoff; a wall on either side clips the AABB and prevents
reaching the target.
- MoveSprintDescend: replace full-rectangle check with explicit
per-axis intermediate column check.
- SprintJumpTemplate: track diagonal jumps and skip approach delay for
short diagonal jumps to avoid overshooting small starting platforms.
Made-with: Cursor
- MoveDiagonal: allow single-side-blocked diagonals (corner walk) so
the bot can hug an open side to cut around a wall; both-sides-blocked
remains impossible. Walk-speed cost when one side is blocked.
- MoveSprintDescend: sprint off a ledge covering 2 horizontal blocks
while dropping 1-3 blocks. Registered for cardinal and diagonal
offsets.
- MoveParkour: support negative yDelta (-1, -2) for descending parkour
where the bot sprint-jumps across a gap and lands on a lower
platform. Registered cardinal (dist 2-4, y-1/-2) and diagonal
variants.
- DescendTemplate: sprint when horizontal distance > 1.5 blocks.
- SprintJumpTemplate: increase vertical landing tolerance for descend.
Made-with: Cursor
- Add MoveDiagonalAscend and MoveDiagonalDescend for "corner" moves:
step diagonally around a wall edge while ascending/descending 1 block.
Requires at least one intermediate cardinal direction to be passable.
- Fix pitch calculation: look toward target's eye level (same height
delta as feet delta) instead of subtracting eye height, which caused
the player to stare at the ground during flat walks.
- Add Yaw/Pitch smoothing via SmoothYaw/SmoothPitch in TemplateHelper.
Max 35 deg/tick for yaw, 25 deg/tick for pitch. Prevents instant
camera snaps between path segments while still being responsive
enough for sprint-jumps and tight maneuvers.
- Apply smoothing to all five action templates (Walk, Ascend, Descend,
Climb, SprintJump).
Made-with: Cursor
- WalkTemplate: remove OnClimbable jump/sprint logic that caused the
player to jump when walking past vine blocks during flat traversal
- TemplateHelper: add CalculatePitch() for computing the look angle
toward a 3D target relative to eye height
- All templates (Walk, Ascend, Descend, Climb, SprintJump): set
physics.Pitch each tick so the player visually looks toward the
current path target direction
- McClient: sync playerPitch and set _yaw/_pitch after pathfinding
ticks so rotation is included in position update packets sent to
the server
Made-with: Cursor
- ClimbTemplate: add explicit descent handling with horizontal drift
correction instead of relying on no-input gravity alone
- DescendTemplate: on climbable blocks, suppress Forward input to
prevent HorizontalCollision-triggered upward bumps, allowing gravity
to slide the player down naturally
- MoveClimb: restrict climb-up past the top of a climbable column --
only allow if there is solid ground to stand on at destination,
preventing impossible vine-top exits where the player would fall back
Made-with: Cursor
WalkTemplate now detects when physics.OnClimbable is true (player entering
a ladder/vine block) and switches from Sprint to Jump input, with extended
stuck detection thresholds. This prevents the template from failing when
the path walks through climbable blocks.
Tested on 1.21.11: all movement types pass (walk, diagonal, ascend, descend,
climb, parkour 2-4 gap, mixed courses with direction changes).
Made-with: Cursor
MoveParkour rewritten to support both cardinal and diagonal sprint jumps
with unified (xOff, zOff) interface. New capabilities:
- 4-block cardinal sprint jumps with edge-approach timing in template
- Diagonal parkour: (2,1), (1,2), (2,2), (3,1), (1,3) in all quadrants
- Ascending parkour extended to dist=3 (cardinal)
- Overshoot safety check after landing destination
- Block parkour from climbable starting blocks (vine/ladder)
MoveDescend/MoveFall enhanced with Baritone-style dynamic fall scanning:
- Water landing: accepts falls of any height into water
- Mid-fall ladder/vine grab: resets effective fall height (<=11 blocks)
- CalculationContext gains MaxFallHeightWater, AllowLadderGrabDuringFall
SprintJumpTemplate gains distance-based approach timing:
- Long jumps (>=3.5 blocks): delays jump until 0.5 blocks from center
- Medium jumps (>=2.5): 0.35 blocks approach
- Landing tolerance scales with jump distance
All movements verified on 1.21.11 local server.
Made-with: Cursor
Templates now set Forward/Sprint input before checking completion
conditions. This prevents a 1-tick input gap during template transitions
that caused the player to lose sprint speed, making parkour jumps fail
due to insufficient horizontal velocity.
Made-with: Cursor
Two bugs in CollisionDetector caused persistent Y-axis bouncing (0.6 block
oscillation) while walking on flat ground:
1. GetAxisStepOrder used a complex 6-branch sorting that often placed
horizontal axes before Y. Vanilla's Direction.Axis.axisStepOrder always
resolves Y first, then the larger horizontal axis. Replaced with the
simple two-case vanilla logic.
2. The horizontal-blocked checks (blockedX/blockedZ) used exact != which
triggered on floating-point noise (~1e-15) from sin/cos in movement
input. Vanilla uses Mth.equal (1e-5 threshold). This false positive
caused step-up to fire every few ticks on flat terrain.
Also includes DescendTemplate robustness fixes from the previous session
(fail on unintended climbing, suppress forward input on climbable blocks).
Made-with: Cursor
Phase 2.2: MoveParkour for sprint-jump across 1-2 block gaps (distance 2-3)
and ascending parkour (distance 2, +1Y). Registered in BuildDefaultMoves
with CalculationContext.AllowParkour gating.
Phase 3.1-3.2: Template execution engine replacing the waypoint queue system.
- IActionTemplate interface with per-tick state machine pattern
- Templates: Walk, Ascend, Descend, Climb, Fall, SprintJump
- ActionTemplateFactory maps MoveType to the correct template
- PathExecutor drives sequential template execution with logging
- PathSegmentManager handles replanning on failure (up to 5 retries)
- McClient integration: MoveToAStar now creates PathSegmentManager,
UpdatePathfindingInput delegates to it, CancelMovement/ClientIsMoving
updated for both old and new systems.
Tested on 1.21.11: straight walk, zigzag maze, stair ascent,
1-gap and 2-gap sprint jumps all pass.
Made-with: Cursor
Refactor movement tick into AdvanceWaypoint(), add look-ahead logic that
detects vertical-only waypoints and merges to the next horizontal waypoint
early to handle ladder-to-platform transitions, and add jump input when
horizontally aligned but needing to reach a higher Y level.
Made-with: Cursor
- Fix MoveHelper.CanWalkThrough to treat climbable blocks (ladders, vines)
as passable, not solid -- MCC's IsSolid() incorrectly classifies them
- Fix MoveHelper.CanWalkOn to exclude climbable blocks from ground check
- Add fence gate passability in MoveHelper
- Fix start position calculation in MoveToAStar to handle solid-block
floor rounding (player at y=79.9 → floor y=79 inside solid)
- Fix ReachedWaypoint to require vertical proximity for climb waypoints,
preventing premature waypoint consumption during ladder ascent
- Fix SetInputToward to handle ladder climbing with Jump input and proper
wall-facing when OnClimbable
Made-with: Cursor
The X and Z fields shared bit 36, causing nodes like (1,80,0)
and (0,80,0) to hash to the same value. Fixed by using proper
non-overlapping bit allocation: X in bits 38-63, Z in bits 12-37,
Y in bits 0-11. Added diagnostic logging to pathfind command.
Made-with: Cursor
Implements the new Baritone-inspired A* pathfinding system:
- Core types: PathNode, PathResult, MoveResult, MoveType, ActionCosts
- BinaryHeapOpenSet min-heap for A* open set
- AStarPathFinder with timeout, cancellation, partial path support
- CalculationContext for thread-safe world state snapshots
- MoveHelper for block passability checks
- IGoal interface + GoalBlock, GoalXZ, GoalNear, GoalComposite
- IMove interface + MoveTraverse, MoveDiagonal, MoveAscend, MoveDescend, MoveClimb
- /pathfind command for testing the new pathfinder
Made-with: Cursor
Implement the three Phase 0 prerequisites for the pathfinding rewrite:
- Pose system (vanilla Player.updatePlayerPose): dynamic AABB height based
on current pose -- Standing (1.8), Sneaking (1.5), Swimming/Crawling (0.6).
Automatically downgrades pose when headroom is insufficient (Standing ->
Sneaking -> Swimming), matching vanilla 1.14+ forced-crawl behavior.
- Slime block bounce (vanilla SlimeBlock.bounceUp / stepOn): reverses
downward velocity on landing, with sneaking suppression via
isSuppressingBounce(). Also applies the horizontal slowdown effect
from SlimeBlock.stepOn when walking on slime with low vertical velocity.
- Per-pose dimension constants in PhysicsConsts with eye heights for each
pose, sourced from vanilla Avatar.POSES (26.1 decompiled).
- Debug logging for pose transitions, slime bounces, and periodic physics
state dumps routed through McClient's ILogger.
Tested on a real 1.21.11 server: crawling triggers correctly under 1-block
ceilings, sneaking under 1.5-block ceilings, slime bounce produces correct
decaying oscillation, and pose recovery works when obstacles are removed.
Made-with: Cursor