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

Карта крейтов

Меняется. Следите: #287, #296, #297, #302, #321

mcrs состоит из 122 крейтов в crates/, и брать их можно по одному. Здесь они перечислены по слоям, и у каждого отмечено, собирает ли его CI без Bevy, без std или под wasm32. По этой странице удобно найти нужный крейт и понять, что он тянет за собой.

Крейты разложены по семи слоям из README. Каждый слой должен зависеть только от нижних, поэтому можно взять нижние слои и не платить за то, что выше. Несколько крейтов пока этому не следуют, потому что крейты протокола и сети все еще обращаются к игровым данным. CI проверяет только часть правила, а именно что крейты wire и сети не линкуют игровые данные.

Слой крейта нигде не хранится в коде. Его назначили вручную по таблице из README и описанию крейта, и никакая проверка его не подтверждает, так что считайте его ориентиром.

Во всех таблицах одни и те же пять столбцов. Имя крейта совпадает с именем пакета, а остальные четыре берутся отсюда:

Столбец Откуда берется
Описание description из Cargo.toml крейта. У пяти крейтов описания не было или в нем стояло только имя крейта, поэтому для них оно написано по исходникам
Без Bevy NO_BEVY_PACKAGES в checks.rs. CI запускает для этих крейтов cargo check --no-default-features и падает, если какому-то нужен Bevy
no_std NO_STD_PACKAGES в том же файле. CI собирает эти крейты без std
wasm32 WASM32_PACKAGES в том же файле. CI собирает эти крейты под цель wasm32

В списке “без Bevy” 100 имен. Шесть из них - инструменты из tools/, поэтому среди 122 крейтов из crates/ таких 94. В списке no_std 9 крейтов, в списке wasm32 - 11. Прочерк значит только, что крейта нет в списке CI. Собраться в таком режиме он все равно может.

В таблице ниже названы крейты, с которых стоит начать в пяти видах проектов. Ни один из них не опубликован на crates.io, поэтому в каждой строке нужна git-зависимость, о ней рассказывает страница Использование крейтов в своем проекте. Примеров использования библиотеки пока нет, а первый рабочий пример - разбор SNBT.1

