Skip to content

About

Add pathfinding to Xaero's minimap

Resources

Stars

0 stars

Watchers

0 watching

Forks

 
 

Latest commit

 

History

457 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

XaeroNav

English | 日本語

A client-side Minecraft mod that finds a route you can actually walk to a destination, then draws it in the world, on Xaero's World Map, and on Xaero's Minimap. The top of the screen tells you where to go next.

  • Minecraft 26.3, on Forge 66.0.9+ or Fabric (Fabric Loader 0.19.0+ and Fabric API 0.161.0+)
  • Minecraft 26.2, on NeoForge 26.2.0.88+, Forge 65.1.3+, or Fabric (Fabric Loader 0.19.0+ and Fabric API 0.161.0+)
  • Minecraft 26.1.2, on NeoForge 26.1.2.112+, Forge 64.1.3+, or Fabric (Fabric Loader 0.19.0+ and Fabric API 0.155.3+). The Fabric jar also runs on Minecraft 26.1 and 26.1.1
  • Minecraft 1.21.11, on NeoForge 21.11.45+, Forge 61.2.1+, or Fabric (Fabric Loader 0.17.3+ and Fabric API 0.141.6+)
  • Minecraft 1.21.10, on NeoForge 21.10.64+, Forge 60.1.15+, or Fabric (Fabric Loader 0.17.0+ and Fabric API 0.138.4+). The Fabric jar also runs on Minecraft 1.21.9 (Fabric API 0.134.1+)
  • Minecraft 1.21.8, on NeoForge 21.8.54+, Forge 58.1.22+, or Fabric (Fabric Loader 0.16.13+ and Fabric API 0.136.1+). The Fabric jar also runs on Minecraft 1.21.6 and 1.21.7 (Fabric API 0.128.2+)
  • Minecraft 1.21.5, on NeoForge 21.5+, Forge 55.0.24+, or Fabric (Fabric Loader 0.16.10+ and Fabric API 0.128.2+)
  • Minecraft 1.21.4, on NeoForge 21.4+, Forge 54.1.5+, or Fabric (Fabric Loader 0.16.9+ and Fabric API 0.119.4+)
  • Minecraft 1.21.3, on NeoForge 21.3+, Forge 53.1.2+, or Fabric (Fabric Loader 0.15.11+ and Fabric API 0.114.1+)
  • Minecraft 1.21.1, on NeoForge 21.1.228+, Forge 52.1.16+, or Fabric (Fabric Loader 0.15.11+ and Fabric API 0.102.0+). The NeoForge and Fabric jars also run on Minecraft 1.21, with NeoForge 21.0+ or Fabric API 0.102.0+
  • Minecraft 1.20.6, on NeoForge 20.6+, Forge 50.2.1+, or Fabric (Fabric Loader 0.15.11+ and Fabric API 0.100.8+). The Fabric jar also runs on Minecraft 1.20.5 (Fabric API 0.97.8+)
  • Minecraft 1.20.4, on NeoForge 20.4+, Forge 49.1.10+, or Fabric (Fabric Loader 0.15.11+ and Fabric API 0.97.3+). The Fabric jar also runs on Minecraft 1.20.3 (Fabric API 0.91.1+)
  • Minecraft 1.20.2, on Forge 48+ or Fabric (Fabric Loader 0.15.11+ and Fabric API 0.91.6+)
  • Minecraft 1.20.1, on Forge 47.4.23+ or Fabric (Fabric Loader 0.15.11+ and Fabric API). The jars also run on Minecraft 1.20, with Forge 46+ or Fabric API 0.83.0+
  • Minecraft 1.19.2, on Forge 43+ or Fabric (Fabric Loader 0.15.11+ and Fabric API 0.77.0+)
  • Minecraft 1.18.2, on Forge 40+ or Fabric (Fabric Loader 0.15.11+ and Fabric API 0.77.0+)
  • Minecraft 1.16.5, on Forge 36.2.39+ or Fabric (Fabric Loader 0.15.11+ and Fabric API 0.42.0+). Runs on Java 8
  • A Java heap of at least 2 GB, the official launcher's default. Below 2.5 GB the navigation graph covers a smaller area (see Known limitations)
  • Client-only. Nothing to install on the server. If the Forge jar is accidentally placed in a dedicated server's mods folder, it has no server-side feature and does not block startup.
  • MIT licensed

How routing works → A walkthrough of how the route is found and kept up to date, from the coarse map down to each step.

Contributor-facing design contracts are collected in the architecture decision records.

