Minecraft(我的世界)中文论坛
标题: [CBL∫2b]指令方块进阶教程——模块 §6 : stats用法 [打印本页]
作者: ⭐✔️ 时间: 2015-7-24 17:53
标题: [CBL∫2b]指令方块进阶教程——模块 §6 : stats用法
本帖最后由 贰逼 于 2015-7-26 10:14 编辑
获取执行值
下一页为 stats用法
本章将引进新的概念:执行值。
执行值便是一个指令除了输出外执行的结果,通常返回执行的次数,输出值或者条件真假。
获取执行值就能够随机应变,根据判断来调整下一步输出;执行值也可以用作debug;执行值也可以变相获取游戏参数。
在指令中,返回值的指令是stats。使用这条指令可以对指令影响的实体、方块、物品进行值的返回,
结合条件语句进行下一步输出;或者产生对应参数。
获取执行值将会涉及到
stats用法
stats与条件语句
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中,通常使用实体储存来作为计分板调用的工具,希望能尽快掌握。
附加部分
练习:
[groupid=546]Command Block Logic[/groupid]
作者: Danger_S.M 时间: 2015-7-24 18:07
建议使用一些接地气或简单的语言,不然很难理解
作者: hhttll 时间: 2015-7-24 18:09
难
作者: hhttll 时间: 2015-7-24 18:09
不是水回复。。我本来想用一个字强调的,但是感觉有点像水
作者: 凋零娘 时间: 2015-7-24 18:28
打开游戏技巧板块,全是命令方块教程,没有其他在生存模式里面实用的教程吗
作者: 海牛的麻烦 时间: 2015-7-24 19:01
我还是不要接触指令方块了
作者: chyx 时间: 2015-7-24 19:02
你想知道什么 我看看我知道不知道
作者: 爱心魔王FHC 时间: 2016-7-16 16:24
为什么不行?1.9的原因?
欢迎光临 Minecraft(我的世界)中文论坛 (https://www.mcbbs.net/) |
Powered by Discuz! X3.5 |