
Формат файла региона — это формат хранения фрагментов Minecraft , представленных в бета-версии 1.3, в которых группы по 32 × 32 фрагмента (512 × 256 × 512 блоков, всего 67 108 864) хранятся в файле региона. Этот формат файла заменил формат уровня Alpha, который использовался с этапа разработки Infdev, в котором фрагменты хранились в отдельных файлах. Можно сказать, что регион — это часть файловой системы, где заголовок показывает позиции игроков для каждого файла, а сектор — размер выделения.
Система основана на McRegion, моде от Scaevolus, также известный как разработчик проекта Optimine. Формат McRegion был принят практически без изменений, за исключением добавления таблицы временных меток обновления фрагментов. JahKob утверждает, что этот формат до 7 раз быстрее, чем предыдущая система. Разница в общем размере файла в мире между форматом файла региона и форматом уровня Alpha незначительна.
Формат был заменен форматом файла Anvil; однако формат файла Anvil внес изменения только в формат Chunk и изменил только расширения файлов региона с «.mcr» на «.mca».
Файлы регионов
Местоположение файла региона
Файлы региона находятся в подпапке мирового каталога, называемой «region», и имеют имена в виде r. x . z .mcr
, где x и z — координаты области. Координаты области, к которой принадлежит блок, можно найти, взяв нижнюю часть координат блока, разделенную на 32.
В Java Edition :
int regionX = (int) floor (chunkX/32.0); int regionZ = (int) floor (chunkZ/32.0);
Или в битовой операции (битовый сдвиг):
int regionX = chunkX >> 5 int regionZ = chunkZ >> 5
Например, фрагмент в (30, -3) будет в области (0, -1), а один в (70, -30) будет в (2, -1).
Структура
Файлы региона начинаются с заголовка размером 8 КБ, содержащего информацию о том, какие фрагменты присутствуют в файле региона, когда они были обновлены в последний раз , и где их можно найти. Местоположение в файле региона фрагмента в (x, z) (в координатах фрагмента) должно быть найдено по смещению байта 4 * ((x mod 32) + (z mod 32) * 32) в его файле региона. В случае, если значения x mod 32 или z mod 32 отрицательны (что происходит при использовании оператора% в Java/C/C ++), просто добавьте 32 или игрок может заменить mod на & (оператор AND). Расчет смещения выглядит так: 4 * ((x & 31) + (z & 31) * 32). Его временная метка может быть найдена на 4096 байт позже в файле.. Остальная часть файла состоит из данных размером до 1024 блоков, перемежающихся с неиспользуемым пространством.
byte | 0-4095 | 4096-8191 | 8192… |
---|---|---|---|
description | местоположения (1024 записи) | отметки времени (1024 записи) | блоки и неиспользуемое пространство |
Расположение блока
Информация о местоположении для блока состоит из четырех байтов, разделенных на два поля: первые три байта представляют собой смещение (с прямым порядком байтов) в секторах по 4 КиБ от начала файла, а оставшийся байт дает длину чанк (также в секторах по 4 КиБ, с округлением в большую сторону). Чанки всегда имеют размер менее 1 МБ. Если фрагмент отсутствует в файле региона (например, потому что он еще не был создан или перенесен), оба поля равны нулю.
байт | 0 | 1 | 2 | 3 |
---|---|---|---|---|
description | смещение | количество секторов |
Чанк со смещением 2 начинается сразу после таблицы временных меток.
Временные метки фрагмента
Записи в таблице временных меток являются отдельными четырехзначными. байтовые целые числа с прямым порядком байтов, представляющие время последней модификации блока в секундах эпохи.
byte | 0 | 1 | 2 | 3 |
---|---|---|---|---|
описание | отметка времени |
Данные блока
Данные блока начинаются с символа ( big-endian) четырехбайтовое поле длины, которое указывает точную длину оставшихся данных блока в байтах. Следующий байт указывает схему сжатия, используемую для данных блока, а оставшиеся (длина 1) байты являются сжатыми данными блока.
Minecraft всегда заполняет последний данные блока должны иметь длину, кратную 4096 Б (чтобы весь файл имел размер, кратный 4 КБ). Minecraft не принимает файлы, в которых последний фрагмент не заполнен. Обратите внимание, что это заполнение не включено в поле длины.
byte | 0 | 1 | 2 | 3 | 4 | 5 … |
---|---|---|---|---|---|---|
описание | длина (в байтах) | тип сжатия | сжатые данные (длина — 1 байт) |
В настоящее время определены три схемы сжатия:
значение | метод |
---|---|
1 | GZip (RFC1952) (на практике не используется) |
2 | Zlib (RFC1950) |
3 с версии до 1.15.1 | [ сохраняйте его несжатым ] (на практике не используется) |
Несжатые данные имеют формат NBT и соответствуют информации, подробно описанной в статье о формате блока; при сжатии по схеме сжатия 1 сжатые данные будут такими же, как и содержимое на диске файла фрагмента Alpha. Обратите внимание, что блоки всегда сохраняются с использованием схемы сжатия 2 официальным клиентом.
Если значение схемы сжатия увеличивается на 128, сжатые данные сохраняются в файле с именем c. x . z .mcc
, где x и z — координаты блока вместо обычного положения.
Миграция и level.dat

Как выглядит Minecraft при преобразовании в новый формат.
Beta 1.3 преобразует любые «старые» фрагменты в файлы регионов перед загрузкой мира, а не постепенно, когда они загружаются во время игры. В рамках преобразования level.dat
обновляется с TAG_Int («версия») (обратите внимание на регистр), установленным на 19132. В бета-версии 1.3 также представлено новое поле имени уровня, TAG_String («LevelName» ). Также введен новый TAG_Byte («Спящий») в проигрывателе TAG_Compounds — level.dat в одиночной игре, [имя игрока] .dat в мультиплеере, который указывает, находится ли игрок в кровати. Он имеет значение 1 (истина) или 0 (ложь). Для бета-версии 1.8 был добавлен TAG_Int («GameType»). В бета-версии 1.9 был добавлен TAG_byte («хардкор»).
В остальном формат level.dat не изменился.
- Формат уровня Java Edition
- Формат блока
- Формат файла Anvil
Внешние ссылки
- Объявление Mojang о новом формате региона; Джеб помогает разработчикам инструментов
- McRegion
- RegionFile в Java
- RegionFileCache в Java
- Найти регион файл с координатами
Программное обеспечение
Сообщество разработало программы для работы с файлами регионов:
Имя | Описание | Снимок экрана |
---|---|---|
McRegion | Этот мод оптимизирует способ хранения фрагментов на диске, что означает, что паузы для загрузки или сохранения фрагмента, когда игрок перемещается по миру, становятся намного короче и меньше заметно. | |
Minecraft Region Fixer | Этот инструмент представляет собой скрипт Python, который пытается исправить проблемы в файлах региона. Он может найти некоторые типичные ошибки (поврежденные фрагменты, неправильно расположенные фрагменты, проблемы с слишком большим количеством объектов) и может исправить эти ошибки различными способами (удаление фрагментов, замена их резервной копией или перемещение фрагмента). Это приложение командной строки. | |
MCA2NBT | Простая команда Unix — line для преобразования файла региона Minecraft .mca (в формате наковальни) в каталог с тем же базовым именем, содержащий несжатый файл NBT для каждого из его фрагментов. | |
Сканер регионов | Java Edition 1.7.10 (только) Утилита командной строки Java для анализа и массового редактирования файлов регионов |