Классический формат карт
Классический формат карт — формат хранения файлов игрового мира, который используется во всех версиях Classic. Для сжатия файлов используется утилита gzip. Файлы карты содержат краткое заглавие, в котором содержатся объекты для Java-сериализации. В одиночной игре, этим файлам присваивается расширение ".mine". Уровни, которые используются сервером режима Creative и версии Classic называются "server_level.dat". Эти файлы поддаются резервному копированию, что даёт возможность сохранять различные временные варианты файлов карты, чтобы потом, например, в случае массового гриферства, была возможность восстановления одного из старых вариантов. Также эти файлы хранения карт можно редактировать при помощи редакторов уровней.
Поскольку формат этих карт зависит от метода сериализации данных с помощью Java, наиболее легким способом оперирования с ними является работа через сам Classic сервер, minecraft-server.jar. Сэмпл кода показывает как построить редактор уровней, основой для которого будет служить minecraft-server.jar.
Формат файлов
В несжатом варианте, форматы файлов следующие:
Позиция | размер (в байтах) | Название | Описание |
---|---|---|---|
0 | 4 | Magic ID | «magic ID» постоянное число, целью которого является определение формата файла Minecraft. Текущее значение 0x271bb788. |
4 | 1 | Номер версии | Номер версии представляет формат карт, который используется для сохранения уровня. Текущее значение составляет 2. |
5 | Переменная | Сериализированный Java Class файл com.mojang.minecraft.level.Level | Больше информации про сериализацию формата карт с помощью Java Вы можете прочитать здесь, однако, наиболее легким способом редактирования файлов карты является использование class-файлов, которые официально поддерживаются minecraft-server.jar файлом. |
Доступ к массиву данных
Наиболее интересной частью уровня является наполнение его блоками. Каждый байт в этом массиве данных определяет тип блока, и его размещение в игровом мире. Для первого, как правило, есть два варианта доступа к массиву данных:
Вы можете десериализировать .dat файл непосредственно в экземпляр файла уровня для работы внутри среды Java, что даст доступ к таким же файлам уровня, которые использует сервер игры. Это позволит Вам устанавливать блоки, размеры, точку возрождения и другие параметры карты непосредственно влияя на файлы её сохранения. Предварительная декомпрессия не требуется, потому-что Java сжимает и разжимает файлы формата gzip в реальном времени. Чтобы загрузить Ваш файл с данными обратно в class уровня, нужно интегрировать специальное "разрешение" в файл class уровня. Его включает в себя файл minecraft-server.jar. Для примера, можно просмотреть страницу классы.
Другой метод основан на чтении и модификации файлов карты методом подключения к сырому массиву данных в них. Для этого вам придется разжать эти файлы, внести в них изменения, и сжать обратно. Так как Вы редактируете сырой код, вам потребуется держать первые 344 (14Е в HEX) байтов нетронутыми. Кроме того, с помощью этого способа можно изменять координаты точки спауна, если Вы знаете, где искать: есть 3 целочисленных значения начиная с позиции 284, и изменение следующих 12 байтов (3 целочисленных значения) приведет к смене места размещения точки возрождения.
(Примечание: данный метод может изменятся в зависимости от изменений в программной среде Java)