hasitem参数可以用来选取具有指定物品的实体。更准确一点来说,hasitem参数可以通过检测已选实体的背包中指定条件下的物品,来筛选实体。
hasitem参数的值比较特别,它的值可以是单个条件,也可以是由多个条件组成的条件列表。让我们来看看hasitem参数的一个条件项目到底可以指定哪些东西。
一个条件项目可以检测单个类型的物品,具体来说可以指定以下的参数:
item——物品id
data——物品的数据值[可选]
quantity——限制所选范围内物品的总数量[可选]
location——需要检测的物品栏[可选]
slot——需要检测的槽位[可选,必须配合location参数使用]
比如:
{item=bed,data=1}
这个条件可以筛选背包内具有橙色床的实体。不难发现,单个条件可以具有多个不同的筛选参数,并且外面要使用花括号({})包裹起来。
需要注意的是,data参数目前有个BUG,就是不能适用于方块类物品。如果你对一个方块类物品使用了data参数,那么不管你怎么改data的值,游戏总会认为该参数的值为0。怎么判断一个物品是不是方块类的呢?看物品的图标。如果图标是直接给出了方块的3D图像(也就是渲染图),比如羊毛,那就是方块类物品。像是床这种图标是专门画的就不是方块类物品,所以能够正常使用data参数。
quantity参数得好好讲一讲,它并不是说检测单个栏位内物品的数量,而是检测整个范围内的指定类型物品数量总和。比如:
{item=dirt,quantity=100..}
这个条件可以选择到那些背包内泥土数量达到甚至超过100块的实体。也就是说,假设这里有一个张三,背包内有两组泥土,那么这个条件就可以选择到它。
不难发现,quantity的值简直是基岩版的一股清流,竟然向Java1.13及以上的版本学习,采用了Java版先进的『两点法』,不错不错,值得表扬。而且,这参数还在Java版的基础上改造了一下,变成了还可以使用不等号进行反选:
{item=dirt,quantity=!100..}
这将会选取拥有泥土数量<100的实体。
对了,如果你指定了这个参数为0,那就可以选择『没有指定物品的实体』:
{item=dirt,quantity=0}
这将会选取背包内没有泥土的实体。
location参数可以缩小检测的范围到指定的物品栏。具体可以使用哪些物品栏以及这里的物品栏是个啥东西.....这就需要你前往第三十八章了解/replaceitem指令。
这里就先假装你已经搞懂了这些内容。举个例子:
{item=dirt,quantity=0,location=slot.enderchest}
这将会选取所有在其末影箱内没有泥土的实体。需要注意,对于玩家来说,默认是不会检测到末影箱的。也就是说,如果你在末影箱内放了一块泥土,那么{item=dirt,quantity=0}这个条件还是会选择到你,但{item=dirt,quantity=0,location=slot.enderchest}这个条件则不会。另外,即使是对于没有末影箱的非玩家实体,游戏仍然会假装其具有末影箱,然后又因为游戏假装出来的末影箱内没有泥土,导致上述条件也会选择到非玩家实体。
在使用location参数时,还可以更进一步使用slot参数来缩小检测范围到指定的栏位。比如:
{item=dirt,quantity=1..,location=slot.enderchest,slot=0}
这将会选取到所有在其末影箱左上角第一格内放有泥土的玩家。和quantity一样,这参数同样也支持升级后的『两点法』:
{item=dirt,quantity=1..,location=slot.enderchest,slot=1..}
\\选取到所有在其末影箱内除了左上角第一格外其他位置放有泥土的玩家\\
{item=dirt,quantity=1..,location=slot.enderchest,slot=!0}
\\同上\\
上面这些都是一个条件内可以弄的参数,hasitem参数的值也确实可以直接放入单个条件:
/testfor @a[hasitem={item=dirt,quantity=1..,location=slot.enderchest,slot=!0}]
本小章还未完,请点击下一页继续阅读后面精彩内容!
喜欢Minecraft指令手册请大家收藏:(m.2yq.org)Minecraft指令手册爱言情更新速度全网最快。