This is still a 0.x release, and routing is the part still worth stress-testing. If a route detours, stops short, never appears, or sends you somewhere you cannot follow, run /xaeronav debug probe <x> <y> <z> where it happens and open an issue with that output — it says what the search reached and why it stopped, which is usually enough to reproduce the problem here.

Route drawn on Xaero's World Map

Installation

  1. Install a loader:
    • Minecraft 26.3: Forge 66.0.9 or newer, or Fabric with Fabric Loader 0.19.0 or newer plus Fabric API 0.161.0 or newer.
    • Minecraft 26.2: NeoForge 26.2.0.88 or newer, Forge 65.1.3 or newer, or Fabric with Fabric Loader 0.19.0 or newer plus Fabric API 0.161.0 or newer.
    • Minecraft 26.1.2: NeoForge 26.1.2.112 or newer, Forge 64.1.3 or newer, or Fabric with Fabric Loader 0.19.0 or newer plus Fabric API 0.155.3 or newer. The Fabric jar also runs on Minecraft 26.1 and 26.1.1.
    • Minecraft 1.21.11: NeoForge 21.11.45 or newer, Forge 61.2.1 or newer, or Fabric with Fabric Loader 0.17.3 or newer plus Fabric API 0.141.6 or newer.
    • Minecraft 1.21.10: NeoForge 21.10.64 or newer, Forge 60.1.15 or newer, or Fabric with Fabric Loader 0.17.0 or newer plus Fabric API 0.138.4 or newer. The Fabric jar also runs on Minecraft 1.21.9, with Fabric API 0.134.1 or newer.
    • Minecraft 1.21.8: NeoForge 21.8.54 or newer, Forge 58.1.22 or newer, or Fabric with Fabric Loader 0.16.13 or newer plus Fabric API 0.136.1 or newer. The Fabric jar also runs on Minecraft 1.21.6 and 1.21.7, with Fabric API 0.128.2 or newer.
    • Minecraft 1.21.5: NeoForge 21.5 or newer, Forge 55 or newer, or Fabric with Fabric Loader 0.16.10 or newer plus Fabric API 0.128.2 or newer.
    • Minecraft 1.21.4: NeoForge 21.4 or newer, Forge 54.1.5 or newer, or Fabric with Fabric Loader 0.16.9 or newer plus Fabric API 0.119.4 or newer.
    • Minecraft 1.21.3: NeoForge 21.3 or newer, Forge 53.1.2 or newer, or Fabric with Fabric Loader 0.15.11 or newer plus Fabric API 0.114.1 or newer.
    • Minecraft 1.21.1: NeoForge 21.1.228 or newer, Forge 52.1.16 or newer, or Fabric with Fabric Loader 0.15.11 or newer plus Fabric API 0.102.0 or newer. The NeoForge and Fabric jars also run on Minecraft 1.21.
    • Minecraft 1.20.6: NeoForge 20.6 or newer, Forge 50.2.1 or newer, or Fabric with Fabric Loader 0.15.11 or newer plus Fabric API 0.100.8 or newer. The Fabric jar also runs on Minecraft 1.20.5, with Fabric API 0.97.8 or newer.
    • Minecraft 1.20.4: NeoForge 20.4 or newer, Forge 49.1.10 or newer, or Fabric with Fabric Loader 0.15.11 or newer plus Fabric API 0.97.3 or newer. The Fabric jar also runs on Minecraft 1.20.3, with Fabric API 0.91.1 or newer.
    • Minecraft 1.20.2: Forge 48 or newer, or Fabric with Fabric Loader 0.15.11 or newer plus Fabric API 0.91.6 or newer.
    • Minecraft 1.20.1: Forge 47.4.23 or newer, or Fabric with Fabric Loader 0.15.11 or newer plus Fabric API.
    • Minecraft 1.19.2: Forge 43 or newer, or Fabric with Fabric Loader 0.15.11 or newer plus Fabric API 0.77.0 or newer.
    • Minecraft 1.18.2: Forge 40 or newer, or Fabric with Fabric Loader 0.15.11 or newer plus Fabric API 0.77.0 or newer.
    • Minecraft 1.16.5: Forge 36.2.39 or newer, or Fabric with Fabric Loader 0.15.11 or newer plus Fabric API 0.42.0 or newer.
  2. Download the jar for your loader and Minecraft version from the Releases page and drop it into your mods folder. Jars are named xaeronav-<version>-<loader>-<minecraft version>.jar, for example xaeronav-0.3.0-fabric-1.20.1.jar.
  3. For map integration, also install Xaero's World Map and/or Xaero's Minimap. This part is optional. Minimum versions: World Map 1.44.2 / Minimap 26.4.2 on 1.21.1, 1.21.4, 1.21.5 and 1.20.4, World Map 1.46.0 / Minimap 26.5.0 on 26.1.2, 1.21.11, 1.21.10, 1.21.8, 1.20.1, 1.19.2, 1.18.2 and 1.16.5, World Map 1.46.1 / Minimap 26.5.1 on 26.2, World Map 1.46.4 / Minimap 26.5.3 on 26.3. World Map 1.40.6 / Minimap 25.3.5 on 1.21.3. Xaero no longer updates its mods for some versions, so there the last releases work: World Map 1.39.12 / Minimap 25.2.10 on 1.20.2, 1.20.5 and 1.20.6 (Forge: Minimap 25.2.12), World Map 1.39.10 / Minimap 25.2.7 on 1.21.6, World Map 1.39.12 / Minimap 25.2.10 on 1.21.7, World Map 1.39.17 / Minimap 25.2.15 on 1.21.9. On 1.21 and 1.20.3 (Fabric) the current World Map works, but the last Minimap for them is 25.3.2, which the current World Map refuses to run with. To use both there, take World Map 1.41.2 with Minimap 25.3.2.

