本帖最后由 kongbaiyo 于 2015-9-6 19:22 编辑

======================前言======================


/stats这个指令 在MC的所有指令中算是比较难懂的一个了
今天我就详细解释一下/stats这条命令的 理解 用法 以及应用~
先来看看这条命令的具体应用我做了两个小例子~
见光死”与”安检门
演示看视频啦~

[bili=1944480]1[/bili]

见光死”就是让玩家僵尸一样在阳光下会掉血~
安检门”就是如果玩家身上有超过9个铁就不让通过~

======================命令作用======================

这两个小应用中的核心都是 /stats 命令先大概的解释一下这条命令~

stats这个单词直译成中文叫"统计"
而我更愿意将它意译为"创建连接"
这里的连接,指的就是一条命令的执行结果和一个计分板变量的连接
创建了这样的连接后就能将一条命令的执行结果输出到计分板里

------------------解释一小下------------------

/setblock为例

/fill为例
/testforblocks为例
这条命令就是在视频中"见光死"所用的命令
用于将玩家头顶的所有方块与一条空气柱比对
可见 命令执行后都会在屏幕上有一个反馈 这个反馈就是命令的执行结果
那么/stats指令的连接作用是什么意思呢? 看图!


------------------解释一小下------------------


/setblock为例

/fill为例

/testforblocks为例

可见 使用了/stats 后命令执行后的效果就增加了一个:
改变计分板的数值
原本应该输出在屏幕上的东西被输出到了计分板
这就是/stats命令的作用

======================格式详解======================
  1. /stats entity <玩家名> set <模式> <玩家名2> <计分板变量名>
复制代码
  1. /stats block <x> <y> <z> set <模式> <玩家名2> <计分板变量名>
复制代码

填entity还是block取决于命令是由实体执行还是由命令方块(或牌子)执行的
注:execute 执行的命令也算是实体执行的命令
以上三张图中情况玩家执行的命令所以都用entity
注:选择entity时, 有前后两个实体
前一个实体是执行命令的实体
后一个是计分板变量数值要被改变的实体这个实体可以不存在


------------------关键理解部分------------------


<模式>这个选项有如下几个选择:

  • AffectedBlocks:命令影响的方块数
  • AffectedEntities:命令影响的实体数
  • AffectedItems:命令影响的物品数
  • QueryResult:命令获取的结果 [这一条可以先无视]
  • SuccessCount:命令成功执行的次数


那么这5条如何选择呢?这取决于命令执行后, 玩家的屏幕上/命令方块的输出处显示的内容
例如setblock fill clone testforblock等等
会在执行后在屏幕上输出 被放置/克隆/比对 的方块数量
这就明显选择AffectedBlocks

give clear 会在执行后显示 给与/清除 的物品数量 这里就要选择AffectedItems

------------这里有一个特殊点------------

/testfor @e     /kill @e 等等这些指令 要想获得探测/杀死到的实体数量时,
要用SuccessCount而不用 AffectedEntities
因为这些指令执行后并不会在屏幕上输出 "探测到10个实体"  等等这些提示
取而代之的是一行行的 "找到了 XXX实体”"
一行输出, 就代表着命令被成功执行了一次
一共输出了几行就代表成功执行几次所以要使用SuccessCount

此时如果使用AffectedEntities则计分板出会一直输出1
这里需要注意, AffectedEntities这个模式目前实际上是没有什么实质作用的可以忽略

QueryResult这个模式在另一个教程里~
http://www.mcbbs.net/thread-402355-1-1.html


------------题外话------------

众所周知, 比较器接在带有testfor的命令方块边上可以输出testfor到的实体数量
实际上, 比较器正是输出了命令方块的 SuccessCount
命令成功执行几次就会有几格的输出


那么 "安检门" 的原理也就显而易见啦~
视频中也有说各位可以自己研究和探索一下~
使用/stats创建的连接是 "牢不可破" 的
一旦一个实体的变量和命令结果创建了连接使用指令就不能改变内个变量的值了
他会永远保持内个数值, 除非那个方块/实体又执行了另一条命令
那么如何解除连接?

  1. /stats entity <玩家名> clear
复制代码
  1. /stats block <x> <y> <z> clear
复制代码

轻而易举~


======================注意事项======================

  • 搞清楚stats的作用 stats命令起的是将命令执行结果重定向至计分板的作用
  • 搞清楚stats命令中的实体分别指的是什么 一个指的是执行命令的实体 另一个是存计分板变量数值的实体
  • 使用前务必在计分板激活该玩家, 这样才能正常使用具体方法就是给对应玩家计分板变量 add 0即可
  • 极度推荐看这篇教程的姊妹篇:更高级的安检门 对"/stats"的透彻理解


======================结束语
======================

Stats命令前途不可估量!!!
它是连接MC世界与计分板的桥梁  以后定有大作为
欢迎各位少年批评指正!
——来自CBL的K_bai



[groupid=546]Command Block Logic[/groupid]