что такое тег данных в майнкрафт
[Гайд] Разбираем NBT теги: Предметы и транспорт
Предметы:
Count: Количество предметов.
Slot: Слот, в который будет помещён предмет.
Damage: Дополнительный параметр предмета. Например: Цвет шерсти.
id: ID предмета.
tag (Массив): NBT параметры вызываемого объекта.
Обычная вагонетка: Удалено в версии 13w02a.
Вагонетка с сундуком или воронкой:
Items (Массив): Предметы, которые содержатся в контейнерах вагонетки. О том, как работать с предметами было написано выше.
Вагонетка с печкой:
PushX: Сила толчка по оси X.
PushZ: Сила толчка по оси Z.
Fuel: Количество тиков до того момента, после которого в печке закончится топливо.
Вагонетка с воронкой:
TransferCooldown: Количество тиков до того момента, после которого в воронку поступит следующий предмет.
Вагонетка со спавнером: Параметры спавнера. О том, как с ними работать, будет написано в одной из следующих статей.
Вагонетка с командным блоком:
Command: Команда, прописанная в командном блоке.
SuccessCount: Сила сигнала, получаемая компаратором в результате выполнения команды.
LastOutput: Информация, выводимая при выполнении команды в специальное поле командного блока.
TrackOutput: Неизвестно.
[Гайд] Изучаем структуру NBT с нуля
Итак, давайте определимся с тем, что-же такое структура NBT. Упрощённое определение находится ниже.
NBT параметры могут быть как обязательными, так и опциональными. Все они нужны для того, что-бы управлять теми, или иными объектами. Например, с их помощью можно выдавать мобам различные эффекты, броню, и прочее.
NBT код, с версии 1.7, может быть изменён непосредственно в игре, что значительно упрощает работу создателей карт, так как до этого изменить дополнительные параметры было возможно только используя специальные дополнения.
Итак, теперь давайте разберёмся с символами, которые нам потребуются. Фигурные скобки (< и >) потребуются нам в самом начале. Например: /summon Zombie <var:1>. Также фигурные скобки нужны, если какой-либо объект в массиве может иметь дополнительные параметры (Например: Параметры брони моба, /summon Zombie
Список всех возможных параметров для тех, или иных объектов можно найти здесь. Они не переведены на русский язык. Поэтому их придётся переводить самому.
Minecraft Wiki
Из-за новой политики Microsoft в отношении сторонних ресурсов, Minecraft Wiki больше не является официальной. В связи с этим были внесены некоторые изменения, в том числе и обновлён логотип вики-проекта. Подробности на нашем Discord-сервере.
Формат NBT
Формат 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:
Списки и составные теги могут быть вложены. Следует отметить, что в списке списков подсписки могут иметь разные типы элементов.
Формат файлов [ ]
Использование в Minecraft [ ]
Использование формата NBT в Minecraft местами является странным. В некоторых случаях пустые списки могут быть представлены списками байтов (или тегов End в более новых версиях Minecraft), а не списками правильного типа. К тому же, каждый корневой тег имеет пустое название и включает только один составной тег с самими данными и названием. Например:
Ещё одна заметная странность — это то, что, хотя оригинальная спецификация Нотча допускает пробелы в названиях тегов и приведённый в ней пример использует это, в Minecraft нет файлов с пробелами в тегах. Также использование прописных букв в названиях тегов непостоянно: где-то с прописной буквы пишется каждое слово, где-то — каждое, кроме первого, а где-то используются только строчные буквы.
Область применения [ ]
Программное обеспечение [ ]
Mojang предоставила экземпляры классов Java для работы с NBT, предназначенные для использования разработчиками, как часть исходного кода для преобразователя McRegion → Anvil. Помимо этого, сообщество разработало программы для просмотра и изменения сжатых и несжатых файлов NBT, например, NBTExplorer и NBT2YAML (все вышеприведённые программы поддерживают последние версии NBT).
Java Edition
Формат NBT
Формат 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:
Формат файлов
Использование в Minecraft
Использование формата NBT в Minecraft местами является странным. В некоторых случаях пустые списки могут быть представлены списками байтов (или тегов End в более новых версиях Minecraft), а не списками правильного типа. К тому же, каждый корневой тег имеет пустое название и включает только один составной тег с самими данными и названием. Например:
Ещё одна заметная странность — это то, что, хотя оригинальная спецификация Нотча допускает пробелы в названиях тегов и приведённый в ней пример использует это, в Minecraft нет файлов с пробелами в тегах. Также использование прописных букв в названиях тегов непостоянно: где-то с прописной буквы пишется каждое слово, где-то — каждое, кроме первого, а где-то используются только строчные буквы.
Область применения
Программное обеспечение
Mojang предоставила экземпляры классов Java для работы с NBT, предназначенные для использования разработчиками, как часть исходного кода для преобразователя McRegion → Anvil. Помимо этого, сообщество разработало программы для просмотра и изменения сжатых и несжатых файлов NBT, например, NBTExplorer и NBT2YAML (все вышеприведённые программы поддерживают последние версии NBT).
Java Edition
Minecraft Wiki
The Minecraft Wiki is no longer considered as official by Microsoft and therefore several changes are required to be made, including to the wiki’s logo. Please read this announcement for more information.
NBT format
The Named Binary Tag (NBT) format is used by Minecraft for the various files in which it saves data. The format is designed to store data in a tree structure made up of various tags. All tags have an ID and a name.
Another more user-friendly format of NBT is in plain string, as used in commands. This format is referred to as SNBT, short for stringified NBT.
Contents
SNBT format [ ]
SNBT, also known as data tag, is often used in command in Java Edition. It can be described starting with attribute-value pairs enclosed in curly braces. One common usage of data tags in Java Edition is in commands, used to specify complex data for any entity.
A data tag consists of zero or more attribute-value pairs delimited by commas and enclosed in curly braces. Each attribute-value pair consists of an tag name and the tag’s value, separated by a colon. Some values, however, may be a compound tag and themselves contain attribute-value pairs, allowing a data tag to describe a hierarchical data structure.
Tag’s name can be enclosed with double quotes if necessary.
It is different from the JSON format; hence, any JSON used in NBT, such as raw JSON text, must be enclosed within a string tag.
Format of each type [ ]
The defined data structures also expect the values to be of the correct type.
» ( » within needs to be escaped to \» ), or ‘
‘ ( ‘ within needs to be escaped to \’ )
Each tag can be of any type.
NBT object [ ]
When the game is running, entities and block entities in loading chunks are stored in the memory. They are not stored with NBT, instead, they are just programmatic objects.
When processing NBT operations, the game needs to generate programmatic NBT object from entities/block entities, parse SNBT into NBT object, modify entities/blocks based on provided NBT object, or convert NBT object into SNBT.
Generating NBT object [ ]
When generating NBT from an entity/block, the entity/block’s properties are added into programmatic NBT object.
Note that not all properties are added. For example, the value of whether a player is opening a chest won’t be added into NBT object.
A value is added with certain data type. For example, a resource location will be converted to a string value.
These NBT objects will also be stored into game’s save files as NBT files when the game quits or automatically saves. So the data structures that NBT tags describe and the data type for each tag are basically the same ones used in game’s save files. These data structures are described in other articles and commands expect data tags to use the same attribute names (which are case-sensitive):
Objects | Examples |
---|---|
Block entities | chests, furnaces, command blocks, mob spawners, signs, etc. |
Items | items in inventories (includes specifications for enchantments, lore, custom names, etc.) |
Item entities | items on the ground |
Mobs | creepers, cows, villagers, etc. |
Projectiles | arrows, fireballs, thrown potions, etc. |
Vehicles | boats, minecarts, etc. |
Dynamic tiles | primed TNT, falling sand/gravel/concrete powder/anvils |
Other entities | firework rockets, paintings, and item frames |
Conversion to SNBT [ ]
A programmatic NBT object would be converted to a SNBT when trying to get it with /data get etc.
And a string is always enclosed by double or single quotes.
Other data types are expressed as the #Format of each type table above.
Conversion from SNBT [ ]
An SNBT will be converted to a programmatic NBT object when parsed by the game.
A number that followed by a letter (B, S, L, F, D, or their lowercase) is resolved to corresponding data type. For example, 3s for a short, 3.2f for a float, etc. The letter can be uppercase or lowercase. When no letter is used, it assumes double if there’s a decimal point, int if there’s no decimal point and the size fits within 32 bits, or string if neither is true.
A square-bracketed literal is assumed to be a list unless an identifier is used: [I;1,2,3] for an int array and [L;1L,2L,3L] for a long array.
true and false are converted as 1b and 0b respectively.
Modifying entity/block based on NBT object [ ]
Modifying entity/block based on a programmatic NBT object is not a simple progress. All certain tags need to be resolved before changing properties of a block/entity. Note that only certain properties can be changed. For example, when using /data command to modify a block entity, its coordinates cannot be changed.
If a property needs a value of resource location and gets a string tag, the string will be converted to a resource location.
If a property needs a value of JSON text and gets a string tag, the string will be parsed into JSON text object.
If a property needs a numeric value of certain type and gets a numeric tag of wrong type, the number will get some rounding operation and converts to the required type.
If a property needs a numeric value and gets a non-numeric tag, the number will become 0.
If a property needs a string value and gets a non-string tag, the string will become an empty string.
If a property needs a list or array of certain type and gets a wrong-type tag, a empty list/array will be got.
If a property needs a compount tag and gets a non-compount tag, a empty compount tag will be got.
Testing NBT tags [ ]
They check only for the presence of the provided tags in the target entity/block/storage. This means that the entity/block/storage can have additional tags and still match. This is true even for lists: the order and number of elements in an list a list is not considered, and as long as every requested element is in the list, it matches even if there are additional elements. For example, an entity with data
However, the order and number of elements in an byte/long/int array is acknowledged.
NBT file [ ]
An NBT file is a zipped Compound tag, with the name and tag ID included. The file in the zip must contain the Compound tag that it is as the first bytes. Some of the files utilized by Minecraft may be uncompressed, but in most cases, the files follow Notch’s original specification and are compressed with GZip.
TAG definition [ ]
A tag is an individual part of the data tree. The first byte in a tag is the tag type (ID), followed by a two byte big-endian unsigned integer for the length of the name, then the name as a string in UTF-8 format (Note TAG_End is not named and does not contain the extra 2 bytes; the name is assumed to be empty). Finally, depending on the type of the tag, the bytes that follow are part of that tag’s payload. This table describes each of the 13 known tags in version 19133 of the NBT format:
The List and Compound tags can be and often are recursively nested. It should also be noted that, in a list of lists, each of the sub-lists can list a different kind of tag.
Usage [ ]
Minecraft sometimes uses the NBT format inconsistently; in some instances, empty lists may be represented as a list of Byte tags rather than a list of the correct type, or as a list of End tags in newer versions of Minecraft, which can break some older NBT tools. Additionally, almost every root tag has an empty name string and encapsulates only one Compound tag with the actual data and a name. For instance:
Additionally, there is also inconsistent use of letter case, mostly either camelCase or PascalCase, but sometimes even in all lowercase.