Описание
A tiny NeoForge 1.21.1 mod for Sable that keeps you moving with a contraption while you jump, so you land where you took off — including on rotating platforms.
| What | Side | How |
| --- | --- | --- |
| **You** (jumping, walking) | Client | Carry through jump arcs + frame-rotate velocity |
| **Non-player entities** (item drops, XP orbs, mobs, boats…) | Server | Same carry state machine, plus tracking is seeded when an entity spawns over a contraption (dropped items pop upward and would otherwise never catch a fast deck). Projectiles are excluded — Sable already gives them launch velocity, and frame-locking would bend their flight. |
| **Particles** (smoke, flames, block breaking…) | Client | Sable frame-locks particles but releases them after 0.5 blocks of drift with a one-shot linear velocity — rising smoke gets flung tangentially. We re-anchor tracked particles every tick while they stay near the contraption. |
On a server without the mod, the player and particle fixes still work for clients that have it; the entity fix needs the mod on the server.
## Config (`config/surefooting-client.toml`)
| Option | Default | Meaning |
| --- | --- | --- |
| `enabled` | `true` | Toggle the fix |
| `rotate_jump_velocity` | `true` | Rotate your airborne velocity with the sub-level's frame, so a jump aimed across a spinning platform lands where you aimed |
| `rotate_ground_velocity` | `true` | Rotate your walking momentum with the frame too, cancelling most of the sideways (Coriolis-like) pull when moving on a fast spinner |
| `jump_rotation_strength` | `1.16` | Multiplier on the airborne rotation; 1.0 aligns to the frame but trails it slightly while your velocity is applied, values above add lead so cross-jumps stay accurate at any constant spin rate (default tuned in-game) |
| `ground_rotation_strength` | `2.25` | Multiplier on the grounded rotation; higher values also compensate per-step lag on fast spinners (tuned in-game — 2.2–2.3 walks straight), lower toward 1.0 if you curl into the spin |
| `carry_timeout_ticks` | `60` | Max airborne ticks to stay in the contraption's frame |
| `exit_distance_blocks` | `4.0` | Stop carrying once this far outside the sub-level's bounds |
| `anchor_particles` | `true` | Keep particles anchored to the contraption they spawned on while they stay near it |
| `debug_logging` | `false` | Log carry transitions and per-jump landing offsets |