本帖最后由 PotatoMaster101 于 2014-6-27 19:34 编辑

大家好。今天教大家如何在MC1.8里探测玩家背包的物品。这个有2个做法:一个是用/clear,另一个是用/testfor。用testfor做更加高级,不过1.8更新后/clear也可以探测NBT什么,所以2个方法都可以。这个东西可以放在冒险地图里面。

\\---+++---+++---+++{{[分割线]}}+++---+++---+++---//
首先是clear。自从1.8更新后,clear的格式改变了。现在可以自定义清空数量和物品NBT了。现在的指令格式:
  1. /clear <玩家> <物品> [数据] [数量] [dataTag]
复制代码
/clear我就不详细多说了,这条指令在很早就有了,不过以前一直没法清空自定义数量,自定义NBT等。给大家举个例子:如果要清空玩家背包里的一个叫“Test”的石剑:


那么指令就是:
  1. clear @a minecraft:stone_sword 0 1 {display:{Name:"Test"}}
复制代码
大家看见,指令里的1就是数量,后面的{display:{Name:"Test"}}意思就是石剑的NBT,也就是拥有自定义名字为“Test”的石剑。所以,当大家按下按钮后,如果背包里没有叫Test的石剑,那就是指令无效,不会给出输出。有的话就会情空掉一个石剑,然后给出输出。如果是要单纯物品探测的话,那请自行把数量改成0,然后后面用比较器进行输出。/clear比较基础我就不多深入讲解了。


\\---+++---+++---+++{{[分割线]}}+++---+++---+++---//

之后就是/testfor指令了。1.8又更新了点NBT,让/testfor更强大了。用testfor的好处就是可以自定义物品栏等等,还可以探测玩家已经选中的物品栏。指令:
  1. /testfor @p {Inventory:[{Slot:0b,id:minecraft:stone_sword,Damage:0s,Count:1b,tag:{display:{Name:"Test"}}}]}
复制代码
大家看见,这条指令还是探测刚才的一个叫“Test”的石剑。不过这次更加高级。NBT讲解:



Inventory:探测玩家仓库背包。/testfor用的,如果要探测玩家背包一定要加入这个NBT。
Slot:玩家物品的槽位。这行可选可不选。帖子下面会详细讲解槽位,单位是b。(数字后面一定要打b,比如:1b,0b等等)
id:探测目标物品的id。本人这里打的是minecraft:stone_sword,也就是石剑的ID。大家自行修改。
Damage:数据。这行默认为0,数据用来分辨多个相同物品。比如:多彩色的羊毛。单位是s,一定要加。
Count:数量。单位是b,一定要加入。这个好像只对可叠加物品起效,比如有5个叠加的羊毛,就可以探测得到。5把石剑的话,如果不是叠加在一起,那就无发探测,导致输出失败。
tag:这个我就不多说了,基础的NBT链接NBT。这个很多指令都可以用:summon,setblock等等。后面括号里的就是另外的NBT,控制石剑本身,而不和/testfor搞混。
(本教程不会加入探测玩家选中槽位教程。上次已经发过一个了(SelectedItemSlot),有兴趣的点击这里查看

\\---+++---+++---+++{{[分割线]}}+++---+++---+++---//

之后来说下背包槽位。大家知道,当打开背包后有很多很多槽位可以放物品。而/testfor探测背包有一项是可以探测玩家放入物品的槽位的。这个最大的用处就是可以探测玩家穿着什么装备什么。槽位的控制图:


大家看见,0就是玩家选中的第一个槽位。之后100就是鞋子,101就是裤子,到103就是头盔。合成物品的是80,81,82和83。其他就不多说了,大家可以自己研究。玩家选中的槽位就是0-8。(所有图片图床上传。如有图蹦现象,请通知/谅解

\\---+++---+++---+++{{[分割线]}}+++---+++---+++---//

Slot讲解。大家看见指令里的是0b,也就是玩家第一个手拿的物品。(详情看玩家背包槽位分布图)。所以,Slot后面填写的就是0b-8b,这个探测不一定要是玩家选中了这个槽位,而是只要这个槽位里有达到要求的物品就可以了。配合SelectedItemSlot的话可以达到更好的效果。(详情请看SelectedItemSlot帖子教程。连接在上)
================END================