Участник:User 100287610/Server level.dat

Материал из Minecraft Wiki
Перейти к: навигация, поиск

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.

Доступ к массиву байтов[править | править код]

У одного обычно есть два варианта для доступа к байтовому массиву блоков:

Проигрыватель может десериализовать сжатый файл .dat непосредственно обратно в экземпляр объекта Level внутри Java, таким образом имея доступ к экземпляру объекта Level точно так же, как это делает Minecraft Server. Это позволило бы игроку устанавливать блоки, размеры, точку спауна и другие аспекты карты напрямую, вызывая методы экземпляра объекта Level. Ручная распаковка не требуется перед загрузкой, потому что Java может сжимать и распаковывать сжатые файлы на лету. Чтобы загрузить файл данных обратно в экземпляр класса Level, игроку потребуется определение класса для класса Level. Это включено в файл minecraft-server.jar. Пример этого можно увидеть в классе создания и сохранения.

Другие читали и модифицировали данные карты, просто обращаясь к необработанному байтовому массиву в файле файла данных. Для этого проигрыватель распаковывает его, вносит изменения в байты, в которых хранится массив байтов, и затем снова сжимает его. Поскольку игрок редактирует его в необработанном виде, он должен сохранить первые 344 байта (14E в шестнадцатеричном формате) без изменений. Следующие 256×256×64 байта — это место, где хранится байтовый массив. Кроме того, также возможно изменить координаты места появления таким образом, если игрок знает, где искать: есть 3 целочисленных значения, начиная с байта 284, и, таким образом, перезапись следующих 12 байтов (3 целых числа) позволит игроку изменить спаун место расположения.