数据组件时代的 /give 命令:NBT 标签被什么取代了
1.20.5 用数据组件取代了物品 NBT,而网上大多数 /give 命令片段仍然沿用旧写法。这里给出你熟悉的标签与当前可用组件之间的对应关系,旧版用花括号包裹属性,现在改成方括号,custom_name 直接写文字即可,不用再包一层引号。
如果你从旧教程里复制了一条 /give 命令,游戏却报语法错误拒绝执行,那说明这条命令是按 1.20.5 之前的 NBT 格式写的。物品数据已经迁移到数据组件(data components),旧的 {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={floats:[3]} |
AttributeModifiers:[...] | attribute_modifiers |
display:{color:...} | dyed_color |
SkullOwner | profile |
三个坑
- 引号。
custom_name接受的是以 SNBT 书写的文本组件,所以纯名称直接写custom_name="Skybreaker"即可。1.20.5 时期教程里的旧写法custom_name='"Skybreaker"'现在会把引号一起显示在物品名称里。 - 移除默认值。 在组件前加
!可以去掉物品原本自带的组件——[!attribute_modifiers]得到的是一把完全没有伤害加成的剑。 - 基岩版没有这套东西。 基岩版的
/give仍然使用它自己的数据值和组件模型;Java 版的组件字符串在那里跑不起来。
/give 生成器 会替你写出组件形式的命令,并同时显示两个版本的输出,方便你复制与所在服务器匹配的那一份。