What it does

Routes are found with A* over the actual terrain, not by straight-line distance. The move set covers walking, climbing, descending, swimming, riding a boat, ladders and vines, jumping gaps of 1 to 3 blocks, digging, and placing blocks to bridge a gap.

Blocks placed to bridge a gap are budgeted against how many you actually carry. A route that needs more than you have is only offered when there is no other way through, and the HUD says how many are missing. When a route would eat most of your stack, a slightly longer path that places fewer blocks wins.

Each segment is colored by what you do there. Blocks that need digging are highlighted through walls, and the next one to dig gets an outline. Colors also flag trouble ahead: digging next to lava, digging that lets water flow in, a void below, a swim longer than your breath, a fall that deals damage when those are allowed.

Long distances are handled in stages. Beyond the loaded chunks a coarse route is drawn from Xaero's map data, and the detailed search is stitched onto it one segment at a time. The loaded area itself is turned into a navigation graph in the background, built from the same moves the search uses, so the search aims straight at the destination instead of detouring through the coarse route's waypoints. That also covers dimensions where several floors stack at the same XZ, like the Nether. How routing works walks through all of this in detail. If you are underground and the destination is on the surface, the route heads for the nearest cave mouth or cliff first instead of digging straight up under the target. Dimensions without a sky are the exception; there is no surface to aim for.

Start gliding with an elytra and the mod switches to a 3D aerial path that avoids terrain, with its own deviation threshold and recalculation interval. Recalculation is deliberately lazy while walking, so drifting a few blocks off the line does not redraw it and the guidance stays still.

Without Xaero installed, only the map drawing and the right-click menu go away. In-world rendering and the HUD work as usual.

Setting a destination

Method Action
World map Right-click empty space on the map → "Route here"
Waypoint Right-click a waypoint → "Route here"
Keybind "Route to block looked at" (unbound by default)
Command /xaeronav goto <x> <y> <z>

Right-click menu on Xaero's World Map showing "Navigate Here"

Taking off with an elytra switches the guidance on its own. Under a roof or in the Nether it computes a terrain-avoiding aerial path and shows it as a light-blue line; under open sky it puts a light beam where you should land. As soon as you touch down it goes back to walking navigation toward the same destination.

However you set it, the destination is marked on Xaero's maps, so you can tell where you are headed without following the line to its end. With Xaero's Minimap installed it is registered as a temporary Xaero waypoint: upright on a rotating minimap, pinned to the edge with a distance readout once it goes off screen, and visible in the world like any other waypoint. It is never written to disk and disappears when you clear the route. Without the minimap, XaeroNav draws its own pin on the world map, which keeps the same on-screen size however far you zoom out.

Clear the route with /xaeronav clear or its keybind.

Commands

Command What it does
/xaeronav goto <x> <y> <z> Set the destination
/xaeronav clear Clear the route
/xaeronav version Print the running build (include this in bug reports)

/xaeronav debug ... holds measurement commands that print numbers to chat without navigating anywhere: mapdata [radiusChunks] for how much of Xaero's map data is available around you, route and corridor for the coarse waypoint chain and its per-leg refinement, probe for what the detailed search reached and why it stopped, and flight for the aerial route. They are there to explain a route that came out wrong, so attach their output to a bug report — but review it first, since it includes your current position, destination, and nearby terrain.

