(此章节已于2022年8月5日重写)
在第八章中,我们了解了/give指令的用法。让我们回顾一下:
--Java1.13以下
/give <玩家:目标选择器><物品id:字符串>[物品数量:整数][物品数据值:整数][NBT标签]
--Java1.13及以上
/give <玩家:目标选择器><物品英文id:字符串>[物品数量:整数]
--基岩版
/give <玩家:目标选择器><物品id:字符串>[物品数量:整数][物品数据值:整数][附加标签:JSON]
值得注意的是,在基岩版的格式中,『物品数据值』参数后面竟然还有一个『附加标签』参数。等等,附加『标签』?难不成基岩版的指令中也可以使用NBT?
你想多了,这当然不是NBT,而是一个基岩版独有的非常类似于NBT但实际上是JSON的东西:
物品组件(Item Components)
物品组件这东西,正如其名,是可以用在物品上的JSON组件。由于使用的是JSON而不是SNBT的语法,因此物品组件的格式和Java版的NBT有些许不同。那到底有哪些物品组件?我们又该如何使用它们呢?
截止基岩版1.19.10版本,一共有4个物品组件:
can_place_on
can_destroy
item_lock
keep_on_death
虽然这里的JSON不是JSON文本,但这些组件和普通的原始JSON文本组件的用法仍然一样。
物品组件的值必须是一个JSON对象,也就是像下面这样:
{“物品组件“:{}}
而具体这个JSON对象内能够填写哪些东西,得看使用的是什么物品组件。
can_place_on和can_destroy这两个物品组件十分类似,它们俩也是最年长的物品组件,你或许早已知道它们的用途:
can_place_on——指定该『方块类物品』可以被放置于哪些方块上方
can_destroy——指定该物品可以破坏哪些方块
这两个物品组件适用于冒险模式。你应该知道,在基岩版中,处于冒险模式的玩家无法破坏或放置任何方块。因此,妥善运用上述组件,就可以指定玩家能够破坏或放置哪些方块,使得玩家的自由度更高,也能够弄出更多的玩法。
那么它们到底该怎么使用呢?
你需要在这两个组件的值,也就是它们的JSON对象中,使用blocks组件(值类型为字符串列表),指定具体可以破坏或放置的方块。比如:
/give @s diamond_shovel 1 0 {“can_destroy“:{“blocks“:[“minecraft:dirt“,“minecraft:grass“]}}
这将会给你一把在冒险模式中能够破坏泥土和草方块的钻石铲铲。can_place_on组件的使用方法同理:
/give @s diamond_block 1 0 {“can_place_on“:{“blocks“:[“minecraft:dirt“,“minecraft:grass“]}}
这将会给你一块在冒险模式中能够放置于泥土和草方块上方的钻石块。
可惜的是,这两个组件似乎无法指定具体的方块数据值以及方块状态,这就限制了这两个组件的使用范围。
item_lock和keep_on_death这两个组件是基岩版于1.16.100版本中新添加的。由于它们俩比较新,所以目前知道的人并不多。但这两个的用处可不是一般的大:
item_lock——将物品锁定于背包或指定栏位中,使得物品无法被移除、丢弃或用于合成。
keep_on_death——使得物品在死亡后不会掉落
keep_on_death组件的使用方法非常简单,你甚至不需要指定它的JSON对象内到底该填写什么,只需要放一个空空如也的JSON对象作为它的值即可:
/give @s diamond_shovel 1 0 {“minecraft:keep_on_death“:{}}
这将会给你一把不会因死亡而掉落的钻石铲(不受游戏规则『死亡不掉落』是否开启的影响),可以说十分简单且有用。你应该注意到了,物品组件也具有命名空间。
item_lock组件可以将物品锁定在玩家的物品栏中。它具有两个模式,需要使用mode组件在它的JSON对象中指定:
lock_in_inventory——锁定在玩家的背包中,玩家可以在背包中调整物品的位置,但物品无法被移除、丢弃或用于合成。
这章没有结束,请点击下一页继续阅读!