Свой мод для Horizon делается по официальному пути: выбрать тип (контент или нативный), собрать файлы мода, проверить его скриптом из репозитория horizon-mods, собрать игру с ним через лаунчер и отправить в реестр. Опыт моддинга Minecraft не нужен; для нативного мода нужен Rust. Ниже — маршрут по документации, без выдуманных API: код смотрите в официальном примере Playtime.
Шаг 0. Какой мод вам нужен
| Контент-мод | Нативный мод | |
|---|---|---|
| Что добавляет | блоки, предметы, рецепты, лут, теги, модели, текстуры, структуры | HUD, клавиши, команды, настройки, новое поведение |
| Файл | .hmod |
.hnmod |
| Код | нет | Rust, компилируется в игру |
| Для игрока | читается при старте | лаунчер собирает игру с модом |
Если вы добавляете блок или рецепт — делайте контент-мод: без компилятора, работает на любом компьютере. Если мод должен что-то делать — рисовать на экране, реагировать на клавишу, добавлять команду — это нативный мод. Дальше — о нём.
Как устроен нативный мод
Нативный мод — это бандл для horizon-mixins: манифест horizon-mixin.toml и несколько .rs-файлов. Перед компиляцией игры horizon-mixins добавляет ваш код в исходники Horizon и вызывает его из мест, перечисленных в манифесте.
Для этого в Horizon есть точки подключения (hook points) — пустые функции, которые игра вызывает в фиксированных местах: каждый тик, каждый кадр, при отрисовке HUD, при нажатии клавиши, при вводе команды, когда Настройки → Моды показывает список модов — плюс помощники, чтобы читать игрока, рисовать текст и хранить настройки. Главное преимущество: мод только на точках подключения собирается и на следующих версиях Horizon, без нового релиза под каждую Nightly. С Nightly от 3 ноября 2026 есть и второй способ — типизированный API (один крейт с трейтом), но пример документации использует помощники, работающие на всех версиях.
Шаг 1. Инструменты
- Rust (stable, через rustup) и Git.
- Python 3.11+ и
rsync(на Windows — WSL для проверок). - Клон репозитория реестра:
git clone https://github.com/horizon-rust/horizon-mods— егоnative/tools/native.pyприменяет бандл к исходникам Horizon, проверяет, собирает и упаковывает.hnmod. Им пользуются и официальные моды. - Свежий лаунчер (0.2.37+ собирает и типизированные моды) и подготовленная игра.
Шаг 2. Файлы мода
Пример из документации — Playtime: считает, сколько вы играете, показывает это в углу экрана, сохраняет счёт при выходе, умеет /playtime и /playtime reset, а в настройках у него одна кнопка, чтобы спрятать окошко. Он использует шесть точек: native_tick, native_hud, native_command, native_mods, native_settings, native_settings_click. Структура:
playtime/
├── Cargo.toml запускает юнит-тесты: cargo test
├── compatibility.json нужные точки подключения и проверенные коммиты
└── mixins/playtime/
├── horizon-mixin.toml манифест: id, версия, что подключается
├── runtime.rs код мода
├── tick.rs по маленькому помощнику на каждую точку
└── hud.rs
Самый маленький живой пример — официальный FPS Counter (fps-overlay в папке native/ реестра). Начинать проще всего с копии.
Шаг 3. Проверка против Horizon
cd horizon-mods
python3 native/tools/native.py check /path/to/playtime
Скрипт скачивает исходники Horizon на коммите из compatibility.json, применяет бандл и запускает cargo check. Ошибка в манифесте — это ошибка horizon-mixins, ошибка в коде — обычная ошибка Rust с файлом и строкой. Первый прогон компилирует зависимости несколько минут, дальше — секунды. Перед отправкой проверьте мод и на свежей Nightly: native.py check --horizon latest.
Шаг 4. Мод в игре
horizon-launcher native-build /path/to/playtime/mixins/playtime --trust-native-code
Лаунчер скомпилирует игру с модом для выбранной сборки — дальше просто «Играть». Первая сборка скачивает Rust и занимает 20–30 минут, следующие — несколько. На время разработки включите horizon-launcher settings native-profile dev: пересборка примерно в шесть раз быстрее, зато игра до двух раз медленнее. Флаг --trust-native-code — то самое решение, которое лаунчер спрашивает у игроков красным: код получает полный доступ к компьютеру.
Шаг 5. Подпись и публикация
python3 native/tools/native.py package /path/to/playtime— получитеnative/target/<id>-<version>.hnmodи его SHA-256.- По желанию подпишите файл minisign: тогда никто не сможет выпустить обновление от вашего имени. Ключ создаётся один раз командой
minisign -G. - Опубликуйте исходники в открытом репозитории под лицензией вроде MIT, Apache-2.0 или GPL.
- Откройте форму playhorizon.dev/mods/submit, войдите через GitHub, загрузите файл и заполните страницу. Форма откроет pull request в horizon-mods; проверки прогонят
cargo horizon-mod check, а мейнтейнер прочитает каждую строку нативного мода.
После слияния мод появится на playhorizon.dev, в лаунчере и — в течение получаса — в нашем каталоге модов. Хотите русскую страницу с описанием и комментариями сразу — продублируйте его через нашу форму «Загрузить мод». Как моды ставят игроки, рассказываем в гайде по установке модов.
Источники
- Make a mod — на английском
- Hook points and helpers — пример Playtime
- Publish a mod — на английском
- horizon-mixins — на английском