Keybinds

All unbound by default (Options → Controls → XaeroNav).

Action Purpose
Route to block looked at Main way to set a destination without Xaero installed
Clear route
Toggle HUD Show or hide the on-screen guidance (persisted to the config file)
Open config screen Edit config/xaeronav-client.toml via GUI
Toggle auto-walk Minecraft 26.3+ only. Walk the shown route automatically (see below)

Auto-walk (Minecraft 26.3+)

With a destination set, the auto-walk key steers along the route and holds forward, jump and sprint for you (walking, stepping up, ladders). While it is on, the route is planned for that: it avoids swimming, placing blocks (bridges, pillars), gap jumps and falls that hurt, and is planned again when you switch auto-walk on or off. In a boat it steers the boat across the water and stops at the shore, where you get out and pick the boat up. On a horse, donkey, mule or camel it steers the animal and stops where the route continues on foot. It stops and tells you why when:

  • the next few steps need you: digging, launching a boat, or flying
  • a dangerous section is ahead: lava, void, drowning, magma
  • there is no route without swimming, building or jumps
  • you take over: any other movement key, sneaking, or turning the camera
  • you take damage, or your health drops to autoWalk.stopHealth or below
  • you arrive, or the route is cleared

It pauses while a screen is open or while the route is being computed. Many multiplayer servers treat automated movement as cheating, so it only runs in singleplayer unless autoWalk.allowOnServers is set.

Route colors

Movement:

Color Meaning
Green Walking
Yellow Climbing up
Blue Climbing or stepping down
Dark blue Swimming
Light cyan Riding a boat
Purple Ladder or vine
Pink Jumping a gap
Orange Digging (target block outlined)
Cyan Bridging with placed blocks
Teal Fall softened by placing water at the last moment (MLG)

Warnings:

Color Meaning
Red Adjacent to lava
Magenta Void below
Light blue Digging lets water flow in
Reddish pink Swim segment with no breath left
Orange-red Fall that deals damage
Pale orange Sneaking across a magma block

A warning color always wins over the movement color for that segment, so a dangerous step never looks like an ordinary one.

Other markings:

Color Meaning
Off-white Dotted line for a stretch with no known route, heading toward the unexplored destination
Amber Coarse waypoint chain for a long-distance route
Sky blue Aerial path while gliding with an elytra
Pale yellow beam Where to land while gliding under open sky
Red pin The destination, drawn by XaeroNav when Xaero's Minimap is not installed

Configuration

config/xaeronav-client.toml, or the "Config" button in the Mods list.

[pathfinding]

