第189章 ,/.

再来一个例子:

/replaceitem entity @a slot.hotbar 0 book 1 0 {“item_lock“:{“mode“:“lock_in_slot“}}

这将会把所有玩家的快捷栏第一格的物品替换为一本书,并且这本书会被锁定在这个栏位中。当然,这本书也会在死亡时掉落。

有趣的是,虽然你握不住空气,但是下面这条指令却可以强制让你『握住空气』:

/replaceitem entity @s slot.hotbar 0 air 1 0 {“item_lock“:{“mode“:“lock_in_slot“}}

当你使用上述指令后,看起来你的快捷栏第一格只是变空了而已,也可以把其他物品放在这一格。但如果你把主手切换到这一格然后去尝试挖或使用方块,你就会发现:你破坏不了也使用不了方块了!破坏方块后方块会迅速恢复原来的状态,就像服务器保护一样!只不过,当你把其他东西放到这一格时,使用这一格来挖或破坏方块便不会出现什么问题。

上面这些就是基岩版的JSON物品组件的全部内容。既然基岩版有类似NBT的物品组件,那么Java版有没有类似这些功能的NBT标签呢?

答案当然是有的,只不过是部分有,也就是:

can_place_on → CanPlaceOn

can_destroy → CanDestroy

在Java版中,CanPlaceOn和CanDestroy这两个NBT标签的用途和基岩版的对应物品组件一模一样,唯一的区别就在于使用的方法。Java版的这两个标签的数据类型都是『文本列表』,而不是一个复合标签。列表内就直接填写能够放置或破坏的方块ID,比如:

/give @s diamond_shovel{CanDestroy:[“minecraft:dirt“,“minecraft:grass_block“]} 1

这条指令是刚才的『/give @s diamond_shovel 1 0 {“can_destroy“:{“blocks“:[“minecraft:dirt“,“minecraft:grass“]}}』在Java1.13及以上版本的写法,它们具有同样的作用:给你一把在冒险模式中能够破坏泥土和草方块的钻石铲铲。CanPlaceOn的用法和CanDestroy标签一样,这里就不多讲解了。

这就是本章的全部内容。

附录①:物品组件历史

携带版/基岩版

?——加入了can_place_on和can_destroy两个物品组件,但没有用

1.1.0——can_place_on和can_destroy两个物品组件现在可正常使用

1.16.100——加入了item_lock和keep_on_death两个物品组件

附录②:类似物品组件的NBT标签历史

Java版

1.8——加入了CanPlaceOn和CanDestroy标签