Использование крейтов в своем проекте
Крейт 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 тегов, а точно закрепить версию можно хешем коммита.
2. Поставьте nightly-компилятор
Заголовок раздела «2. Поставьте nightly-компилятор»Репозиторий закрепляет nightly-2026-09-02 в rust-toolchain.toml. Cargo читает этот файл только в каталоге, где его запустили, поэтому на git-зависимость закрепление не распространяется. Поставьте nightly сами и закрепите его в своем проекте, лучше с той же датой.
Собираются ли нижние слои еще и на stable, никто не проверял. Заявленная цель - чтобы крейты протокола, сети и игровых данных собирались на stable.1 Значит, сегодня собираются не все.
3. Оставьте Bevy снаружи
Заголовок раздела «3. Оставьте Bevy снаружи»Крейты разложены по слоям, от сетевого протокола в слое 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 отключены.
4. Проверьте, что подтянулось
Заголовок раздела «4. Проверьте, что подтянулось»Запустите в своем проекте эту команду, и она покажет, попали ли 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 и читайте изменения, прежде чем его сдвигать.
Если вы пришли с JVM
Заголовок раздела «Если вы пришли с JVM»У mcrs нет артефакта на Maven Central и нет jar-плагина, который кладут в папку. Решения о загрузчике плагинов тоже пока нет, будь то jar, wasm или скрипты. Проект отклонил только фасад и Bukkit-подобный API, а о загрузчике в этом решении ничего нет.4 Сегодня ваш собственный код - это Rust-плагин для Bevy, который вы компилируете вместе с сервером, подробнее об этом на странице Это не Paper API.
Footnotes
Заголовок раздела «Footnotes»-
Решения нет#321 Отслеживает работу, после которой крейты протокола, сети и игровых данных можно публиковать. ↩ ↩2 ↩3
-
В работе#287 Планирует примеры минимального сервера, лобби и арены. ↩
-
В работе#288 Планирует примеры как члены workspace, каждый с тестом дерева зависимостей. ↩
-
Не планируется#437 Решение не делать фасад или API-крейт: публичная поверхность - сами крейты и плагины. ↩
Источники и проверка
Проверено: 26.4-snapshot-7, 3540f457b, 2026-11-10
Переведено с версии 3540f457b