方块、物品和实体ID:命名空间、方块状态及差异
ID并非总是物品的名称,方块ID也不同于其物品ID。本文将介绍命名规则、导致旧命令失效的重命名,以及方块状态的用法。
任何以“未知物品”或“未知方块”失败的命令都与ID有关,其规则比“小写加下划线”更为微妙。
命名空间在数据中不可省略
minecraft:diamond_sword
my_pack:custom_sword
命令允许你省略 minecraft: — /give @s diamond_sword 也能正常工作。但 JSON 文件则不然。一个缺少命名空间的战利品表或配方,例如只写 diamond_sword,有时会悄无声息地失败。在所有地方都写上命名空间,问题便会迎刃而解。
方块ID和物品ID是不同的概念
有些方块没有对应的物品,有些物品放置的却是不同的方块:
| 物品 | 放置的方块 |
|---|---|
minecraft:wheat_seeds | minecraft:wheat |
minecraft:redstone | minecraft:redstone_wire |
minecraft:string | minecraft:tripwire |
minecraft:flower_pot | minecraft:flower_pot,但盆栽变种是独立的方块 |
| — | minecraft:water、minecraft:fire、minecraft:air 没有对应的物品 |
/setblock 使用的是方块ID。/give 使用的是物品ID。当某个物品或方块明明存在,但却提示“该ID不存在”时,最常见的原因就是用错了ID。
方块状态位于方括号内
/setblock ~ ~ ~ oak_stairs[facing=east,half=top,waterlogged=true]
状态是方块的属性,而非物品的属性——你无法给予一个预先旋转好的楼梯,因为旋转是在放置时决定的。未指定的属性将采用其默认值。
waterlogged 经常让人困惑:它存在于楼梯、台阶、栅栏以及许多其他方块上,如果设置方块时没有指定它,将会移除原有的水。
导致旧命令失效的重命名
少数ID发生了改变,旧的ID现在已无法识别:
| 旧ID | 当前ID |
|---|---|
grass | short_grass |
grass_path | dirt_path |
scute | turtle_scute |
sign | oak_sign 及相关方块 |
grass 是最令人头疼的一个,因为 grass_block 仍然存在,但它是一个不同的物品。使用 grass 指代植物的旧命令现在会悄无声息地失效。
实体ID
实体ID大多可预测,但也有例外:minecraft:snow_golem 而非 snowman,minecraft:mooshroom 而非 mushroom_cow,并且每个投掷物都是独立的实体——minecraft:arrow、minecraft:spectral_arrow、minecraft:trident。
技术上属于方块实体(block entities)的实体——箱子、漏斗、告示牌——不会出现在实体列表中,也无法通过 /summon 命令生成。它们以方块的形式放置,并通过 /data 命令进行编辑。
标签优于列表
#minecraft:planks #minecraft:logs #minecraft:wool
#minecraft:doors #minecraft:beds #minecraft:swords
只要命令或JSON接受标签,使用标签就能适应Mojang新增的木材类型。而硬编码所有八种木板ID则无法做到这一点。
在方块、物品与实体ID浏览器中,你可以搜索所有方块、物品和实体ID,包括方块状态以及它们所属的标签。