Коротко: 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-компаунд для неї з нуля, без підглядання в готовий зразок із заняття.