FANDOM


Формат NBT (від англ. Named Binary Tag — «іменований двійковий тег») використовується Minecraft в різних файлах для зберігання даних. Формат описаний Нотчем в дуже короткій специфікації. Формат розроблений для зберігання даних в структурі-дереві, що складається з різних тегів. У кожного тега є ідентифікатор і назву. Оригінальна відома версія NBT, 19132, була введена в Beta 1.3, і з тих пір була оновлена до 19133 разом з Anvil; в цьому оновленні був доданий тег для масиву цілочисельних змінних. Формат NBT був ще в Indev і використовував теги з 0 по 10.

Визначення тегу Редагувати

Тег — окремий елемент дерева даних. Перший байт в тезі — це тип тега (також званий ідентифікатором або ID), потім 2 байта зберігають довжину назви, потім назва в представляюваним рядком у форматі UTF-8 (слід зазначити, що TAG _ End не має назви і не включає додаткові 2 байта, тому припускають, що назва пуста). Назви тегів можуть містити пробіли, хоча сам Minecraft не має таких тегів. Нарешті, такі байти — вміст тега, залежне від типу тега. Таблиця нижче описує 12 відомих тегів у версії NBT 19133:

ID Іконка Тип тегу Вміст Опис Ємність
0 TAG_End Ні. Використовується для позначення кінця складових тегів. У цього тега немає назви, тому він завжди представлений одним байтом, рівним 0. Також цей тип використовується в порожніх тегах списків.
1 TAG Byte TAG_Byte 1 байт / 8 бітов, зі знаком Цілокількісний тип зі знаком. Іноді використовується для логічних змінних. Весь проміжок від -(27) до (27 - 1)
(від -128 до 127)
2 TAG Short TAG_Short 2 байта / 16 бітов, зі знаком, зворотний порядок байтів Цілокількісний тип зі знаком. Весь проміжок від -(215) до (215 - 1)
(від -32 768 до 32 767)
3 TAG Int TAG_Int 4 байта / 32 біта, зі знаком, зворотний порядок байтів Цілокількісний тип зі знаком. Весь проміжок від -(231) до (231 - 1)
(від -2 147 483 648 до 2 147 483 647)
4 TAG Long TAG_Long 8 байт / 64 біта, зі знаком, зворотний порядок байтів. Цілокількісний тип зі знаком. Весь проміжок від -(263) до (263 - 1)
(від -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807)
5 TAG Float TAG_Float 4 байта / 32 біта, зі знаком, зворотний порядок байтів, IEEE 754-2008, binary32 Тип чисел з плаваючою крапкою із знаком. Точність змінюється протягом числової прямої;
див. Число одинарної точності.
6 TAG Double TAG_Double 8 байт / 64 біта, зі знаком, зворотний порядок байтів, IEEE 754-2008, binary64 Тип чисел з плаваючою крапкою із знаком. Точність змінюється протягом числової прямої;
див. Число одинарної точності.
7 TAG Byte Array TAG_Byte_Array Один TAG_Int, позначає розмір, потім розмір тегів TAG_Byte. Масив байтових змінних. Максимальна кількість елементів змінюється від (231 — 9) до (231 — 1) (від 2 147 483 639 до 2 147 483 647) і залежить від поточної JVM.
8 TAG String TAG_String Один TAG_Short, позначає довжину, потім рядок у форматі UTF-8 з розміром довжини. Строка в форматі UTF-8. Вона має розмір, а не завершується нулем. 32 767 точек коду UTF-8 (див. UTF-8; найпоширеніші символи складаються з однієї точки коду.
9 TAG List TAG_List Один TAG_Byte, позначає тип, потім TAG_Int, позначающий розмір, потім розмір тегів типу тип. Список навантажень тегів без ID і без назв. У зв'язку з обмеженнями JVM і реалізацією ArrayList, максимальний розмір списку — (231 - 9) або 2 147 483 639. Також слід зазначити, що максимальна глибина розміщення списків і складових тегів дорівнює 512.
10 TAG Compound TAG_Compound Повні теги, потім один тег TAG_End. Список повних тегів, що включає їх типи, назви і які приносить. Всі теги повинні мати різні імена. На відміну від списків, обмеження на кількість тегів в складеному тезі немає (хоча є неявне обмеження у вигляді розміру віртуальної пам'яті). Також слід зазначити, що максимальна глибина розміщення списків і складових тегів дорівнює 512.
11 TAG Int Array TAG_Int_Array Один TAG_Int, позначающий розмір, потім розмір тегів TAG_Int. Масив тегів TAG_Int. Максимальна кількість елементів змінюється від (231 - 9) до (231 - 1) (від 2 147 483 639 до 2 147 483 647) і залежить від поточної JVM.

Списки і складові теги можуть бути вкладені. Слід зазначити, що в списку списків підсписки можуть мати різні типи елементів.

Формат файлів Редагувати

Файл NBT — це стислий GZip складовою тег, що включає назву і тип. Деякі такі файли, використовувані Minecraft, не є стисненими GZip, хоча в більшості випадків специфікація Нотча, відповідно до якої стиснення, дотримується. В Xbox 360 виданні чанки стискаються XMemCompress, різновидом алгоритму стиснення LZX. Заголовка, що вказує версію або будь-яку іншу інформацію, в файлах немає, версія вказана тільки в файлі level.dat.

Використання в Minecraft Редагувати

Використання формата NBT в Minecraft місцями є дивним. У деяких випадках порожні списки можуть бути представлені списками байтів (або тегів End в більш нових версіях Minecraft), а не списками правильного типу. До того ж, кожен кореневої тег має пусте назва і включає тільки один складовою тег з самими даними і назвою. Например:

  • TAG Compound Кореневої тег для більшості структур NBT в Minecraft.
    • TAG Compound Назва: Єдиний тег, що міститься в кореневому тезі. Він має назву і містить самі дані.

Ще одна помітна дивина — це те, що хоча оригінальна специфікація Нотч допускає прогалини в назвах тегів, і наведений в ній приклад використовує це, в Minecraft немає файлів з пробілами в тегах. Також використання великих літер в назвах тегів не постійно: десь з великої літери пишеться кожне слово, десь — кожне, крім першого, а де-то використовуються тільки малі літери.

Галузь застосування Редагувати

  • level.dat зберігаються в сжатому форматі NBT.
  • Файли <player>.dat зберігаються в сжатому форматі NBT.
  • idcounts.dat зберігаються в несжатому форматі NBT.
  • villages.dat зберігаються в сжатому форматі NBT.
  • Файли map_<#>.dat зберігаються в сжатому форматі NBT.
  • servers.dat, використовується для зберігання списку збережених серверів як нестислий формат NBT.
  • Чанки зберігаються в сжатому форматі NBT в файлах галузей.
  • scoreboard.dat зберігаються в сжатому форматі NBT.
  • Натуральні структури зберігаються в сжатому форматі NBT.

Програмне забезпечення Редагувати

Mojang надала екземпляри класів Java для роботи з NBT, призначені для використання розробниками, як частина вихідного коду для преобразника McRegion → Anvil. Крім цього, співтовариство розробило програми для перегляду і зміни стислих і нестислих файлів NBT, наприклад, NBTExplorer і NBT2YAML (всі вищенаведені програми підтримують останні версії NBT).


Мови: Формат NBT

Community content is available under CC-BY-SA unless otherwise noted.