Skip to content

Horizon with mod input, ui, render and world (2)

Choose a tag to compare

@Stink-O Stink-O released this 25 Oct 05:46
· 81 commits to main since this release

A build of Horizon with four mod capabilities from Horizon's own roadmap, so a mod can be a whole feature rather than a HUD. It's what Orbital Laser runs on.

Capability What a mod can do
input claim an item's right-click (use-start, use-stop, ticks held), register keybinds (listed in Options → Controls → Key Binds under the mod's name), read the held item
ui own a screen drawn from fills, quads, sprites, item icons and text, with clicks and Escape as events; it doesn't pause the game
render a post-processing pass in the shader-pack stage format, with 16 per-frame parameters (frame.mod_params), drawn after any shader pack; new: shake(strength, seconds), a real camera shake (the view turns, so the world, the hand and post passes move together; scaled by Distortion Effects)
world raycast up to 1024 blocks (new: past the loaded chunks across the distant terrain, with LOD Distance on), run commands at operator level silently in one tick (single player and LAN hosts), play sounds

Mods built for Horizon's API 0.1 still load unchanged. New events are pulled by the mod (input.poll) rather than called as new hooks, and the WIT package stays horizon:mods@0.1.0. The details are in docs/mods.md on the branch.

Also new on the branch since orbital-mod-api-1:

  • horizon-ctl record PATH [FPS] / record stop: the finished frames, post passes and HUD included, streamed to a video through ffmpeg (NVENC when it's there).
  • Block-break sounds and particles reach only 64 blocks, as vanilla's server sends them, and a few sound channels stay free for sounds played to the player, so a crater's worth of breaking can't silence them.
  • /fill skips blocks that are already the target and caches its filter per state; timing spans for mod ticks and commands (HORIZON_SPIKES).
  • Settings rebuilt by horizon-ctl options-set no longer drop the enabled mods.

Install

  1. Download horizon-orbital-linux-x86_64.tar.gz below and unpack it (Orbital Laser's play.sh looks in ~/horizon-orbital).
  2. Prepare the resources once from your own Minecraft 26.3 (Java 25 and the 26.3 server jar, as Horizon's PLAY.txt explains):
    ./horizon-prepare --prepare --server-jar PATH/TO/server.jar, then ./horizon-prepare sounds.
    If you already have Horizon prepared, you can pass its resources instead (--resources …/.local/horizon-client/26.3).
  3. Start it from your game folder (~/.local/share/horizon), since the game keeps saves, options and mods where it starts. README-ORBITAL.txt in the download has the command, and Orbital Laser's play.sh runs it for you.

Important

This is not an official Horizon release, and it contains nothing from Minecraft: you need your own copy of Minecraft Java Edition 26.3. It's built from mod-api-input-ui-render-world, which is upstream main as of 2026-10-22 plus these changes. Orbital Laser 0.5.0 needs this build (or newer).

Warning

Linux x86-64 only, and experimental. Tested on one Linux PC (Fedora, NVIDIA). Elsewhere, build the branch from source: cargo build --release -p horizon-client.

Assets

file what
horizon-orbital-linux-x86_64.tar.gz horizon-client, horizon-ctl, horizon-prepare, the licence and notices, and README-ORBITAL.txt
Source code (zip / tar.gz) the branch's source