Форматы структур
Формат структуры — это способ хранения и загрузки структуры из файла или любого другого источника.
Формат | BlockState | Дополнительные блоки | CompountTag | Актуальный формат? |
---|---|---|---|---|
DungeonUtility_V2 | + | + | + | + |
DungeonUtility | + | + | + | + |
DungeonCore | + | + | - | - |
Structures | - | - | - | + |
DungeonUtility | - | - | - | - |
DungeonAPI | - | - | - | - |
DungeonAPI_V2 | - | - | - | - |
Зачем существуют различные форматы структур?
Dungeon Utility изначально писался как часть модификации Ancient Wonders/Dungeon craft. В случае Ancient wonders — мод использовал несколько различных библиотек для структур, что было крайне неудобно при его разработке и поддержании стабильности работы генерации. В случае Dungeon craft — мод всегда использовал только одну библиотеку структур, а из-за использования разных форматов в ней работа и загрузка структур могла быть нестабильной.
Dungeon Utility предлагает быстрый переход с разных библиотек без проблем с форматами структур.
Какой формат лучше использовать?
Формат DungeonUtility является форматом, который используется по умолчанию, однако имеет минус — весомый размер файла.
Формат DungeonUtility_V2 является новым форматом, который имеет достаточно компактный размер, при этом обладая неплохой скоростью загрузки. Формат представляет собой набор байтов.
Предпочитаемым форматом является именно последний, он предоставляет скорость и удобство работы. Ниже представлена техническая информация, которую можно пропустить, если вы не являетесь разработчиком.
Спецификация формата DungeonUtility_V2
Ти пы данных которые используются
Тип | Размер |
---|---|
byte | 1 |
short | 2 |
int | 4 |
Структура файла DungeonUtility_V2
Самый первый байт — версия формата.
Версии |
---|
-128 |
Версия DungeonUtility_V2 -128
После версии индут заголовки зоны. Зоны — это некоторое количество байтов, которое определяется в заголовке зоны. Заголовок зоны содержит: byte, int. byte определяет идентификатор зоны, int место где она заканчивается (если зона не поддерживается, ее чтение пропускается). Если заголовочный участок поврежден, чтение файла не предоставляется возможным.
Зона | Имя | Предназначени е | Приоритет чтения |
---|---|---|---|
-1 | EMPTY | Пропускающая зона | 0 |
- | MAP | Хранение информации по байту | - |
0 | DESCRIPTION | Описание | 10 |
1 | STATES | Описание блоков, которые используются | 5 |
2 | PLANE_BLOCKS | Разрез структуры | -5 |
Чем больше приоритет, тем раньше читается зона.
EMPTY
Зона которая скипает чтение информации внутри себя, может использоваться, в случае повреждения байта, отвечающего за id зоны, также может использовать в случае не поддержки зоны
MAP
Абстрактная зона, представляющая собой своего рода HashMap. Первый байт количество полей, дальше идут сами поля, каждое поле представляет собой: два байта, первый хранит тип информации, второй используется как ключ, по которому определяется количество байтов дальше, и значение, зависящее от типа.
Тип | Имя | Разм ер |
---|---|---|
-1 | EMPTY | Не имеет |
0 | BYTE | 1 |
1 | SHORT | 2 |
2 | INT | 4 |
3 | STRING | 2 байта (short) + прочитанный шорт + минимальное значение шорт |
Читается шорт, прибавляется минимальное значение шорт, получается последовательность байтов строки.
DESCRIPTION
Наследуется от зоны MAP.
Ключ | Имя |
---|---|
1 | X_OFFSET |
2 | Y_OFFSET |