Что вы пишете С чего начать Состояние
Прокси mcrs_minecraft_protocol и mcrs_minecraft_network. Оба в списке “без Bevy”, и xtask проверяет, что они не линкуют игровые данные Крейты есть. Саму библиотеку прокси с маршрутизацией и пересылкой отслеживает В работе#296, онлайн-режим - В работе#82
Бот Те же два крейта и mcrs_minecraft_client_world, который хранит состояние мира клиента без окна и рендерера. В списке “без Bevy” его нет Состояние клиента отделено от рендеринга (Работает#301). Бота-ходока отслеживает В работе#302
Карта или просмотрщик мира mcrs_minecraft_anvil для регионов (он есть и в списке wasm32), mcrs_minecraft_chunk и mcrs_minecraft_block для данных, mcrs_minecraft_mesh для мешей Крейты есть. Тайлы вида сверху без окна отслеживает В работе#297, просмотрщик моделей - В работе#298
Инструмент для NBT, команд или датапаков mcrs_minecraft_nbt, mcrs_minecraft_snbt, mcrs_command, mcrs_minecraft_datapack Крейты есть. mcrs_command и mcrs_minecraft_snbt читают и пишут то же, что читает и пишет игра
Предпросмотр генерации мира mcrs_minecraft_worldgen_generator и крейты mcrs_minecraft_worldgen_* Предпросмотр по сиду через публичный API отслеживает В работе#299. Сам генератор совпадает с ванилью в parity-тестах на эталонных сидах

“Крейты есть” значит, что они собираются в этом репозитории. Стабильный API ни один из них не обещает, а README есть только у шести крейтов.

Крейт Описание Без Bevy no_std wasm32
mcrs_command Дерево команд, парсер и подсказки, которые совпадают с Brigadier, без аллокаций при разборе да да -
mcrs_minecraft_chat Правила чата, общие для клиента и сервера: допустимые символы сообщения, предел длины и нормальная форма да да -
mcrs_minecraft_core Направления, числовые операции, формы, кодеки и версия да - -
mcrs_minecraft_game_mode Режимы игры игрока, их имена и сетевые формы да - -
mcrs_minecraft_keys Имена ванильных реестров (registry), которые не ключуются типом ни в одном крейте, с их записями и тегами да - да
mcrs_minecraft_nbt Теги и compound NBT, бинарное чтение и запись в big-endian кодировке Java и двух little-endian кодировках Bedrock, кодеки serde да - -
mcrs_minecraft_numeric Побитово точные числовые операции: целочисленное деление, сравнения, интерполяция, оборот угла, таблицы синусов и арктангенс да - -
mcrs_minecraft_profile Игровые профили, их свойства и разрешаемый профиль головы игрока да - -
mcrs_minecraft_protocol Библиотека протокола Minecraft: Java Edition: фрейминг, сжатие и пакеты handshake, status, login и configuration да - да
mcrs_minecraft_random Генераторы случайных чисел игры: legacy, xoroshiro и форки для генерации мира да - -
mcrs_minecraft_resource Resource location, ключи ресурсов, ключи тегов, ключи реестров и идентификаторы реестров да - -
mcrs_minecraft_snbt Чтение и запись stringified NBT так, как это делает игра да - -
mcrs_minecraft_text Текстовые компоненты: содержимое, стиль, события клика и наведения, кодеки JSON и NBT да - -
mcrs_minecraft_wire Трейты encode и decode, целые переменной длины и кодеки примитивов для протокола Minecraft: Java Edition да - да
mcrs_minecraft_wire_macros Derive-макросы для трейтов кодеков из mcrs_minecraft_wire да - -
mcrs_molang Компилятор Molang, скалярный и пакетный вычислитель, не привязанный к игровому хосту да да -
mcrs_voxel Позиции блока, секции, колонки и локальные позиции, а также id состояния блока вокселного мира да да -
Крейт Описание Без Bevy no_std wasm32
mcrs_minecraft_network Сетевая библиотека Minecraft: Java Edition да - -
Крейт Описание Без Bevy no_std wasm32
mcrs_minecraft_anvil Файлы регионов Anvil: чтение и запись чанков, палитры, retrogen да - да
mcrs_minecraft_assets Загрузка датапаков: загрузчики JSON, доступ к реестрам и состояние загрузки - - -
mcrs_minecraft_biome Биомы, климатические параметры и источники биомов да - -
mcrs_minecraft_biome_file Файл биома в том виде, как его пишут датапаки, его встроенный черновик и колонки, в которых он хранится да - да
mcrs_minecraft_block Определения блоков и жидкостей, теги блоков и цвета карты да - -
mcrs_minecraft_block_entity Блочные сущности в типизированной форме, общей для сохранения, пакета чанка и читателя anvil да - -
mcrs_minecraft_block_predicate Состояния блоков, предикаты блоков и поставщики состояний блоков в том виде, как их пишут датапаки да - -
mcrs_minecraft_brain Стадия ИИ мобов без Bevy: реплика снапшота, выдача и отложенное применение решений, ключевые случайные значения, расписание пробуждения и селектор целей да да -
mcrs_minecraft_chunk Секции чанка, палитры, хранилище света и высоты колонок да - -
mcrs_minecraft_client_jar Находит, скачивает и распаковывает ванильный jar клиента да - -
mcrs_minecraft_collision_table Строит таблицу коллизий ядра физики по определениям блоков и тегам блоков да - -
mcrs_minecraft_command Источник команды, права, идентификаторы и тексты ошибок, общие для ванильных семейств аргументов, а также пакеты команд игрока да - -
mcrs_minecraft_command_argument Аргументы: ресурс, ключевое слово, координата, поворот, swizzle и время да - -
mcrs_minecraft_command_argument_block Аргумент-предикат блока и его проверка состояния блока да - -
mcrs_minecraft_command_argument_entity Аргумент-селектор сущностей и поиск сущностей, на которые указывает селектор да - -
mcrs_minecraft_command_argument_vanilla Ванильный набор аргументов, его ошибки, его парсеры в сетевой форме и клиентское дерево команд да - -
mcrs_minecraft_command_registry Реестры и таблица блоков, которые хост одалживает аргументам команд да - -
mcrs_minecraft_command_tree Узлы дерева команд, которые несет пакет команд да - -
mcrs_minecraft_damage Процедура удара по живой сущности без Bevy: перезарядка урона, изменение здоровья, начало смерти и запись об ударе да - -
mcrs_minecraft_datapack Стек датапаков: выбор паков, pack.mcmeta, оверлеи, фильтры и файлы, которые дает каждый пак - - -
mcrs_minecraft_dimension Значения реестров измерений и типов измерений да - -
mcrs_minecraft_enchantment Файл зачарования и ключи реестров зачарований да - да
mcrs_minecraft_entity Простые типы идентичности из реестров домена сущностей и таблица данных типов сущностей да - -
mcrs_minecraft_entity_key Ключи сущности без ядра физики: ее id, ее UUID как ключ порядка, источники нового UUID, ее ключевой поток случайных чисел и тайл, в котором она лежит да да -
mcrs_minecraft_entity_rows Строки серверных сущностей по тайлам с колонкой для горячего состояния мобов: сетка тел, точка слияния, сон и пробуждение тайлов и проход по сущностям поверх ядра физики да - -
mcrs_minecraft_environment Атрибуты окружения, таймлайны и часы мира да - -
mcrs_minecraft_game_registries Словарь ванильных типов блоков и предметов Minecraft и статические реестры да - -
mcrs_minecraft_game_rule Игровые правила, их категории, типы значений, значения по умолчанию и границы да - да
mcrs_minecraft_goal_world Блочный мир целей мобов только для чтения: ячейка земли под позицией блока, высота постройки, линия видимости и прямой маршрут по проходимой земле да да -
mcrs_minecraft_goals Цели пассивных мобов для стадии ИИ: плавание, паника, случайная прогулка, взгляд на игрока и осмотр, поиск случайных позиций, список целей свиньи и мозг каждого типа моба с целями да да -
mcrs_minecraft_heightmap Четыре карты высот колонок, предикаты состояний блоков, которые они проверяют, и спуск, который их строит да - -
mcrs_minecraft_item Предметы, компоненты данных предметов, патч компонентов, постоянный стек предметов, зачарования и отделка брони да - -
mcrs_minecraft_lang Языковой файл игры: паттерны перевода по ключу и подстановка в их плейсхолдеры да - -
mcrs_minecraft_light_color Цвета света состояний блоков и свет, который излучает предмет в руке да - -
mcrs_minecraft_light_engine Распространение блочного и небесного света по секциям без Bevy да - -
mcrs_minecraft_loot Ключи реестров лута да - да
mcrs_minecraft_mob_control Покадровые контроллеры моба без Bevy: следование по прямому маршруту, контроль движения, прыжка, взгляда и поворота тела да - -
mcrs_minecraft_move_predict Проверки движения с миром: предсказание каждого тика клиента игрока по модели физики да - -
mcrs_minecraft_move_validate Проверки движения без мира: один пакет от клиента и поток одного соединения да - -
mcrs_minecraft_noise Шум Перлина, симплекс-шум, нормальный и смешанный шум, а также типы интервалов и сеток, по которым они берутся да - -
mcrs_minecraft_particle Типы частиц и их параметры в том виде, как их пишут датапаки и атрибуты да - -
mcrs_minecraft_physics Ядро физики сущностей: боксы, формы блоков, алгоритм коллизий, шаг на ступеньку и процедура перемещения да - -
mcrs_minecraft_predicate Ключи реестров предикатов сущностей и статистики да - да
mcrs_minecraft_protocol_game Пакеты состояния play в Minecraft: Java Edition, которые несут игровые данные: чанки, сущности, предметы, рецепты и чат да - да
mcrs_minecraft_registries Таблицы реестров, теги и загрузчик реестров да - -
mcrs_minecraft_registries_derive Атрибут registry_value и derive Resolve для mcrs_minecraft_registries - - -
mcrs_minecraft_registry_catalog Записи каждого статического реестра да - да
mcrs_minecraft_save Файлы сохранения мира, кроме регионов: level, настройки генерации мира и файл каждого игрока - - -
mcrs_minecraft_simulation Ядра симуляции блоков: цепочка шагов и обновлений по объему, их очереди и политики порядка да - -
mcrs_minecraft_sound События звука да - -
mcrs_minecraft_text_flatten Текстовый компонент как ровный ряд отрезков со стилем: переводы заполнены из языкового файла, стили унаследованы, из отрезков собираются простая строка и строка с кодами форматирования да - -
mcrs_minecraft_value_provider Поставщики int, float и высоты и их кодеки да - -
mcrs_minecraft_volume Один API доступа к блокам поверх всех хранилищ данных мира: границы, доступ по секциям, дескрипторы секций и курсоры да - -
mcrs_minecraft_worldgen Генератор мира: реестры генерации, их загрузчики и beardifier да - -
mcrs_minecraft_worldgen_builtin Записи реестров генерации, которые определяют игра и пресет beta, построенные кодом да - -
mcrs_minecraft_worldgen_carver Карверы пещер и каньонов да - -
mcrs_minecraft_worldgen_density Функции плотности, их компилятор и вычислитель, роутер шума и aquifer да - -
mcrs_minecraft_worldgen_feature Настроенные и размещенные фичи, модификаторы размещения, шаблоны структур и генераторы фич да - -
mcrs_minecraft_worldgen_feature_place Генераторы фич: деревья, руды, жеоды, шаблоны и все остальное, что пишет размещенная фича да - -
mcrs_minecraft_worldgen_generator Конвейер колонки генератора чанков на шуме: заполнение, поверхность, карверы, фичи, структуры и чтение из сохранения да - -
mcrs_minecraft_worldgen_structure Структуры, наборы структур, пулы шаблонов, сборка jigsaw и размещение структур да - -
mcrs_minecraft_worldgen_structure_place Что пишут жестко заданные части структур: холст части, художники по семействам и хуки после размещения да - -
mcrs_minecraft_worldgen_surface Правила поверхности: компилятор и вычислитель правил материала да - -
mcrs_minecraft_worldgen_testing Поставляемый корпус ассетов и дампы оракула, которые читаются в тестах да - -
Крейт Описание Без Bevy no_std wasm32
mcrs_engine_cell Миры, которые тикают синхронно: входные данные передаются во владение, выходные тоже, каждый мир стоит прямо в вызове или в собственном потоке да - -
mcrs_engine_link Связь между двумя частями движка: сообщения передаются во владение в обе стороны, а дальний конец стоит прямо в вызове или в собственном потоке да - -
mcrs_engine_muxer Раздает изменения мира его наблюдателям: тайлы и потоки тайлов для сущностей, потоки версий для чанков и байты, закодированные один раз и общие да - -
mcrs_engine_store Слой данных: версионированные чанки по ключу в кеше в памяти поверх дискового хранилища, которое дает игра, доступный как стадия на связи да - -
mcrs_minecraft_chat_server Обработка чата сервером в виде плагина, который пользователь может заменить - - -
mcrs_minecraft_command_engine Дерево команд, регистрация команд и запуск командных строк игроков внутри тика мира каждого измерения - - -
mcrs_minecraft_dimension_environment Типы измерений и слои атрибутов окружения измерения да - -
mcrs_minecraft_engine Шина пакетов, мост между сетью и мирами измерений, сессии, хостовая сторона каналов измерений, состояние игрока, общее для хоста и измерений, часы мира хоста и поддержание карт высот - - -
mcrs_minecraft_engine_brain Стадия ИИ мобов мира измерения: хост, который публикует снапшот строк мобов, запускает стадию по тайлам рядом с проходом по сущностям, применяет решения через контроллеры мобов и управляет строками - - -
mcrs_minecraft_engine_mob_replication Проекция репликации мобов мира измерения в Bevy: читает хранилище строк и изменения мобов за тик и пишет события тайлов мобов для muxer - - -
mcrs_minecraft_engine_physics Проход по сущностям мира измерения в Bevy: хранилище строк как ресурс, обобщенный по колонке мобов, точка слияния, заморозка и проход как системы, предметы только в строках и строки мобов с их жизненным циклом и событиями тайлов - - -
mcrs_minecraft_engine_registries Загружает реестры, блоки и предметы приложения из файлов его паков, проводит его до состояния playing и передает снапшот каждому миру измерения - - -
mcrs_minecraft_engine_server Серверные плагины движка без ванильного поведения: ядро, миры измерений, слушатель с login, configuration, keep-alive и status и серверный цикл - - -
mcrs_minecraft_engine_world Сущности чанков и колонок, измерения, тикеты, область интереса, сессии, серверный цикл, обновления и дропы блоков, игровые правила, а также сид мира, часы рождения и id сущностей, которые берут новые сущности - - -
mcrs_minecraft_replication Сторона Minecraft в репликации сущностей: кодек muxer для игроков и мобов, трекеры мобов, базы дельт для перемещений, пакеты появления, записи профилей и политика списка игроков, в виде закодированных пакетов да - -
Крейт Описание Без Bevy no_std wasm32
mcrs_minecraft_command_vanilla Ванильные команды execute, gamemode, teleport, locate, summon и time и эффекты команд, которые они пишут - - -
mcrs_minecraft_command_world Команды, которые меняют мир и сервер: fill, forceload, gamerule, weather clear, а также tick query и sprint - - -
mcrs_minecraft_vanilla_light Ванильный свет, подключенный к мирам измерений: таблица света блоков, драйвер светового движка каждого измерения и обновления света, отправляемые игрокам - - -
mcrs_minecraft_vanilla_worldgen Генерация мира, подключенная к мирам измерений: роутеры, карверы, фичи и структуры каждого измерения и планировщик колонок, который генерирует или читает свои колонки - - -
Крейт Описание Без Bevy no_std wasm32
mcrs_minecraft_entity_animation Анимация сущностей на CPU: клипы, ключевые кадры, список воспроизведения клиентской сущности, ее скрипты и поза костей кадра да - -
mcrs_minecraft_entity_model Файлы геометрии сущностей формата Bedrock: чтение, запекание в статическую модель и записи моделей для GPU да - -
mcrs_minecraft_entity_render Рендеринг сущностей под управлением GPU: постоянные слоты, отсечение сущностей, проходы позы и расширения и отрисовка записей граней в gbuffer - - -
mcrs_minecraft_light_render Цветной блочный свет для прохода освещения: постраничный объем света, который распространяется на GPU - - -
mcrs_minecraft_mesh Построение мешей секций: жадные грани кубов, жидкости, модели блоков, упакованная раскладка квадов и арена буферов да - -
mcrs_minecraft_model Модели блоков и предметов, запеченные из ресурспака Minecraft: пак, файлы моделей, атлас спрайтов, каталог блоков и деревья моделей предметов - - -
mcrs_minecraft_model_file Файлы моделей блоков, файлы состояний блоков и запекание граней ресурспака, без Bevy да - -
mcrs_minecraft_pack_file Файлы пака сущностей: нестрогий JSON, файл клиентской сущности, диагностика загрузки и компиляция полей Molang да - -
mcrs_minecraft_render Отложенный рендерер ландшафта и неба: G-buffer, один полноэкранный проход освещения и прямые прозрачные объекты, отрисовываемые по упорядоченным стадиям прохода мира - - -
mcrs_minecraft_render_controller Контроллеры рендера клиентской сущности: слои, их геометрия, текстура и видимые кости в кадре да - -
mcrs_minecraft_render_probe Тайминги проходов GPU, тайминги стадий CPU, счетчики отрисовки и прогрев GPU для рендерера ландшафта - - -
mcrs_molang_wgsl Понижение чистых каналов Molang до WGSL и математическая библиотека WGSL да да -
Крейт Описание Без Bevy no_std wasm32
mcrs_minecraft_chat_client Экран чата клиента без рендеринга: поле ввода, история, клиентские подсказки команд, строки подсказок и журнал чата да - -
mcrs_minecraft_client Клиент Minecraft: окно, корпус ассетов, реестры окружения и вокселный рендерер - - -
mcrs_minecraft_client_entity Клиентское состояние сущностей, которые добавляет сервер: движение, интерполяция, рыскание головы и тела, ходьба, удар и смерть, а также значения, которые читает рендерер - - -
mcrs_minecraft_client_gui GUI клиента Minecraft: хотбар, экраны инвентаря и чата, переключатель режимов игры, модели предметов в слотах и экран отладки F3 - - -
mcrs_minecraft_client_world Состояние мира клиента Minecraft без окна и рендерера: реестры сессии, колонки, локальный игрок, режим игры и чат - - -
mcrs_minecraft_console Консоль сервера: командные строки со стандартного ввода выполняются от имени сервера, а ответы идут в лог на английском - - -
mcrs_minecraft_server Серверное приложение: группа плагинов, которая ставит ванильное поведение на сервер движка - - -
mcrs_minecraft_server_settings Настройки запуска сервера, которые задают переменные окружения MCRS_, читаемые в одном месте да - -
Крейт Описание Без Bevy no_std wasm32
mcrs_test_alloc Глобальный аллокатор, который считает аллокации вызывающего потока, для тестов да - -

Ниже слоя 4 Bevy - необязательная feature, а ниже слоя 2 необязателен и tokio. Начиная со слоя 4 Bevy обязателен, потому что движок, ванильные плагины, клиент и сервер написаны как плагины Bevy. Если нужны только типы данных и кодеки, оставайтесь в слоях с 1 по 3 и собирайте с --no-default-features. Слои 4 и 5 разобраны на странице Слои.

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

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

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

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

Следить: #287, #296, #297, #302, #321