6e79b7f740 SMP 0.35.0: claims stop griefing from outside, chat pings (#261)
* SMP 0.35.0: claims stop griefing from outside, chat pings

Claims: blocks placed (or fire, buckets, spawn eggs) against a claim's
border from outside, dispensers acting into a claim, lava lighting a
claim's blocks from outside, projectiles of non-members (buttons, targets,
chorus, pots, TNT, crystals, pearls, potions, animals, frames), animals,
frames and stands used by non-members, frames and animals hit by blasts
are all kept. Trust lookups no longer allocate.

Chat pings (jaszka's ask): naming an online player in chat, or /msg to
them, plays the experience orb sound to them alone (3 s apart, never the
sender), /pingsound on|off.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* SMP 0.35.0: rustfmt; the chat queue's module has plain comments

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* SMP 0.35.0: the dispenser hook binds its facing as a parameter

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* SMP 0.35.0: no attribute on the impact helper

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* SMP 0.35.0: README for the claims' new guards and chat pings

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* SMP: log each chat ping on the server

One info line per ping (at most one each 3 s per player), so bots and ops can see pings work.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* SMP: test on eaa7da4, the Horizon the minimap uses

Native mods on the newest hooks (359) must share one Horizon for the together check; r9.1 (52882c1) descends from eaa7da4 with the same hooks.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* SMP: end crystals always guarded in claims; proof SMP_PROOF=claims

A snowball or a punch from someone not trusted no longer sets off a crystal in a claim, even in worlds whose config.json lists protected entities from before. proof.py's claims mode runs two bots on a dedicated server: blocks and fire against the border, dispensers' water and arrows, a crystal, a pearl, TNT by animals and a frame, shears, and the chat pings.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* SMP README: end crystals always guarded

Co-Authored-By: Claude Opus 5.5 <[email protected]>

---------

Co-authored-by: Horizon agent <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
2026-11-05 13:45:57 +01:00

Horizon mods

The registry of what is made for Horizon: mods (.hmod), modpacks (.hpack) and resource packs, each one reviewed before it is published. Browse them at playhorizon.dev/mods or in the launcher (Mods, then Horizon beside Modrinth).

Players install from here through the launcher, which checks every file's SHA-256 and, when the author signs, its signature before the game sees it. Sandboxed .hmod mods run in Horizon's sandbox, with no file, network or clock access, and can only do what their page lists.

Native source mods (.hnmod, kind native-mod) are built into an isolated game by a launcher with native-mod support. They run with the player’s account permissions. Their bundles pin the exact Horizon and Horizon Mixins revisions used for the build. Other revisions have not been validated. Registry checks inspect the source bundle without executing native code; reviewers must also examine the source and pinned-build validation. Publishing these requires the native-mod changes to cargo-horizon-mod and the launcher to have shipped first.

Who is responsible. Except the projects marked Official (made by the Horizon project), everything here is made and owned by its own authors, not by the Horizon project or its maintainers. A listing is not an endorsement. See the mod policy: what authors promise when they submit (ports of other mods included), the licences whose source reviewers can read, and how to have a project taken down.

Submit

Use the form at playhorizon.dev/mods/submit: sign in with GitHub, pick the file and fill in the page. The form checks the file, uploads it here and opens a pull request for you. Then:

  1. This repository's checks run on it: the file's own checks, a trial run of a mod in the sandbox, the index it would publish. Their report is in the pull request's checks.
  2. A reviewer (see .github/CODEOWNERS) reads the entry, the source and the report, and asks for changes in the pull request if needed.
  3. Merging publishes it: the file becomes a release, the project appears on the site and in the launcher within minutes.

What the registry takes now: mods, modpacks of registry mods, and resource packs. Shader packs open when Horizon's own shader pack format is out (Iris and OptiFine packs are on Modrinth). Before you submit a mod, run what the checks run:

cargo install --git https://github.com/horizon-rust/horizon cargo-horizon-mod
cargo horizon-mod check target/horizon-mod/my_mod.hmod

Updates come the same way: the form adds a version to your entry, and a reviewer reads it before it is published. Only an entry's owners can add versions, and every version of a native mod is reviewed, owner or not: its code runs with the player's account permissions. A published file never changes: publish a new version.

Signing is optional and recommended: put your minisign public key in your entry, and every later version must be signed with it, so nobody else can publish an update in your name.

Report

Something wrong with a project? Report it. Your work published without your permission? Ask for a takedown (mod policy). A project that does harm is taken down in revoked.toml: the launcher then refuses it and turns installed copies off, telling players why.

Layout

Path What
mods/<id>.toml One project: its page and its versions, each pinned by SHA-256
icons/<id>.png Its icon, at most 256 KiB
revoked.toml Files taken down
.github/workflows/check.yml A pull request's checks
.github/workflows/publish.yml On merge: releases, then index.json on Pages
.github/workflows/cleanup.yml Weekly: staging files nobody needs any more
.github/workflows/native.yml Horizon's native mods: each changed one's tests, .hnmod and game check, all of them together, and weekly on the newest Nightly
native/<name>/ Horizon's own native mods (Zoom, FPS Counter, Keystrokes, Minimap, Recipes, Coordinates HUD): the source of their .hnmod files
native/tools/ Shared by them: apply on Horizon, check, build, package, prove (native/tools/native.py)
scripts/ What the workflows share

The format of the entries and of index.json is docs/api/mod-index.md in Horizon's repository; the checks are cargo horizon-mod check and cargo horizon-mod registry, from Horizon at the commit in the repository variable HORIZON_REV (else main).

The index: https://horizon-rust.github.io/horizon-mods/index.json.

Horizon's native mods

native/<name>/ holds the source of Horizon's official mods, as horizon-mixins bundles on Horizon's native hook points (docs/native-mods.md). Each folder keeps the history of the repository it came from. A mod builds on any Horizon whose hook points are at least the version its compatibility.json names; horizon_revision is the commit it was last tested on. smp and voicechat-server are server mods, built into the official server's engine (see their READMEs).

python3 native/tools/native.py check zoom          # apply on the tested Horizon and cargo check the game
python3 native/tools/native.py check all           # every native mod together
python3 native/tools/native.py package all         # native/target/<id>-<version>.hnmod, for a registry entry
python3 native/tools/native.py proof zoom --resources /path/to/.local/horizon-client/26.3

To make your own, start from horizon-native-mod-template.

S
Description
Mods, modpacks and resource packs for Horizon, reviewed. Browse at playhorizon.dev/mods or in the launcher.
Readme
66 MiB
0 Stars 1 Watchers 0 Forks
2026-11-06 17:29:51 -10:00
Languages
Rust 86.7%
Python 13.2%
Shell 0.1%