CGRLabs/horizon-native-mod

Construisez des mods natifs Horizon (.hnmod) — des bundles de mixins Rust compilés en un client Horizon personnalisé. Utilisez-le lorsque l'utilisateur souhaite un comportement au niveau du code dans le jeu Horizon (caméra, entrées, rendu, physique, hooks de gameplay), mentionne horizon-mixins, l'injection par mixins, les hooks natifs, NATIVE_HOOKS_API, .hnmod, le staging de mods natifs, ou le portage de mécaniques d'un mod Java vers Horizon. À utiliser également lors du débogage d'un mod natif qui échoue au staging, à la construction ou au pinning correct. Même si l'utilisateur dit simplement « Mod Horizon qui change comment X fonctionne », cette compétence s'applique — les mods de contenu (compétence horizon-content-mod) ne peuvent pas exécuter de code.

Qu'est-ce que horizon-native-mod ?

Cette compétence guide la création de mods natifs Horizon (.hnmod), qui sont des bundles de mixins Rust compilés dans un client Horizon patché. Contrairement aux mods de contenu, ils exécutent du code non sandboxé avec les pleins privilèges de l'utilisateur, permettant ainsi de modifier profondément le comportement du jeu (caméra, entrées, rendu, physique, hooks de gameplay). Le processus repose sur deux concepts clés : le **pinning** (où le bundle spécifie soit un commit Horizon exact, soit un niveau d'API de hooks pour la compatibilité avec les Nightlies) et la **plateforme** (le staging nécessite Linux/WSL2 avec Rust 1.95.0, Python 3.12+ et Git). La compétence fournit un pipeline complet de construction, incluant des tests unitaires, le staging du code source Horizon, l'application des mixins, et la construction du client patché. Elle insiste sur la vérification impérative du niveau de hooks déclaré (via `--check-hooks`) et la consultation des documents de référence (`mixin-bundle-format.md`, `pipeline.md`, `example-gyro.md`) pour garantir des mods fiables et correctement packagés.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/CGRLabs/horizon-ai-skills/tree/HEAD/skills/horizon-native-mod

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Mods Natifs Horizon (.hnmod)

Les mods natifs sont des bundles de mixins Rust compilés dans un client Horizon patché par l'outil de staging. Ce sont des codes non sandboxés s'exécutant avec tous les privilèges de l'utilisateur — dites-le clairement dans toute copie d'interface utilisateur, et traitez le bundle comme puissant : il peut faire tout ce que le jeu peut faire.

Deux faits structurels régissent tout :

  1. Pinning. Un bundle nomme le commit exact d'Horizon contre lequel il a été compilé (horizon_revision, 40 hex) ainsi que le commit de horizon-mixins. Alternativement, il déclare hooks: N (un niveau NATIVE_HOOKS_API) et le lanceur le construit sur tout Horizon dont l'API de hooks est au moins N — les points de hook sont uniquement ajoutés, jamais supprimés, c'est donc ce qui survive aux Nightlies. Préférez les points de hook.
  2. Plateforme. Le staging nécessite Linux (WSL2 fonctionne), Rust 1.95.0, Python 3.12+, Git. Les tests unitaires d'exécution du code de la bibliothèque du bundle peuvent être effectués partout, y compris sous Windows.

Anatomie du bundle

<repo>/
  compatibility.json            # pins + niveau de hooks (voir references/pipeline.md)
  mixins/<id>/
    horizon-mixin.toml          # bloc de mod + injections (voir references/mixin-bundle-format.md)
    runtime.rs                  # #[ utilisé comme crate de bibliothèque injectée dans le client
    <x>_helper.rs               # un fichier par point d'injection (helpers)
  tools/package.py              # construit le .hnmod déterministe
  tools/horizon.py              # staging + construction du client patché (emprunter à gyro)

Un bundle par .hnmod ; le dossier sous mixins/ doit être nommé exactement l'identifiant du mod ; seuls les fichiers .rs et .toml sont expédiés.

Le pipeline (commandes vérifiées de bout en bout)

cargo test                                        # tests unitaires de type flight-maths, exécutables partout
python3 tools/horizon.py stage                    # exporter le code source Horizon épinglé, planifier/appliquer les mixins (~3 min)
cargo check  --locked --offline                   # dans l'arbre stagé
cargo test   --locked --offline
cargo build  --profile fast --locked --offline    # client patché (~6 min la première fois)
python3 tools/package.py --check-hooks            # target/<id>-<version>.hnmod + vérifie la déclaration de hooks

--check-hooks récupère native_hooks.rs au commit épinglé et affirme que le niveau de hooks déclaré existe vraiment — ne laissez jamais le nombre être une supposition.

Où se trouve la connaissance

  • references/mixin-bundle-format.md — champs de horizon-mixin.toml, les trois types d'injection (HEAD, RETURN, OVERWRITE), la syntaxe de liaison, $value, le [[module]] de la crate d'exécution. Lisez-le avant d'écrire une injection.
  • references/pipeline.md — champ par champ de compatibility.json, stratégie de pinning (commit vs hooks), internes du staging, règles de packaging déterministes, flux « Ajouter depuis GitHub » du lanceur. Lisez-le avant de packager ou de choisir des pins.
  • references/example-gyro.md — walkthrough annoté d'un mod complet, fonctionnel et livré (roulis de caméra + capture d'entrée sur 6 points de hook). Lisez-le avant de concevoir quoi que ce soit de non trivial ; copiez sa structure.

Non-négociables

  • Ne devinez jamais le numéro de hooks — vérifiez-le contre le commit épinglé (--check-hooks le fait).
  • Gardez les fichiers helpers petits et à but unique ; mettez la logique dans runtime.rs où elle peut être testée unitairement.
  • Les mods natifs ne sont pas revus par défaut : le registre/le lanceur affiche un avertissement de code non sandboxé, et votre README doit aussi le faire.
  • N'expédiez pas d'actifs ou de code Mojang ; licence de type MIT cohérente avec celle d'Horizon.
  • La ligne Options → Mods affiche VERSION depuis runtime.rs ; maintenez-la égale à la version du manifeste ou la vérification échoue.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills associés