MC Toolkit

指南 / 命令与数据

数据组件时代的 /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:1bunbreakable={}
CustomModelData:3custom_model_data={floats:[3]}
AttributeModifiers:[...]attribute_modifiers
display:{color:...}dyed_color
SkullOwnerprofile

三个坑

  • 引号。 custom_name 接受的是以 SNBT 书写的文本组件,所以纯名称直接写 custom_name="Skybreaker" 即可。1.20.5 时期教程里的旧写法 custom_name='"Skybreaker"' 现在会把引号一起显示在物品名称里。
  • 移除默认值。 在组件前加 ! 可以去掉物品原本自带的组件——[!attribute_modifiers] 得到的是一把完全没有伤害加成的剑。
  • 基岩版没有这套东西。 基岩版的 /give 仍然使用它自己的数据值和组件模型;Java 版的组件字符串在那里跑不起来。

/give 生成器 会替你写出组件形式的命令,并同时显示两个版本的输出,方便你复制与所在服务器匹配的那一份。

/give 生成器 →

更多指南

查看全部 →