获取执行值将会涉及到
stats用法
- 所有执行类型
- 相对执行概念
- 计分板调用
- 实体储存
- 一般执行
- !非
- 且&&
- 或||
- 结合表达式
全索引链接
§6.1 stats用法
下一页为 所有执行类别
stats指令的原理就是将实体或者方块中添加两个关联计分板的NBT,这个NBT是什么后面会讲到。
除了通过entitydata修改这两个NBT外,其实可以直接使用快捷的指令/stats更改,让对实体、方块的操作关联计分板:
对于实体:
- /stats entity <相对执行的对象> <set/add> <stat类型> <计分板对象/假名> <计分板>
对方快:
- /stats block <相对执行方块的坐标> <set/add> <stat类型> <计分板对象/假名> <计分板>
6.1.1 所有执行类别
下一页为 相对执行概念
- SuccessCountObjective:计分板名称
- SuccessCountName:计分板赋值实体选择器
返回值为真或假。(真为1,假为0)
- AffectedBlocksObjective:计分板名称
- AffectedBlocksName:计分板赋值实体选择器
返回值为整数。
- AffectedEntitiesObjective:计分板名称
- AffectedEntitiesName:计分板赋值实体选择器
返回值为整数。
- AffectedItemsObjective: 计分板名称
- AffectedItemsName:计分板赋值实体选择器
返回值为整数。
- QueryResultObjective: 计分板名称
- QueryResultName: 计分板赋值实体选择器
返回值为整数。
6.1.2 所有执行类别
下一页为 计分板调用/实体储存
既然说到了stats后有两个参数:block 和 entity,
block可以对接指令方块获取执行值毋庸置疑,那么实体如何对接:
使用相对执行。
以下面为例:
我需要相对物品替换周围九格内白色羊毛为橙色羊毛,获取白色羊毛的数量。
显然可以利用方块完成,相对fill获取fill的值。但是此处不必绕一次,直接利用实体的相对操作完成。
使用以下指令:
按照顺序执行:
- /scoreboard players set 1 a 0
*记住凡是stats的计分板对象必须设定初始值,否则无法获取执行值(此处的对象是假名'1')
- /stats entity @e[type=Item] set AffectedBlocks 1 a
*给物品添加stats标签(影响方块),返回值对象为计分板a中的'1'假名
- /execute @e[type=Item] ~ ~ ~ fill ~1 ~ ~1 ~-1 ~ ~-1 minecraft:wool 1 replace minecraft:wool 0
*相对实体操作方块
效果:
在周围九格放置两个白色羊毛
激活后,羊毛被替换,获取了2的执行值
如果放上4个激活,同样替换后返回4。
本节展示stats除了对接指令方块直接获取参数,也可以找实体作为中介,来相对实体执行,其结果一样。
6.1.3 计分板调用/实体储存
由于execute和scoreboard进一步调用计分板的指令使用实体选择器,所以选择假名兼容性有些差(当然可以通过scoreboard players test再次连接stats达到检测,但是太慢了)
此外,实体还有要求:
1.必须能够设定初始值的;
2.必须在指令执行时存在的;
3.多种执行不冲突。
否则执行值赋值失败。
我们将上一节的例子中计分板对象转为实体,并在有执行值时输出say 1:
按照顺序执行:
- /scoreboard players set @e[name=f] a 0
*给实体f设定初始值
- /stats entity @e[name=f] set AffectedBlocks @e[name=f] a
*给实体f添加stats标签,获取影响方块的次数
- /execute @e[name=f] ~ ~ ~ fill ~1 ~ ~1 ~-1 ~ ~-1 minecraft:wool 1 replace minecraft:wool 0
*相对实体f操作方块
- /execute @e[name=f,score_a_min=1] ~ ~ ~ say 1
*判断输出
(相对上一节多了一条条件语句,作为计分板调用的演示)
效果:
替换白色羊毛为橙色羊毛,且执行返回的值是周围9格白色羊毛的次数,由于符合条件(也就是有执行值),输出1。
反之,虽然设定了初始值,但是影响的方块为0,不符合条件(无执行值),无输出。
在stats中,通常使用实体储存来作为计分板调用的工具,希望能尽快掌握。
- 用stats判断一条指令:/testfor @e[type=EnderDragon]是否输出,返回值储存在名为ed积分版内;
- 制作一个计分板显示游戏时间的小模块,可参考资料。