第12页:探测相关指令-testfor指令
展开探测相关指令
1.testfor指令
mc中最常用的指令之一,用于探测一系列的东西。可以探测玩家、探测实体甚至探测玩家背包的东西(方块用testforblock,这一点需要注意,两者要区分)。最基本的形式是
testfor 玩家/选择器 testfor系列数据标签
如果直接探测这个世界有没有某个玩家,比如探测这个世界有没有叫“End-Enderman”的玩家,就用
testfor End-Enderman
使用这个指令,如果这个世界有一个叫做“End-Enderman”的玩家,便会显示“发现End-Enderman”并且命令方块持续输出,直到这个玩家不存在为止。一般testfor需要高频持续探测一个东西得输出。
或者运用选择器,比如探测这个世界的所有玩家,用
testfor @a
即可。自从到了1.8后,运用@e的次数就越来越多了。一般用在UUID上。比如
testfor @e[type=实体名称,name=名字]
type后面填写实体的英文名称,比如僵尸就填写Zombie,掉落物就填写Item等等。name填写玩家起的名称(比如用命名牌或者CustomName),如果想指定所有的这个种类那就把name去掉即可。最好用于高频,在做RPG、机关、解密、冒险无论是哪个地图都有着很大的帮助。(但是唯一缺点就是容易卡)当探测到特定的生物后,命令方块就会有输出。一般连接比较器来执行一系列的命令。(探测到会一直有输出,直到探测不到)
还有一种形式,就是探测玩家在一个坐标的形式。
testfor 选择器[x,y,z,r]
选择器就是@a、@e、@r、@p,x、y、z是坐标,在游戏中按下默认的F3可以查看。r是半径,比如1就是1格,2就是附近2格。举个例子,比如
testfor @a[123,45,789,1]
高频这个指令,当123,45,789这1格方块的地方有玩家的时候,便会输出信号。
一般testfor都是用于探测玩家在某个地方,之后连接比较器做出一系列效果。对于地图是很有帮助的一个指令。
(自从execute出来之后貌似testfor就被冷落了些...因为execute可以省下一个比较器...但是testfor却是有着不可磨灭的作用)
除了探测玩家,testfor还可以探测玩家背包里的物品。比如
/testfor @a {Inventory:[{id:"minecraft:xxx}]}
Inventory便是背包,而xxx处填写要探测的物品名称,之前说到过可用F3+h看到。比如我们要探测玩家背包里有没有罂粟,那就用
/testfor @a {Inventory:[{id:"minecraft:red_flower"}]}
但是我们知道,物品可以叠加,那么,要探测一定数量的物品,假如探测玩家背包里有没有3个钻石,那就用
/testfor @a {Inventory:[{id:"minecraft:diamond",Count:3b}]}
物品正常情况下叠加只能达到64。假如探测玩家背包里有没有67个钻石,用
/testfor @a {Inventory:[{id:"minecraft:diamond",Count:64b},{id:"minecraft:diamond",Count:3b}]}
以此类推,可以无限叠加下去,但是一定要注意括号。
除了玩家背包里的物品,也可以探测玩家物品栏的9个物品。要用的是Slot数据标签。
/testfor @a {SelectedItemSlot:格子数,Inventory:[{Slot:格子数b,id:"方块名称"}]}
格子数是一样的。比如你需要探测第一个物品栏装的是刷怪蛋,那就用
/testfor @a {SelectedItemSlot:0,Inventory:[{Slot:0b,id:"minecraft:spawn_egg"}]}
有人说这个指令必须要用到9个命令方块,实际上那个是在完全不知道玩家物品会在哪个物品栏里的情况下。当知道玩家或者在解密(比如必须格子数正确才能触发机关)的情况下一般用这个指令。(9个命令方块就是每一个数字改一下,0-8即可)
如果探测的物品是附加了数据标签的(比如用铁砧改了名字),那么就用
/testfor @a {SelectedItemSlot:格子数,Inventory:[{Slot:格子数b,id:"方块名称",tag:{display:{Name:"名字"}}}]}
总之,虽然execute类似的指令很方便,但是testfor容易理解,它的实用度还是非常高的。(testfor分数具体看scoreboard)
更多相关内容请关注:我的世界专区
责任编辑:Shy夏夏