数据组件时代下的 /give 命令:NBT 标签的替代品
1.20.5 版本用数据组件取代了物品 NBT,但网上大多数 /give 命令示例仍是旧写法。本文将你熟悉的旧标签映射到现在可用的新组件。
如果你从旧教程中复制粘贴了一个 /give 命令,但游戏却回复 Unknown item tag 或者悄无声息地吞掉了你的附魔,那说明该命令是基于 1.20.5 版本之前的 NBT 格式编写的。物品数据已经迁移到数据组件,旧的 {display:{Name:...}} 数据块不再被解析。
格式变了
old /give @p diamond_sword{display:{Name:'"Skybreaker"'},Enchantments:[{id:sharpness,lvl:5}]}
new /give @p diamond_sword[custom_name='"Skybreaker"',enchantments={sharpness:5}]
现在用的是方括号,而不是花括号。组件是物品 ID 后面的一个扁平的、逗号分隔的列表。
你会实际用到的映射
| 旧 NBT | 数据组件 |
|---|---|
display:{Name:...} | custom_name |
display:{Lore:[...]} | lore |
Enchantments:[{id,lvl}] | enchantments={id:level} |
Unbreakable:1b | unbreakable={} |
CustomModelData:3 | custom_model_data=3 |
AttributeModifiers:[...] | attribute_modifiers |
display:{color:...} | dyed_color |
SkullOwner | profile |
三个陷阱
- 引号。
custom_name接受一个 JSON 文本组件,所以一个普通字符串在参数内部仍然需要自己的引号:custom_name='"Skybreaker"'。 - 移除默认组件。在组件前加上
!可以移除物品通常带有的组件——
[!attribute_modifiers] 会给你一把完全没有伤害加成的剑。
- 基岩版不适用。基岩版
/give仍然使用自己的数据值和组件模型;Java 版的组件字符串在那里无法运行。
/give 命令生成器 会为你生成组件形式的命令,并显示两个版本的输出,这样你就可以复制与你所在服务器匹配的命令。