Команда /give не работает в Minecraft 1.21: старый синтаксис умер, вот новый
В Java Edition 1.20.5 Mojang заменила старые NBT-теги {фигурные скобки} на систему компонентов [квадратные скобки]. Команды из гайдов 2022–2023 года не работают в 1.21 именно поэтому. Таблица замен — ниже.
Если твоя команда /give внезапно выдаёт красную ошибку в 1.21 — дело в синтаксисе: начиная с Java Edition 1.20.5 Mojang полностью убрала старые NBT-теги в фигурных скобках и заменила их системой компонентов в квадратных. Вместо <code>/give @p diamond_sword{Enchantments:[...]}</code> теперь пишется <code>/give @p diamond_sword[enchantments={sharpness:5}]</code>.
Почему /give перестала работать в 1.21 — что изменилось?
Mojang переписала систему хранения данных предметов в версии 1.20.5 (апрель 2024). До этого всё лежало в одном теге <code>tag</code> — бинарный NBT-формат без строгой структуры. Игра просто читала что есть, не проверяя.
Теперь каждый параметр предмета — отдельный именованный компонент. Парсер стал строгим: неправильный синтаксис сразу бросает ошибку в чат. Именно поэтому команда из видео 2022–2023 года работала раньше, а сейчас — нет.
Короче: не в 1.21 что-то сломалось. Mojang изменила формат ещё в 1.20.5 — просто большинство гайдов на YouTube до сих пор об этом не знают.
Как теперь выглядит синтаксис команды /give в 1.21?
Базовая форма осталась прежней: <code>/give <игрок> <предмет>[компоненты] <количество></code>. Квадратные скобки с компонентами — необязательная часть; если просто нужен предмет без параметров, их не нужно писать вообще.
- <code>/give @s diamond_sword 1</code> — просто меч, без параметров (не изменилось)
- <code>/give @p diamond_sword[damage=10] 1</code> — меч с указанным уроном/прочностью
- <code>/give @a netherite_axe[enchantments={sharpness:5}] 1</code> — топор с Остротой V
- <code>/give @s diamond_sword[custom_name='"Клинок"',enchantments={sharpness:5,unbreaking:3}] 1</code> — меч с именем и двумя зачарованиями
Несколько компонентов разделяются запятой внутри скобок — без пробелов. Порядок компонентов не важен.
Как перевести старую NBT-команду в новый формат?
Прямые замены для самых частых случаев:
- Зачарование Sharpness V: было <code>{Enchantments:[{id:"sharpness",lvl:5}]}</code> → стало <code>[enchantments={sharpness:5}]</code>
- Имя предмета: было <code>{display:{Name:'{"text":"Имя"}'}</code> → стало <code>[custom_name='"Имя"']</code>
- Лор (описание): было <code>{display:{Lore:['{"text":"Строка"}']}}</code> → стало <code>[lore=['"Строка"']]</code>
- Прочность/урон: было <code>{Damage:100}</code> → стало <code>[damage=100]</code>
- Скрыть зачарования в тултипе: было <code>{HideFlags:1}</code> → стало <code>[enchantments={sharpness:5},tooltip_display={hidden_components:['minecraft:enchantments']}]</code>
- Кастомные данные (всё остальное): было <code>{foo:'bar'}</code> → стало <code>[custom_data={foo:'bar'}]</code>
Как правильно выдать зачарованный предмет с именем и лором?
Разберём на живом примере: хочешь выдать алмазный меч с Остротой V, Несломимостью III, своим именем и описанием — одной командой.
<code>/give @s diamond_sword[enchantments={sharpness:5,unbreaking:3},custom_name='"Клинок хаоса"',lore=['"Выкован в пламени Незера"']] 1</code>
- <code>@s</code> — выдать себе. Вместо него: <code>@p</code> — ближайшему, <code>@a</code> — всем, <code>ИмяИгрока</code> — конкретному
- <code>diamond_sword</code> — ID предмета. Префикс <code>minecraft:</code> необязателен в 1.21, но правильный ID обязателен
- <code>enchantments={sharpness:5,unbreaking:3}</code> — зачарования через запятую, ID напрямую без обёртки levels
- <code>custom_name='"Клинок хаоса"'</code> — имя: одинарные кавычки снаружи, двойные внутри (это JSON-строка)
- <code>lore=['"Выкован в пламени Незера"']</code> — массив строк описания; каждая строка — отдельный элемент с одинарными кавычками снаружи
- <code>1</code> — количество. Максимум — 2 147 483 647, но стандартный стек — 64
Что делать, если команда всё равно выдаёт ошибку?
- «Unknown item» — неверный ID. Проверь написание на minecraft.wiki: например, <code>diamond_sword</code>, не <code>diamondsword</code>
- «Expected ,» или «Expected ]» — незакрытая скобка или пропущена запятая между компонентами
- «Expected value» у custom_name — забыл кавычки. Правильно: <code>custom_name='"Имя"'</code>, а не <code>custom_name=Имя</code>
- Команда из гайда не работает — гайд написан до 1.20.5. Переписывай по таблице выше
- Работает в чате, не работает в командном блоке — убери слеш: в командном блоке команда начинается с <code>give</code>, не <code>/give</code>
Разобрался с /give? На форуме есть гайды и по другим командам, которые тоже полностью переехали на компоненты в 1.20.5: /item, /loot и /data.
Если держишь сервер и хочешь настроить автовыдачу донатных предметов — команды в новом формате вставляются напрямую в конфиг плагина. Чтобы не прописывать каждый предмет вручную, удобнее использовать готовый сервис: в <strong>Millida Trade</strong> ты задаёшь товар один раз, а выдача на сервере настраивается автоматически через плагин — включая предметы с зачарованиями, именами и лором в синтаксисе 1.20.5+.
Millida TradeАвтодонат и автоматическая выдача товаров на сервере — выдача за секунды, без ручной работы.Перейти в TradeFAQ
С какой версии Minecraft изменился синтаксис /give?
Изменение вошло в Java Edition 1.20.5, вышедшую в апреле 2024 года. Все версии начиная с 1.20.5 — включая весь 1.21.x — используют новый синтаксис с компонентами в квадратных скобках. Старый NBT-синтаксис в фигурных скобках больше не работает ни в одной актуальной Java Edition.
Работает ли новый синтаксис в Bedrock Edition?
Нет. Bedrock Edition использует свой собственный синтаксис команд — data components туда не переехали. Если ты играешь на Bedrock (Win10, мобильный, консоль), ищи гайды именно для Bedrock: синтаксис принципиально другой.
Можно ли выдать предмет с зачарованием выше максимального уровня?
Да, команда это технически позволяет: <code>/give @s diamond_sword[enchantments={sharpness:100}] 1</code>. Предмет будет выдан с указанным значением (максимум через /give — 255). Реальный эффект зависит от механики конкретного зачарования — большинство просто масштабирует урон линейно, но некоторые работают только до стандартного максимума.
Как вставить команду /give в командный блок на сервере?
В командном блоке не нужен начальный слеш — вставляй команду начиная с <code>give</code>: например <code>give @p diamond_sword[enchantments={sharpness:5}] 1</code>. Командный блок сработает по редстоун-сигналу и выдаст предмет автоматически. Это удобно для систем доната или квестов.
Есть ли генераторы команд /give для нового синтаксиса?
Да. Сайты вроде minecraftmaps.com/tools/give-command-generator уже обновились под новый формат и генерируют команды в синтаксисе компонентов. Просто выбирай предмет, добавляй параметры — генератор соберёт команду за тебя. Удобно если не хочется разбираться в кавычках вручную.




