Minecraft(我的世界)中文论坛

标题: 【CBL·K_bai】 “见光死”与”安检门”——/stats 指令教程

作者: kongbaiyo    时间: 2015-1-31 21:53
标题: 【CBL·K_bai】 “见光死”与”安检门”——/stats 指令教程
本帖最后由 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时, 有前后两个实体
前一个实体是执行命令的实体
后一个是计分板变量数值要被改变的实体这个实体可以不存在


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


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


那么这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]
作者: 250=mo    时间: 2015-1-31 21:55
这会是一个系列吗?如果是,发表索引帖时麻烦@我,我觉得这样的教程非常好……
作者: 额无语    时间: 2015-1-31 21:58
表示看不太懂。。
作者: 1292029552    时间: 2015-1-31 22:09
额无语 发表于 2015-1-31 21:58
表示看不太懂。。

我也看不懂,不过你终于上线了何(上一次是什么时候?
作者: kongbaiyo    时间: 2015-1-31 22:14
额无语 发表于 2015-1-31 21:58
表示看不太懂。。

具体是哪里不懂啊...
作用和用途内部分?
作者: kongbaiyo    时间: 2015-1-31 22:15
250=mo 发表于 2015-1-31 21:55
这会是一个系列吗?如果是,发表索引帖时麻烦@我,我觉得这样的教程非常好…… ...

好的0 0目前看不会有系列啦= =这教程我做了两天= =
高二党苦逼
作者: pca006132    时间: 2015-1-31 22:17
其實我認為用"假玩家名"會比較方便
我是說scoreboard的玩家名
作者: 少帅丶    时间: 2015-1-31 23:01
貌似很有用的样子  看来我学到东西了
作者: kongbaiyo    时间: 2015-2-1 21:23
pca006132 发表于 2015-1-31 22:17
其實我認為用"假玩家名"會比較方便
我是說scoreboard的玩家名

唔是的~假玩家名也可以~选择器也可以~
找不到一个比较好的词来说= =
作者: chyx    时间: 2015-2-2 02:34
很易懂 虽然已经会了
作者: chyx    时间: 2015-2-2 02:35
我很好奇不试这往门里面扔 等过了探测区域再捡回来
作者: kongbaiyo    时间: 2015-2-2 09:05
chyx 发表于 2015-2-2 02:35
我很好奇不试这往门里面扔 等过了探测区域再捡回来

233
似乎是可以的
探测区域搞长一点就好啦233
作者: RedStoneMC    时间: 2015-2-2 09:16
kongbaiyo 发表于 2015-2-2 09:05
233
似乎是可以的
探测区域搞长一点就好啦233

LZ,发下视频地址,我看不到。。。
作者: RedStoneMC    时间: 2015-2-2 09:22
LZ,见光死的缺点:假设我的头上有玻璃。。。你懂得。。。
作者: kongbaiyo    时间: 2015-2-2 10:50
RedStoneMC 发表于 2015-2-2 09:16
LZ,发下视频地址,我看不到。。。

http://www.bilibili.com/video/av1944480/
最近B站有点卡
对那是没办法啦233
以后可以考虑一下怎么把玻璃之类的排除
作者: RedStoneMC    时间: 2015-2-2 22:42
kongbaiyo 发表于 2015-2-2 10:50
http://www.bilibili.com/video/av1944480/
最近B站有点卡
对那是没办法啦233

怎么可能没有办法?我现在就告诉你怎么检测玻璃。
首先/execute @p ~ ~ ~ /clone ~ ~2 ~ ~ ~2 ~ 指定位置x y z filled minecraft:glass(命令不太记得了就是把玻璃clone到指定位置。
然后fill 指定位置 x y z x y z air destroy
这时会有玻璃Item,创建dummy变量a
/scoreboard players set @e a 1 {OnGround:1b,Item:{id:minecraft:glass}}
/kill @e[type=Item,score_a=1,score_a_min=1]
如果有输出就代表有玻璃,然后依靠你的方法探测有没有其他飞透明方块即可。
最后开启传送大法@贰逼
@sylqiuyifeng
觉得可以的话来个点评吧~

作者: kongbaiyo    时间: 2015-2-3 16:16
RedStoneMC 发表于 2015-2-2 22:42
怎么可能没有办法?我现在就告诉你怎么检测玻璃。
首先/execute @p ~ ~ ~ /clone ~ ~2 ~ ~ ~2 ~  ...

不用这么麻烦啦233
依旧用/stats
将玩家头顶上的玻璃替换成玻璃
然后用stats的affectedblocks就可以咯

你内个方法的话呢 不支持多人模式呀
作者: RedStoneMC    时间: 2015-2-3 22:00
kongbaiyo 发表于 2015-2-3 16:16
不用这么麻烦啦233
依旧用/stats
将玩家头顶上的玻璃替换成玻璃

表示从不玩多人。。。
我记得stats是不能替换原来的方块的,看来我是被fill和setblock误导了。。。不然就不用那么麻烦。。。
作者: kongbaiyo    时间: 2015-2-4 17:35
RedStoneMC 发表于 2015-2-3 22:00
表示从不玩多人。。。
我记得stats是不能替换原来的方块的,看来我是被fill和setblock误导了。。。不然就 ...

不玩多人不代表不做多人地图XD
嗯哼XD
作者: kongbaiyo    时间: 2015-2-4 21:49
QueryResult教程已更新!
作者: zhe417908005    时间: 2015-2-5 10:29
好屌。。。。。。。。。。。。。
作者: lzs1234    时间: 2015-3-29 15:13
之前看一直没看懂,今天过来脑补总算看懂了。感觉这个指令的确前途不可估量。记分板的作用之一就是区别实体,用stat以后…哎…怎么说呢…
总之这条指令的确很有用额…
对了这个指令是在什么版本加入的
作者: kongbaiyo    时间: 2015-3-29 19:19
lzs1234 发表于 2015-3-29 15:13
之前看一直没看懂,今天过来脑补总算看懂了。感觉这个指令的确前途不可估量。记分板的作用之一就是区别实体 ...

1.8才有的!~
作者: 咕噜and呼噜    时间: 2015-4-1 19:56
好无聊......见光死......
作者: 爱笑的2003    时间: 2015-4-1 20:09
表示我严重看不懂
作者: 我叫Red_T    时间: 2015-9-6 19:50
一直没弄懂stats的用处
幸苦lz
作者: 我勒个世界    时间: 2015-10-23 23:55
天,太神齐奇了,指令竟有这么多功能。
作者: 1691556234    时间: 2019-5-24 20:22
你们帮我数一下是不是正好十五字
作者: Xiao2    时间: 2019-8-31 17:29
感觉非常好!谢谢