Коротко: NBT (Named Binary Tag, «именованный двоичный тег») — формат данных, которым в Minecraft записывают всё, что делает конкретный предмет, блок или существо уникальным: собственное название меча, зачарование на нём, надпись на книге. В программе курса Minecraft + Python (10–14 лет, 18 месяцев, 156 занятий) это тема 19 из 31 — «NBT и теги предметов», и стоит она сразу после списков и словарей не случайно: NBT в игре устроен почти так же, как словарь в Python.
Формат придумал ещё Notch, первый разработчик Minecraft, и с тех пор он остаётся внутренним языком, которым игра описывает «этот конкретный меч», а не «меч вообще».
Чем NBT отличается от обычного ID предмета
ID блока или предмета — например, «алмазный меч» — говорит только о том, какой это тип вещи, и о нём уже есть отдельный справочник по ID блоков и предметов. NBT — совсем другой уровень: он не привязан к типу предмета вообще, а цепляется к конкретному экземпляру в инвентаре. Два совершенно одинаковых на вид алмазных меча могут иметь разный NBT: один простой, другой заколдован и подписан игроком. Технически говорят, что NBT принадлежит не предмету как типу, а стеку предметов (ItemStack) — конкретной кучке в конкретном слоте.
Что именно записано внутри тега
NBT хранится как пары «имя: значение», сгруппированные в фигурные скобки — это и называют компаундом (compound). Внутри компаунда могут лежать списки в квадратных скобках, строки, числа разных типов (byte, short, int, long, float, double) и даже другие компаунды — вложенные один в другой, как коробки одна в другой. Интересная деталь: в NBT нет отдельного типа «логическое значение» (true/false) — такие флаги хранят просто как число 0 или 1 в типе byte.
Для ребёнка, который уже прошёл тему списков и словарей на Python (подробнее в отдельной статье), эта структура выглядит знакомой: компаунд NBT — это практически словарь, а список NBT — это список Python, только записанный в формате самой игры, а не языка программирования.
Где в игре NBT встречается на самом деле
Проще всего увидеть NBT в команде /give: чтобы выдать не просто «алмазный меч», а заколдованный меч с собственным названием и надписью на клинке (lore), игрок добавляет к команде NBT-данные прямо в фигурных скобках после названия предмета. Та же логика работает в командах /summon (например, чтобы вызванное существо имело другое имя, которое показывается над головой), /fill и /setblock (чтобы поставленный блок имел дополнительные настройки), и в /clear — когда нужно удалить из инвентаря именно предмет с определённым NBT, а не все предметы этого типа сразу.
А если у игрока уже есть несколько одинаковых на вид мечей — как игра их различает
Именно через NBT. Игра не спрашивает «какой это тип предмета» — она читает NBT-компаунд конкретного стека в слоте инвентаря и видит разницу: у одного есть зачарование «Огненный аспект» и собственное название, у другого NBT вообще пустой. Снаружи в инвентаре это видно по названию и блеску заколдованного предмета, но технически разницу задаёт именно скрытый тег, а не цвет пикселя на иконке.
Зачем вообще учить синтаксис, если есть готовые генераторы NBT в интернете
Онлайн-генераторы NBT действительно существуют и упрощают набор сложного тега для готовой игры — ими пользуются и взрослые разработчики карт. Но на курсе цель другая: не собрать один конкретный меч как можно быстрее, а понять структуру настолько, чтобы читать и исправлять чужой NBT-код, когда что-то работает не так, как задумано. Генератор даёт готовую строку, но не объясняет, почему она именно такая — а именно это объяснение и есть учебный результат темы, а не сам предмет в финальном мире.
Почему эту тему ставят именно после списков и словарей, а не раньше
Потому что без понимания, что такое вложенная структура данных — список внутри словаря, словарь внутри списка — синтаксис NBT выглядит просто как бессмысленный набор фигурных и квадратных скобок. Когда ребёнок уже сам писал похожие структуры на Python в темах 12–13 программы (списки и словари, генерация лабиринта), тот же принцип в формате игры читается намного быстрее: это не новая идея, а знакомая идея в новой записи.
Есть и техническая причина для осторожности: синтаксис и набор доступных NBT-тегов в Minecraft за годы несколько раз менялся вместе с обновлениями игры (заметнее всего — после выхода версии 1.13), поэтому пример, найденный в старом видео или на старом форуме, может просто не сработать на текущей версии. Курс учит смотреть на актуальную структуру тегов, а не заучивать один пример навсегда.
Разбор одного примера по частям
Если разложить NBT-запись заколдованного и подписанного меча на составные части, получается понятная структура: внешние фигурные скобки — это компаунд этого конкретного предмета; внутри — поле с названием (строка в кавычках, то, что увидит игрок над предметом в инвентаре); рядом — поле со списком зачарований, а список — это уже квадратные скобки, и в нём может быть одно зачарование или несколько; каждое зачарование само по себе — ещё один маленький компаунд с названием зачарования и его уровнем как числом. Никакой магии здесь нет: просто несколько уровней вложенности, каждый из которых ребёнок уже видел на Python в виде словаря внутри списка или списка внутри словаря.
А есть ли что-то похожее на младшей ступени «Minecraft Старт»
Прямо в таком виде — нет. На ступени «Minecraft Старт» (6–10 лет) дети работают с Code Builder и командными блоками (тема 17 «NPC и Command Blocks» из 29 тем программы) — это упрощённый, визуальный способ управлять теми же возможностями игры, без необходимости вручную писать фигурные и квадратные скобки NBT-синтаксиса. Игра под капотом одинаково использует NBT, просто интерфейс ступени «Старт» скрывает эту деталь за понятными блоками команд. Прямая работа с NBT-текстом появляется именно на ступени «Minecraft + Python», когда ребёнок уже уверенно читает и пишет код, а не собирает команды из готовых блоков.
Нужно ли помнить все типы тегов наизусть
Нет — и в этом NBT похож на любую справочную систему: главное понимать принцип (компаунд, список, тип значения), а конкретные названия тегов для конкретного предмета всегда можно посмотреть в справочнике в нужный момент. Ниже — короткий ориентир по основным типам значений, которые встречаются внутри NBT-компаунда.
| Тип | Что хранит |
|---|---|
| byte | маленькое число или 0/1 вместо true/false |
| int, long | обычное целое число, длинное — для больших значений |
| float, double | число с запятой, в частности координаты |
| string | текст — название, надпись, имя |
| list / compound | список значений или вложенная структура из других тегов |
Что из этого вынести родителям
Если ребёнок показывает команду с кучей фигурных скобок после названия предмета — это не «сломанный код», а именно NBT, и это признак, что он уже работает не с готовыми предметами игры, а конструирует собственные, с конкретными свойствами. Полезный вопрос для разговора: «а что будет, если убрать этот тег?» — если ребёнок может объяснить, что именно изменится в поведении предмета, тему он усвоил не на уровне копирования чужого примера.
И ещё одна мелочь, которая помогает отличить уверенное понимание от механического заучивания: попросить ребёнка самостоятельно придумать собственный пример — например, лопату с личным названием и надписью на ней — и составить NBT-компаунд для неё с нуля, без подглядывания в готовый образец с занятия.