Только для Java Edition |
server_level.dat — это имя файла, используемого сервером Minecraft Classic для загрузки и сохранения игровой карты. Файл может быть сохранен для сохранения содержимого, которое помогает защитить конструкции от взломщиков или использовать файл для редактирования карты.
Файл сжимается с помощью gzip для экономии места (поскольку файлы могут оказаться достаточно большими из-за чего угодно, даже если воздух считается блоком).
(Примечание: в этом примере используется файл server_level.dat по умолчанию с размером 256×256×64. Файлы уровней с большими размерами могут отличаться размером байтов.)
В файле уровня server.level.dat Майнкрафт выгружает информацию об уровне для постоянного хранения. Поскольку этот файл является в основном необработанными данными уровня, он может быть довольно большим: обычный размер размером 256×256×64 имеет размер 4 мегабайта. Однако файл сжимается с помощью gzip. Большинство значений блока равны 0 (пустое пространство), поэтому, благодаря сжатию, размер значительно уменьшается, обычно до нескольких сотен килобайт.
После распаковки файла данных (проигрыватель может просто распаковать сам файл, используя инструмент, который может распаковать сжатые файлы), последовательно файл данных состоит из числа 656127880 в виде 32-разрядного целого числа (0x27 0x1B 0xB7 0x88 в HEX), за которым следует номер 2 в виде байта (0x02 в HEX), затем следует сериализованный экземпляр класса Java-файла уровня. Значения блока уровня (тип материала, например камень) хранятся внутри байтового массива внутри этого класса.
Первые 65536 последовательных байтов массива составляют самый верхний «кусочек» 256×256 уровня, причем самый северный ряд байтов слева направо находится в местах 0 ... 255, строка ниже этой, слева направо, места 256 ... 511 и т.д. Карты по умолчанию имеют глубину 64 "щепки".
При распаковке формат файла выглядит следующим образом:
Позиция | Размер (байты) | Название | Описание |
---|---|---|---|
0 | 4 | Магический идентификатор | Магический идентификатор — это постоянное число, используемое для идентификации формата файла Minecraft. Текущее значение 0x271bb788. |
4 | 1 | Номер версии | Номер версии представляет текущий формат, используемый для сохранения уровня. Текущее значение 2. |
5 | Переменная | Сериализованный класс Java com.mojang.minecraft.level.Level | Более подробная информация о формате сериализации, используемом Java, доступна в руководство по эксплуатации, тем не менее, самый простой способ отредактировать файл — это использовать классов, уже предоставленные официальным minecraft-server.jar file. |
Другие читали и модифицировали данные карты, просто обращаясь к необработанному байтовому массиву в файле файла данных. Для этого проигрыватель распаковывает его, вносит изменения в байты, в которых хранится массив байтов, и затем снова сжимает его. Поскольку игрок редактирует его в необработанном виде, он должен сохранить первые 344 байта (14E в шестнадцатеричном формате) без изменений. Следующие 256×256×64 байта — это место, где хранится байтовый массив. Кроме того, также возможно изменить координаты места появления таким образом, если игрок знает, где искать: есть 3 целочисленных значения, начиная с байта 284, и, таким образом, перезапись следующих 12 байтов (3 целых числа) позволит игроку изменить спаун место расположения.