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

Одна версия игры за раз

Меняется. Следите: #412, #388, #537

mcrs следует за самым новым снапшотом Minecraft и поддерживает только его.1 Сейчас это 26.4-snapshot-7.

Версия записана в единственном месте, в файле assets/minecraft/version.json. Это файл с тем же именем из клиентского JAR, скопированный байт в байт, и крейт ядра встраивает его в себя. Тест падает, если исходник на Rust, TOML или Gradle повторяет одно из значений файла, а инструмент oracle читает версию из того же файла. Плагин мира отказывается стартовать на датапаке, чей version.json отличается от встроенного.

На следующий снапшот проект переводит одна команда

Заголовок раздела «На следующий снапшот проект переводит одна команда»
Окно терминала
cargo run -p mcrs_minecraft_update -- <version id>

Команда заменяет файл версии, дескриптор клиентского JAR, сгенерированные отчеты и определения блоков и предметов, а еще заново снимает фикстуры, о которых рассказывает страница Совпадение с ванилью. Код она не переносит. Все, что новый снапшот меняет в Rust-крейтах, видно по упавшим тестам и напечатанным диффам, и исправляют это уже люди. Поэтому переход - в основном обновление данных и перенос того поведения, которое действительно изменилось. Подробности есть на странице Переход на новый снапшот и в README инструмента.

Датафиксеров нет, поэтому старые сохранения mcrs не обновляет. В файле чанка или игрока должен стоять целевой DataVersion. Если значения нет или оно другое, вы получите ошибку с обоими номерами, потому что цепочки миграции нет.2 Неизвестное поле в файле, который записала игра, тоже приводит к громкой ошибке, и сырыми байтами mcrs такое поле не сохраняет. Миры, записанные между обновлением и последующими переносами, хранить не стоит.

Клиент должен быть того же снапшота, что и сервер. Ванильный клиент этого снапшота может зайти в офлайн-режиме. Клиент другой версии пока зайти не может.

Крейт протокола содержит пакеты одной версии, старых раскладок пакетов в нем нет, поэтому движок версии не согласовывает.

Если сервер нужен вам для игроков, сначала прочитайте страницу Что такое mcrs и чего от него не ждать. Для продакшена проект рекомендует Paper, Folia, Minestom и Velocity.

Большинство игроков сидят на релизах, поэтому лобби или прокси должны принимать их клиенты. На рассмотрении находится предложение поставить транслятор на границе сети.3 Это цепочка шагов, которая конвертирует фреймы между протоколом клиента и целевым протоколом, от целевой версии вниз до 1.21.6, то есть до протокола 771. Движок по-прежнему видел бы только одну версию. Каждый шаг перечислял бы, что он ухудшает, а новый снапшот менял бы только самый новый шаг.

Что работает сегодня в этом снапшоте, перечислено на странице Статус.

  1. Не планируется#412 Решение поддерживать одну целевую версию за раз, без обратной совместимости. ↩ ↩2

  2. Не планируется#388 Решение читать сохранения только с целевой версией данных, без датафиксеров. ↩

  3. В работе#537 Предложенное решение: граница сети транслирует протоколы клиентов вниз до 1.21.6. ↩ ↩2

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

Проверено: 26.4-snapshot-7, 51d45c26a, 2026-11-09

Переведено с версии 51d45c26a

Следить: #412, #388, #537