Key Default Description
routeProfile BALANCED What routes optimise for: BALANCED, FASTEST (risk surcharges halved), SAFEST (risk weighed up to 4x; also forces avoidRiskyJumps on and fallDamageToleranceEnabled off) or RESOURCE_SAVING (placing and digging weighed 3x)
diggingEnabled true Allow digging in routes
bridgingEnabled true Allow placing blocks to bridge gaps or climb cliffs
lavaBridgingEnabled true Allow bridging over lava (also requires bridgingEnabled; last resort when no route avoiding lava exists)
jumpGapEnabled true Allow jumping gaps up to 3 blocks wide
swimmingEnabled true Allow routes to swim or wade. When false, routes go around water (or take a boat); you can still swim out of water you are already in, and a destination in water is still reached
boatsEnabled true Allow crossing water by boat when you carry one. When false, a boat in your inventory is ignored
mountsEnabled true Minecraft 26.3+. While riding a horse, donkey, mule or camel, plan the route for the animal: it needs wider gaps and more headroom, steps up one block, stays out of water and is faster. The route only gets off (and continues on foot) where the animal can't go on
avoidRiskyJumps true Avoid jumps over the void or a fatal drop (opened only when no way around exists at all)
blockBudgetEnabled true Cap the total blocks a route may place at how many you carry (lifted when no route fits, with a shortage warning; never applied in creative)
blockBudgetReserve 0 Blocks held back from that budget
fallDamageToleranceEnabled false Allow descents that deal fall damage (up to 1/3 of health at search time; with a water bucket, MLG descents are also considered)
strictLimits false Never loosen the limits on bridge length, time underwater, fall damage, risky jumps and carried blocks, even when there is no other way. false loosens them only when no route fits and shows the result with warnings; true shows no route and says no way exists within the limits
deepLookAheadEnabled true Keep extending the route ahead as far as loaded chunks allow while walking
costToGoGuideEnabled true Guide the detailed search with a cost-to-go estimate. This builds a navigation graph of the loaded area in the background and aims straight at the destination (uses spare CPU cores and up to about 270 MB, or about 150 MB when the Java heap limit is below 2.5 GB); until the graph is ready, the coarse route's estimate is used. false falls back to straight-line distance
detailHorizonBlocks 96 Max horizontal distance the detailed search targets in one shot; farther destinations get intermediate waypoints
maxBridgeRunBlocks 96 How many consecutive blocks a bridge over open air can run before it's abandoned for a detour (0 = unlimited)
maxLavaBridgeRunBlocks 30 Same, but specifically for bridges over lava (0 = unlimited)
maxVoidBridgeRunBlocks 96 Same, but specifically for bridges over the bottomless void (0 = unlimited; the default matches the 47-81 block gaps measured between End islands)
maxSubmergedTicks 250 How many ticks a route may keep your head underwater (0 = unlimited)
searchHorizontalMargin 64 Horizontal search margin (blocks)
searchVerticalMargin 32 Vertical search margin (blocks)
deviationThresholdBlocks 4.0 Recalculate once you're this far from the line; higher keeps the line steadier
arrivalRadiusBlocks 3.0 Distance counted as "arrived"
groundLevelY 60 Y level and above, with open sky, counted as "surface" (basis for surface-first routing; inactive in dimensions without sky)
recalcIntervalTicks 40 Interval for checking block changes along the route
maxExpandedNodes 100000 Cap on nodes expanded per search; higher reaches farther accurately but costs more CPU/memory
heuristicWeight 1.5 How much the search favors getting close to the goal; 1.0 guarantees the shortest path but can fail to reach destinations where real cost (digging, swimming) outruns the estimate
flightRoutingEnabled true Compute an aerial path while gliding/flying (false reverts to a straight line to the destination)
elytraFlyingMinGroundClearanceBlocks 4 Minimum height above ground (or water) before an elytra glide counts as flying. A glide must also last half a second, so bouncing on a jump does not throw the route away
flightCellBlocks 6 Side length (blocks) of the grid used to solve the aerial path; smaller fits through tighter gaps but reaches less far
flightDeviationThresholdBlocks 24.0 Recalculate the aerial path once you're this far from it
flightRecalcIntervalTicks 20 Recalculation interval (ticks) while gliding
flightClearanceDetourBlocks 12 How many blocks of detour a tight passage is worth avoiding (0 disables this)
flightMaxExpandedNodes 150000 Cap on cells expanded per aerial search
flightExtendMaxExpandedNodes 60000 Cap on cells expanded when extending the path further from its end
flightHeuristicWeight 1.5 Heuristic weight for the aerial search
additionalDiggableBlocks [] Extra block IDs allowed to dig (e.g. modded terrain blocks; example: "minecraft:cobblestone")
additionalForbiddenBlocks [] Extra block IDs forbidden to dig; takes priority over the list above (example: "minecraft:diamond_ore")

By default, digging only allows naturally generated terrain: stone, dirt, sand, ores, leaves, netherrack and so on. Processed blocks such as cobblestone, stone bricks and planks are never dug, neither are blocks with an inventory, and anything unrecognized is treated as not diggable.

[display]

Key Default Description
hudEnabled true On-screen guidance at the top of the screen
straightLineEnabled true Show a dotted line to the destination for stretches with no known route
goalMarkerEnabled true Mark the destination on Xaero's maps (a temporary waypoint with the minimap installed, otherwise a pin drawn by XaeroNav)
fullRoutePreviewEnabled true Minecraft 26.3+, singleplayer: plan the whole route at once and draw all of it on the map (pale green). The terrain past render distance is read from the world save, so it reaches as far as chunks you have ever generated; past that the dotted lines carry on. The time estimate then comes from this route too

[autoWalk] (Minecraft 26.3+)

Key Default Description
allowOnServers false Allow auto-walk on multiplayer servers. Only enable it where the server rules allow automated movement
sprint true Sprint on straight, level stretches
stopHealth 6 Stop once health is at or below this many half-hearts (0 = never)

