Миры и сохранения
Эта страница для администратора, который хочет запустить сервер mcrs на каком-то мире. Сервер читает мир Java Edition той же версии игры и сохраняет игроков. Чанки он пока не сохраняет, поэтому любая правка блоков пропадает, когда сервер останавливается.
| Область | Состояние | Работает | Не готово |
|---|---|---|---|
| Сохранения и Anvil | Частично | Читает существующий мир Java Edition. Игроки сохраняются при чистом выключении сервера. | Измененные чанки на диск не пишутся. Мир другой версии данных не загружается, датафиксеров нет. В работе#78В работе#169 |
Чтобы открыть мир Java, передайте папку мира
Заголовок раздела «Чтобы открыть мир Java, передайте папку мира»Передайте серверу папку первым аргументом. Как собрать и запустить сервер, показано в разделе Quick start в README.
cargo run --release -- "<path to a world folder>"Папка должна существовать, иначе сервер напечатает “not a world folder” и завершится. Когда папка указана, сервер берет сид и список измерений из настроек генерации мира в сохранении, а сид из MCRS_WORLD_SEED и пресет из MCRS_WORLD_PRESET их не переопределяют. Чанки сервер читает из файлов регионов сохранения, Java Edition хранит их в формате Anvil.
В каждом чанке и в каждом файле игрока записан DataVersion, номер версии игры, которая этот файл сохранила. Сервер принимает файл, только если этот номер совпадает с версией игры в этой сборке. Сейчас это 26.4-snapshot-7 с версией мира 5127, она указана в version.json. Файл любой другой версии сервер отклоняет с ошибкой, в которой названы найденная и ожидаемая версии. Чанк без DataVersion он тоже отклоняет.
Старые миры не конвертируются
Заголовок раздела «Старые миры не конвертируются»В mcrs нет конвертера для сохранений старых версий и не будет, потому что mcrs идет за одним снапшотом за раз и не держит цепочку совместимости.1 Если у вас мир старой версии, откройте его один раз в ванильном клиенте нужного снапшота, чтобы игра его переписала, и только потом отдайте папку mcrs. Поле, которое не заявил ни один тип, тоже роняет загрузку, поэтому сервер не хранит такое поле как сырые байты.1
Без папки сервер генерирует мир
Заголовок раздела «Без папки сервер генерирует мир»Если запустить сервер без аргумента, он сгенерирует мир из пресета. На диск из этого мира ничего не попадает. Файлов игроков у него тоже нет, потому что путь к файлу игрока сервер строит от папки мира. Мир задают три настройки, и сервер читает их один раз при старте. Полный список настроек лежит в server_settings.rs.
| Переменная | Значение | По умолчанию |
|---|---|---|
MCRS_WORLD_SEED |
Сид, знаковое или беззнаковое 64-битное число | 0 |
MCRS_WORLD_PRESET |
normal или minecraft:normal, flat |
normal |
MCRS_DEFAULT_GAMEMODE |
Режим игры нового игрока | creative |
Генерация мира совпадает с ванилью в parity-тестах на эталонных сидах. Что покрывают эти тесты, рассказывает страница Parity.
Игроки сохраняются, чанки нет
Заголовок раздела «Игроки сохраняются, чанки нет»| Данные | Состояние |
|---|---|
| Файлы игроков | Сохраняются. Сервер записывает каждого игрока в players/data/<uuid>.dat в папке мира при отключении, а автосохранение пишет их каждые 6000 тиков, с тем же интервалом, что и в ванили |
| Чистая остановка с игроками | Работает#624. По первому SIGINT или SIGTERM сервер отключает всех игроков с ванильной причиной остановки, сохраняет их и выходит. Второй сигнал завершает работу сразу |
| Чанки и правки блоков | Не сохраняются. Сервер читает чанки, но никогда их не пишет, см. В работе#78 |
| Чистая остановка с чанками | Не сделана. Ожидание записи чанков - это В работе#169 |
level.dat, часы мира, погода, игровые правила |
Читаются, но пока не записываются. Их запись перечислена в В работе#78 |
Файл игрока, который не удалось разобрать, сервер бережет. Игрок заходит с пустым состоянием, и сервер никогда не сохраняет его поверх старого файла. Инвентарь из файла игрока тоже не теряется. Сервер хранит его как непрозрачные данные и записывает обратно без изменений, потому что код инвентаря удален и переписывается по спецификации.2
Чистую остановку проверяет короткий тест.
let player_file = player_dat_path(&world, offline_player_uuid("mcrs_test"));assert!(!player_file.exists(), "saved before the shutdown");
requested.store(true, Ordering::Relaxed);exited .recv_timeout(Duration::from_secs(30)) .expect("the server exits by itself after the request");server_thread.join().unwrap();
assert!(player_file.exists(), "{} is missing", player_file.display());Датапаки загружаются один раз, при старте
Заголовок раздела «Датапаки загружаются один раз, при старте»При старте сервер загружает в реестры ванильный датапак и ваши локальные паки. Ванильный пак берется из jar игры, а локальный пак - это каталог внутри mcrs/datapacks/ в корне ассетов сборки.
Пак можно проверить, не запуская сервер. Пример check_pack из крейта mcrs_minecraft_game_registries загружает ваш пак поверх ванильного, печатает все диагностики и завершается с ошибкой, если они есть.
cargo run -p mcrs_minecraft_game_registries --example check_pack -- "<data pack directory>"В каталоге должны быть pack.mcmeta и data/, то же написано в строке usage инструмента.
Перезагрузить пак на работающем сервере нельзя, поэтому после изменения пака сервер нужно перезапустить. /reload и включение паков на лету запланированы.4 По плану перезагрузка заменяет данные на границе тика и отклоняет изменения, от которых зависит сохраненный мир, например высоту типа измерения.
Источника о том, как сервер обращается с папкой datapacks внутри папки мира, пока нет, поэтому страница ничего об этом не утверждает.
Footnotes
Заголовок раздела «Footnotes»-
Не планируется#388 Решение читать сохранения только с целевой версией данных, без датафиксеров. ↩ ↩2
-
В работе#521 Отслеживает спецификацию и плагин инвентаря игрока. ↩
-
В работе#78 Отслеживает запись измененных чанков обратно в файлы регионов. ↩
-
В работе#316 Планирует перезагрузку датапаков на работающем сервере. ↩
Источники и проверка
Проверено: 26.4-snapshot-7, 51d45c26a, 2026-11-09
Переведено с версии 51d45c26a
- src/main.rs
- crates/mcrs_minecraft_engine_server/src/world_options.rs
- crates/mcrs_minecraft_server_settings/src/server_settings.rs
- crates/mcrs_minecraft_anvil/src/lib.rs
- crates/mcrs_minecraft_save/src/player.rs
- crates/mcrs_minecraft_engine/src/persistence.rs
- crates/mcrs_minecraft_datapack/src/root.rs
- crates/mcrs_minecraft_game_registries/examples/check_pack.rs
- tests/it/shutdown.rs
- assets/minecraft/version.json
- issue #78
- issue #169
- issue #316
- issue #388
- PR #624