Перейти к содержимому

Использование крейтов в своем проекте

WIP: пока не реализовано или реализовано частично. Следите: #321, #287, #288

Крейт mcrs можно подключить к своему Rust-проекту уже сегодня: нужны git-зависимость, закрепленный коммит и nightly-компилятор. На crates.io крейтов нет. Вне репозитория на чистой машине этот путь пока никто не проверял, так что читайте страницу как план с известными ограничениями.

1. Добавьте git-зависимость с закрепленным rev

Заголовок раздела «1. Добавьте git-зависимость с закрепленным rev»
[dependencies]
mcrs_minecraft_protocol = { git = "https://github.com/andreypfau/mcrs", rev = "51d45c26ae772bd71fb1e02caae8cab2e5ad4495", default-features = false }

Cargo находит крейт по имени внутри репозитория, поэтому один и тот же адрес в git подходит для любого крейта mcrs. Для всех них в дереве зависимостей указывайте один rev.

Не пишите branch = "main". Ветка main переходит на следующий снапшот игры, и крейты меняются вместе с ней, так что сборка может сломаться, хотя у себя вы ничего не трогали. В репозитории 11 тегов, а точно закрепить версию можно хешем коммита.

Репозиторий закрепляет nightly-2026-09-02 в rust-toolchain.toml. Cargo читает этот файл только в каталоге, где его запустили, поэтому на git-зависимость закрепление не распространяется. Поставьте nightly сами и закрепите его в своем проекте, лучше с той же датой.

Собираются ли нижние слои еще и на stable, никто не проверял. Заявленная цель - чтобы крейты протокола, сети и игровых данных собирались на stable.1 Значит, сегодня собираются не все.

Крейты разложены по слоям, от сетевого протокола в слое 1 до приложений в слое 7. Ниже слоя 4 Bevy - необязательная feature, поэтому default-features = false в строке зависимости выше не пускает его в вашу сборку.

CI проверяет 100 имен пакетов командой cargo check --no-default-features. Список лежит в NO_BEVY_PACKAGES в xtask/src/checks.rs, а в карте крейтов отмечен каждый из этих пакетов.

Слою 4 и выше Bevy нужен. В нижних слоях известно одно исключение, mcrs_minecraft_assets: по README ему нужен Bevy, даже если default features отключены.

Запустите в своем проекте эту команду, и она покажет, попали ли Bevy или tokio в дерево зависимостей:

Окно терминала
cargo tree -e normal --prefix none | grep -i -E "bevy|tokio" || echo "no bevy, no tokio"

Если Bevy появился из-за крейта из списка “без Bevy”, это баг в mcrs, заведите issue. Та же команда покажет и tokio, который ниже слоя 2 тоже необязательная feature.

Крейты нельзя ни опубликовать, ни упаковать. cargo package падает на крейте, который при сборке читает файлы вне своей папки. Известны два случая: crates/mcrs_minecraft_core/src/version.rs читает assets/minecraft/version.json, а crates/mcrs_minecraft_game_rule/src/lib.rs читает файл из assets/mcrs/. Git-зависимость работает, потому что Cargo клонирует весь репозиторий. Из-за этого публикация заблокирована.1

Вторым блокером то же issue называет типы ошибок. Публичный API крейтов протокола и сети в нескольких местах возвращает ошибки anyhow, поэтому вызывающий код не отличит неполный фрейм от сломанного, если не сравнивает текст.

Примера проекта, который можно скопировать, нет. Первый маленький пример - разбор SNBT в своем проекте, и он сам не проверен вне workspace.

Стабильного API нет. Типы меняются с каждым снапшотом игры, поэтому закрепите rev и читайте изменения, прежде чем его сдвигать.

У mcrs нет артефакта на Maven Central и нет jar-плагина, который кладут в папку. Решения о загрузчике плагинов тоже пока нет, будь то jar, wasm или скрипты. Проект отклонил только фасад и Bukkit-подобный API, а о загрузчике в этом решении ничего нет.4 Сегодня ваш собственный код - это Rust-плагин для Bevy, который вы компилируете вместе с сервером, подробнее об этом на странице Это не Paper API.

  1. Решения нет#321 Отслеживает работу, после которой крейты протокола, сети и игровых данных можно публиковать. ↩ ↩2 ↩3

  2. В работе#287 Планирует примеры минимального сервера, лобби и арены. ↩

  3. В работе#288 Планирует примеры как члены workspace, каждый с тестом дерева зависимостей. ↩

  4. Не планируется#437 Решение не делать фасад или API-крейт: публичная поверхность - сами крейты и плагины. ↩

Источники и проверка

Проверено: 26.4-snapshot-7, 3540f457b, 2026-11-10

Переведено с версии 3540f457b

Следить: #321, #287, #288