Skip to content

UnionClef v0.20.6 (MC 1.21.1)

Choose a tag to compare

@3ndetz 3ndetz released this 21 Mar 06:14
· 3431 commits to main since this release

Installation

  1. Install Fabric Loader for the Minecraft version listed in the release title
  2. Drop the release JAR into your .minecraft/mods/ folder
  3. Launch Minecraft

No separate baritone install needed — everything is bundled.

Modules

UnionClef bundles three systems, each with its own command prefix:

Module Prefix What it does
Tungsten ; A* movement — precise physics-simulated pathfinding
Shredder # Block-level pathfinding (baritone fork, bridging, mining)
AltoCef @ High-level bot tasks (get items, kill mobs, survive)

Quick start commands

;goto <x> <y> <z>          — tungsten: walk/jump to coordinates
;followPlayer <nick>        — tungsten: follow a player
;stop                       — tungsten: stop current action
;settings debugTime true    — tungsten: enable profiling output

#goto <x> <y> <z>          — shredder: pathfind to coordinates
#stop                       — shredder: stop

@goto <x> <y> <z>          — altoclef: smart goto (avoids mobs, eats, etc.)

How to test

Tungsten (;prefix):
;goto <x> <y> <z>          — parkour routes, fences, ladders
;followPlayer <nick>        — follow a moving target
;settings                   — show all tungsten settings
;settings verboseDebug true — see position/velocity mismatches
;settings mismatchThreshold 0.05 — hide small precision noise
;settings reload            — reload tungsten.json

Shredder (#prefix):
#bridgingMode jump          — enable telly bridge (or back_jump)
#bridgingMode slow          — default safe bridging
#testBridging               — test bridging on current path

Changes

Tungsten: simulation accuracy overhaul

Bytecode-level comparison of tungsten Agent.tick() vs vanilla MC 1.21.1
Entity/LivingEntity/PlayerEntity. Fixed multiple sources of simulation
drift that caused path failures on parkour.

Simulation fixes (kept):

  • Velocity zeroing threshold: 1e-5 → 0.003 on X/Z (vanilla correct) —
    residual velocity after collisions was kept alive, accumulating drift
  • BlockPos flooring: (int) cast → MathHelper.floor() in 6 places —
    wrong block lookups at negative coordinates
  • Diagonal input normalize removed — vanilla normalizes in
    updateVelocity, not in KeyboardInput. Double normalize caused 29%
    diagonal speed mismatch, main source of mid-path drift
  • Fence/wall/gate friction: added getVelocityAffectingPos() matching
    vanilla's getPosWithYOffset() — correct friction on fences
  • fallDistance type: double → float (vanilla type)
  • Diagonal normalization (MC-271065, 1.21.4+) disabled for 1.21.1

Infrastructure:

  • Server teleport packets: no longer cancelled during execution —
    fixed deadlock where server waited for TeleportConfirmC2SPacket
  • Entity tracker updates: no longer cancelled during execution
  • ConcurrentModificationException: removed entity collision queries
    from pathfinder thread (not thread-safe, not needed for pathfinding)
  • IndexOutOfBoundsException: clamped NEXT_CLOSEST_BLOCKNODE_IDX
  • Path start resimulation: when executor receives path with stale
    start position, re-simulates inputs from real player state

Settings & debugging:

  • ;settings — shows all current values
  • ;settings reload — reloads tungsten.json without restart
  • ;settings airStrafe <multiplier> — air control tuning
  • ;settings mismatchThreshold <value> — filter verbose debug noise
  • ;settings closedLoop, ;settings parallelPath — experimental
  • Drift stop message in chat: shows drift distance, expected/actual pos
  • Aligned mismatch output (real/sim values vertically aligned)
  • Diagonal input speed mismatch suppressed at threshold >= 0.01

Follow improvements:

  • Target position snapped to nearest solid block below entity feet —
    fixes pathfinder searching for targets "in the air" (sneaking on edge)

Documentation:

  • MULTIVERSIONING.md: tungsten/shredder preprocessor TODO
  • Simulation audit archived in docs/ai/archive/

Shredder: jump bridge rewrite (experimental)

Rewrote jump bridging as sprint-speed telly bridge. Enable with
#bridgingMode jump (or back_jump for backward-facing variant).

  • Telly bridge cycle: FJ_SPRINT → FJ_AIRBORNE, continuous sprint-jump
    forward with backward snap rotation mid-air
  • Block placement bypasses crosshair (processRightClickBlock) —
    objectMouseOver returns MISS at steep pitch (86°+), so place directly
  • Sprint forced at entity level — no more losing sprint mid-bridge
  • TestBridgingCommand fix: GoalBlock at player Y instead of GoalXZ
    (pathfinder was descending instead of bridging forward)
  • Cooldown between bridge attempts, path-end graceful exit

Known simulation differences (not yet fixed)

  • airStrafingSpeed 0.06 vs vanilla 0.02/0.026 (3x air control) —
    pathfinder tuned for 0.06, changing breaks path quality
  • setSprinting movementSpeed recalc timing (1-tick mismatch on sprint
    toggle, ~0.007 blocks drift, negligible)

Known issues

  • Long parkour (30+ jumps): accumulated drift can still cause falls
    on the last jumps. Diagonal normalize fix significantly reduced this.
  • Stale start position: if pathfinder takes >1s, first few ticks may
    have wrong trajectory. Path resimulation mitigates this.
  • parallelPathfinding and closedLoop are experimental — keep disabled.

Full Changelog: v0.20.5...v0.20.6