Как сделать свой мод для Horizon

Пошагово по официальной документации: контент-мод или нативный, инструменты, файлы мода, проверка native.py, сборка в лаунчере, подпись minisign и публикация в реестре.

Автор: редакция MC Horizon · Опубликовано · Обновлено

Свой мод для 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 (один крейт с трейтом), но пример документации использует помощники, работающие на всех версиях.

horizon-mixin.toml+ runtime.rs, tick.rs… native.py checkcargo check игры native-buildигра с модом в лаунчере package + submit.hnmod в реестр Первая сборка игры с модом: 20–30 минут (лаунчер качает Rust). Dev build пересобирается ~в 6 раз быстрее.
От файлов мода до публикации — четыре шага, все команды из официальных репозиториев.

Шаг 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. Подпись и публикация

  1. python3 native/tools/native.py package /path/to/playtime — получите native/target/<id>-<version>.hnmod и его SHA-256.
  2. По желанию подпишите файл minisign: тогда никто не сможет выпустить обновление от вашего имени. Ключ создаётся один раз командой minisign -G.
  3. Опубликуйте исходники в открытом репозитории под лицензией вроде MIT, Apache-2.0 или GPL.
  4. Откройте форму playhorizon.dev/mods/submit, войдите через GitHub, загрузите файл и заполните страницу. Форма откроет pull request в horizon-mods; проверки прогонят cargo horizon-mod check, а мейнтейнер прочитает каждую строку нативного мода.

После слияния мод появится на playhorizon.dev, в лаунчере и — в течение получаса — в нашем каталоге модов. Хотите русскую страницу с описанием и комментариями сразу — продублируйте его через нашу форму «Загрузить мод». Как моды ставят игроки, рассказываем в гайде по установке модов.

Источники

Частые вопросы

Нужен ли опыт моддинга Minecraft?

Нет, документация рассчитана на новичков в моддинге. Для нативного мода нужно базово знать Rust; для контент-мода код не нужен вовсе.

Придётся ли выпускать мод под каждую Nightly?

Если мод использует только официальные точки подключения (hook points), он собирается и на следующих версиях Horizon без нового релиза.

Можно ли опубликовать мод у вас на сайте?

Да, через страницу «Загрузить мод». Но для лаунчера мод нужно опубликовать в официальном реестре horizon-mods.

Комментарии

Комментарии загрузятся, когда вы до них долистаете.