Known limitations

  • The search only covers loaded chunks and stops at the expanded-node cap. A far destination gets a route that ends partway and continues as a dotted line toward the destination. The rest is computed as you go, and the HUD says so.
  • Search range is capped by Minecraft's render distance (render distance 8 means 128 blocks). Chunks the server hasn't sent can't be read, and vanilla has no packet to request them. If long-distance guidance keeps cutting off, raise your render distance.
  • Long-distance routing depends on Xaero's map data, so it isn't available without Xaero installed or in areas you haven't visited yet. It falls back to computing from loaded chunks only.
  • While gliding with an elytra, the HUD shows the direct distance to the destination and upcoming climbs. Under open sky (Overworld and End) the mod puts a light beam where you should land instead of drawing an aerial path, and the HUD shows an arrow toward it and the distance.
  • Routes don't cross dimensions. Changing dimension clears the current destination.
  • Map integration hooks into Xaero's internals. If a newer Xaero changes them, only that part switches off; XaeroNav says which part in chat once per session, and in-world rendering and the HUD keep working.
  • Map data that Xaero's Maps: Multiplayer+ downloads from a server is read like any other Xaero map data, so long-distance routing uses it (checked on NeoForge 1.21.1). With Xaero's cave mode on, the surface map isn't written, so there is nothing to share or route over.
  • Surface-first routing doesn't work in dimensions without a sky (Nether, the End).
  • The navigation graph covers up to 224 blocks around you, or 160 when the Java heap limit is below 2.5 GB, and never more than your render distance. It ignores block changes it hasn't rebuilt yet; it is rebuilt as you walk and when a search stops making progress. Rebuilding keeps about half of your CPU cores busy for up to about 2 seconds every 8 blocks you walk.
  • A Java heap below 2 GB is not supported. The game itself can run out of memory there.

Building

./gradlew build collectJars

This builds every target (Minecraft version × loader) at once, and also runs spotlessCheck (unused imports, trailing whitespace, final newline) and both test suites. collectJars gathers each target's jar into build/libs/.

How the targets are set up, and how to add one, is in docs/multiloader.md. Release publishing and its required repository settings are documented in docs/releasing.md.

The suite is split by cost. ./gradlew test runs everything except the searches over real saved world data, which take a few minutes run in parallel (about 4 on a 10-core machine); those carry @Tag("slow") and run as ./gradlew slowTest. build runs both, so CI covers the whole suite.

./gradlew test       # fast, a few seconds
./gradlew slowTest   # real-terrain pathfinding searches

The pathfinding core does not depend on the loader or the Minecraft version, so the tests only actually run on the canonical node (canonical_test_node in stonecutter.properties.toml).

Running a dev client (pick a target). The script switches the active target first, then starts the client; anything after the target name is passed on to Gradle. IntelliJ IDEA gets the same thing as run configurations in .run/.

tools/run-client.sh 1.21.1-neoforge                      # with Xaero
tools/run-client.sh 1.20.1-forge                         # any other target
tools/run-client.sh 1.21.1-neoforge -Pwith_xaero=false   # without Xaero (to check fallback behavior)

Xaero is only on the classpath for compiling and for the dev client; it isn't bundled with the release.

Some jars also run on older Minecraft versions than the one they're built for (for example the 1.21.10 Fabric jar on 1.21.9). tools/compat_check.py builds the release jars and creates a Prism Launcher instance for each of those versions, with the matching Xaero and Fabric API. With --auto it launches them one by one and reports whether every Xaero hook ran.

tools/compat_check.py                    # create the instances, then play them by hand
tools/compat_check.py --auto             # launch each one and check the Xaero hooks
tools/compat_check.py --auto 1.21.9-fabric

Layout

pathfinding/
  astar/    A* core, heap, heuristics, safety checks
  coarse/   Coarse terrain from Xaero's map / live sampling, and long-distance waypoint chains
  flight/   3D aerial pathfinding while gliding (coarse route, grid A*, smoothing)
  world/    Block reads (CellSource / ChunkView / CellData) and search bounds
  cost/     Movement and digging cost baselines
  async/    Worker-thread execution and cancellation
client/     Route state, rendering, HUD, guidance, commands, keybinds
mixin/xaero/  Hooks into Xaero's World Map / Minimap (required=false)
config/     TOML configuration (defined once, only the backing store differs per loader)
platform/   Per-loader startup and event wiring. No loader-specific code lives anywhere else

The search core never looks at the Minecraft world directly. It reads blocks through CellSource, a 4-method window. The production implementation is ChunkView; tests pass FakeCells, which lets terrain be written as text.

License

MIT (LICENSE).

Movement cost baselines are informed by measurements used in Baritone (LGPL), but the code itself is an independent implementation.

About

Add pathfinding to Xaero's minimap

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages