Minecraft(我的世界)中文论坛

 找回密码
 注册(register)

!header_login!

只需一步,立刻登录

!header_login!

只需一步,立刻登录

查看: 1690|回复: 25

[教程] 【CBL·K_bai】更高级的安检门——"/stats"指令进阶教程

[复制链接]
发表于 2015-9-6 19:15:58 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

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

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


/stats这个指令 在MC的所有指令中算是比较难懂的一个了
上一个帖子我讲过之后,有很多少年发现了一些问题
我也发现我讲的不是很透彻
于是我又做了一个例子,思考了很久 想把这个指令讲透彻
上一个教程的链接:http://www.mcbbs.net/thread-399876-1-1.html
推荐先看上一个!
"更高级的安检门” 演示看视频~
[bili=2873533]1[/bili]

======================stats本质======================

接下来我就来说说/stats命令的本质
stats命令的本质可以理解成"重定向"
也就是把命令执行结果重定向至一个计分板 这在上个教程里我也说过
stats创建了命令执行结果与计分板的链接

而这种链接是怎么实现的?执行命令的实体/方块如何知道
它的执行结果要往哪一个计分板输出呢?
而这个信息就是存储在方块/实体的NBT中的

来自英文wiki:

CommandStats: Information identifying scoreboard parameters to modify relative to the last command run.
  • SuccessCountName: Player name to store success of the last command. Can be a player selector but may only have one resulting target.
  • SuccessCountObjective: Objective's name to store the success of the last command.
  • AffectedBlocksName: Player name to store how many blocks were modified in the last command. Can be a player selector but may only have one resulting target.
  • AffectedBlocksObjective: Objective's name to store how many blocks were modified in the last command.
  • AffectedEntitiesName: Player name to store how many entities were altered in the last command. Can be a player selector but may only have one resulting target.
  • AffectedEntitiesObjective: Objective's name to store how many entities were altered in the last command.
  • AffectedItemsName: Player name to store how many items were altered in the last command. Can be a player selector but may only have one resulting target.
  • AffectedItemsObjective: Objective's name to store how many items were altered in the last command.
  • QueryResultName: Player name to store the query result of the last command. Can be a player selector but may only have one resulting target.
  • QueryResultObjective: Objective's name to store the query result of the last command.



这便是用过stats指令的方块/实体会拥有的NBT值

也就是说 stats是通过看一个方块/实体的有关stats的NBT值
来决定它向哪个玩家/实体的计分板输出信息

也就是说/stats指令的格式中(以实体为例)
/stats entity <玩家名> set <模式> <玩家名2> <计分板变量名>
<玩家名2> 所指的实体
是以被使用/stats的实体为中心的<玩家名2>

所以 /stats的工作方式是这样的(以实体为例)
实体执行命令->得到输出结果->将输出结果赋予以实体为中心<玩家名2>的计分板变量

这便是对"重定向"的理解


举个例子吧
把所有玩家执行命令的成功次数 重定向至他们自己的test变量里
/stats entity @a set SuccessCount @p test
注意@a和@p的使用

这下 更高级安检门的 原理就迎刃而解了

======================具体流程======================


第一步是建立安检门 也就是在安检门处放一个装备架
testforItem变量用于检测铁锭物品
testforDoor用于比对铁锭周围的方块是否是安检门的样子
createDoor用于判断要生成的安检门的方向是什么
#检测铁锭
/scoreboard players set @e[type=Item] testforItem 1 {Item:{id:"minecraft:iron_ingot",Damage:0s,Count:1b}}
#创建链接
/stats entity @e[type=Item,score_testforItem_min=1] set AffectedBlocks @e[type=Item,score_testforItem_min=1,c=1] testforDoor
#初始化计分板
/scoreboard players set @e[type=Item,score_testforItem_min=1] testforDoor 0
#探测并标记
/execute @e[type=Item,score_testforItem_min=1] ~ ~ ~ /testforblocks 897 55 16 895 59 16 ~-1 ~-1 ~
/scoreboard players set @e[type=Item,score_testforItem_min=1,score_testforDoor_min=1] createDoor 1
/execute @e[type=Item,score_testforItem_min=1] ~ ~ ~ /testforblocks 896 55 12 896 59 10 ~ ~-1 ~-1
/scoreboard players set @e[type=Item,score_testforItem_min=1,score_testforDoor_min=1] createDoor 2
#生成装备架
/execute @e[type=Item,score_testforItem_min=1,score_createDoor_min=2,score_createDoor=2] ~ ~ ~ /clone 894 55 12 894 59 10 ~ ~-1 ~-1
/execute @e[type=Item,score_testforItem_min=1,score_createDoor_min=1,score_createDoor=1] ~ ~ ~ /clone 897 55 18 895 59 18 ~-1 ~-1 ~
(把安检门复制到铁锭物品处)
/execute @e[type=Item,score_testforItem_min=1,score_createDoor_min=1] ~ ~ ~ /summon ItemFrame ~ ~ ~ {CustomName:"doorFrame"}
(在物品处生成一个物品展示框 用于生成位于方块中心的装备架 青皮帖子里有讲)
/execute @e[type=ItemFrame,name=doorFrame] ~ ~ ~ /kill @e[type=Item,score_testforItem_min=1,score_createDoor_min=1,r=0]
/execute @e[type=ItemFrame,name=doorFrame] ~ ~ ~0.46875 /summon ArmorStand ~ ~ ~ {CustomName:"door",NoGravity:1}
/kill @e[type=ItemFrame,name=doorFrame]


接下来就是在上一篇教程中也写过的 检测玩家背包中物品数量
playerIngotCount变量用于记录玩家背包中铁锭数量
#检测玩家状态
/execute @e[type=ArmorStand,name=door] ~ ~ ~ /stats entity @a[r=10] set AffectedItems @p playerIngotCount
(建立链接)
/execute @e[type=ArmorStand,name=door] ~ ~ ~ /scoreboard players set @a[r=10] playerIngotCount 0
(初始化计分板)
/execute @e[type=ArmorStand,name=door] ~ ~ ~ /execute @a[r=10] ~ ~ ~ /clear @p minecraft:iron_ingot 0 0
(让玩家执行命令)

然后检测安检门周围有无手里有两个铁锭以上的玩家 同样用到stats
doorStatus表示门开或关的状态
#检测装备架状态
/stats entity @e[type=ArmorStand,name=door] set SuccessCount @e[type=ArmorStand,name=door,c=1] doorStatus
(建立链接)
/scoreboard players set @e[type=ArmorStand,name=door] doorStatus 0
(初始化计分板)
/execute @e[type=ArmorStand,name=door] ~ ~ ~ /testfor @a[r=10,score_playerIngotCount_min=2]
(让盔甲架执行命令)

最后开关门
#开关门
/stats entity @e[type=ArmorStand,name=door] clear SuccessCount
/execute @e[type=ArmorStand,name=door,score_doorStatus_min=1] ~ ~ ~ /fill ~ ~ ~ ~ ~1 ~ wool
/execute @e[type=ArmorStand,name=door,score_doorStatus=0] ~ ~ ~ /fill ~ ~ ~ ~ ~1 ~ air


将近三十条命令完成这个小作品

======================结语======================

/stats这个指令很冷门 主要就是因为它比较难理解
希望我讲了两回之后 各位能更好的利用这个命令XD

下载地址:http://pan.baidu.com/s/1bnvzYI7
文件名:[CBL·K_bai] 教程 [20150906].zip
来自群组: Command Block Logic

评分

参与人数 5人气 +6 金粒 +68 收起 理由
yu_flsh + 1 + 10 咳咳(看不懂)
略懂一点 + 1 + 20 在电脑教室里给你评分.....感谢空白讲解.
1425113841 + 1 + 15 支持CBL 加油楼主
C-青皮君 + 2 + 3 333333333333333
pca006132 + 1 + 20 坤萌萌!

查看全部评分

回复

使用道具 举报

发表于 2015-9-6 19:29:40 | 显示全部楼层
很棒的红石教程!
回复

使用道具 举报

发表于 2015-9-6 19:36:08 | 显示全部楼层
这就是为什么人们需要电脑mod
回复

使用道具 举报

发表于 2015-9-6 19:49:45 | 显示全部楼层
可是这有什么用呢,在单人没人会做这种无聊的东西,熊孩子表示直接拆了你的门。再说如果可以做这肯定是腐竹用的,因为需要命令方块,因此没有人会做这个东西,腐竹一般不会做这种东西,随便做一个家就够了,反正自己是创造甚至不做房子等等情况。

点评

学校交给你的东西也没有用啊,你退学好了啊OwO【……这种人别理了】  详情 回复 发表于 2015-9-11 22:50
你厉害 好怕怕 用/stats做个来看看  详情 回复 发表于 2015-9-8 13:41
人家这是举的栗子 你不能理解吗?  详情 回复 发表于 2015-9-6 20:28
1.冒险模式地图 2.本意不是生存或者服务器实用 而是作为教程的实例 3.你肯定没玩过命令方块= =  详情 回复 发表于 2015-9-6 19:55
回复

使用道具 举报

 楼主| 发表于 2015-9-6 19:55:23 | 显示全部楼层
2545320709 发表于 2015-9-6 19:49
可是这有什么用呢,在单人没人会做这种无聊的东西,熊孩子表示直接拆了你的门。再说如果可以做这肯定是腐竹 ...

1.冒险模式地图
2.本意不是生存或者服务器实用 而是作为教程的实例
3.你肯定没玩过命令方块= =

点评

呵呵呵呵呵呵呵,你这句话就是说生存模式不能用罗  详情 回复 发表于 2015-9-6 22:51
你跟我说我没玩过命令方块,不玩命令方块我算什么MC中高手,我是个MC中高手连命令方块都不懂吗??????  详情 回复 发表于 2015-9-6 22:49
回复

使用道具 举报

发表于 2015-9-6 19:57:33 | 显示全部楼层
嗯,这个有什么用呢?

点评

撞壁 或者某些地图可能用到  详情 回复 发表于 2015-9-6 20:09
回复

使用道具 举报

 楼主| 发表于 2015-9-6 20:09:07 | 显示全部楼层
GrowlR 发表于 2015-9-6 19:57
嗯,这个有什么用呢?

撞壁 或者某些地图可能用到
回复

使用道具 举报

发表于 2015-9-6 20:30:03 | 显示全部楼层
其实我觉得stats最大的用处在于不需要穷举了...
用testfor就要探测64次,用stats连到计分板就有了scoremin和score

点评

为何是64?  详情 回复 发表于 2015-9-6 20:29
回复

使用道具 举报

发表于 2015-9-6 20:28:43 | 显示全部楼层
2545320709 发表于 2015-9-6 19:49
可是这有什么用呢,在单人没人会做这种无聊的东西,熊孩子表示直接拆了你的门。再说如果可以做这肯定是腐竹 ...

人家这是举的栗子 你不能理解吗?
回复

使用道具 举报

发表于 2015-9-6 20:29:31 | 显示全部楼层
lzs1234 发表于 2015-9-6 20:30
其实我觉得stats最大的用处在于不需要穷举了...
用testfor就要探测64次,用stats连到计分板就有了scoremin ...

为何是64?

评分

参与人数 1金粒 +1 收起 理由
lzs1234 + 1 Count:1-64b

查看全部评分

回复

使用道具 举报

发表于 2015-9-6 22:49:40 | 显示全部楼层
kongbaiyo 发表于 2015-9-6 19:55
1.冒险模式地图
2.本意不是生存或者服务器实用 而是作为教程的实例
3.你肯定没玩过命令方块= = ...

你跟我说我没玩过命令方块,不玩命令方块我算什么MC中高手,我是个MC中高手连命令方块都不懂吗??????

点评

吓死我了=。= 你是吐槽狗手吧  详情 回复 发表于 2015-9-8 13:40
那你一定没看清楚标题 这是教程233 而且你说生存模式不能用 妄图用生存模式不能用来说我的装置不好 但是 我从这一个看出你玩命令方块玩的不精 因为你要是真的看懂我的指令的话 就不会质疑我 “生存模式不能用”了  详情 回复 发表于 2015-9-7 22:58
回复

使用道具 举报

发表于 2015-9-6 22:51:05 | 显示全部楼层
kongbaiyo 发表于 2015-9-6 19:55
1.冒险模式地图
2.本意不是生存或者服务器实用 而是作为教程的实例
3.你肯定没玩过命令方块= = ...

呵呵呵呵呵呵呵,你这句话就是说生存模式不能用罗

点评

可以用啦 哈哈 改创造找个地方做一个 再改生存 还是可以正常继续玩 呵呵  详情 回复 发表于 2015-9-8 13:44
没人让你在生存里做  详情 回复 发表于 2015-9-7 07:54
回复

使用道具 举报

发表于 2015-9-7 07:54:22 | 显示全部楼层
2545320709 发表于 2015-9-6 22:51
呵呵呵呵呵呵呵,你这句话就是说生存模式不能用罗

没人让你在生存里做
回复

使用道具 举报

发表于 2015-9-7 07:55:38 | 显示全部楼层
还以为是有人把坟挖了
原来新写一篇
不过反正早知道了233

点评

233 之前写的不好很愧疚233  详情 回复 发表于 2015-9-7 22:52
回复

使用道具 举报

 楼主| 发表于 2015-9-7 22:52:40 | 显示全部楼层
chyx 发表于 2015-9-7 07:55
还以为是有人把坟挖了
原来新写一篇
不过反正早知道了233

233
之前写的不好很愧疚233

点评

问下stats在哪里输出命令,看的不太懂233 [s]话说CBL组员录视频不说话是规矩吗233[/s]  详情 回复 发表于 2015-9-10 15:06
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 手机版本

GMT+8, 2017-7-27 02:49 , Processed in 0.089647 second(s), 8 queries , Memcache On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标。本站与Mojang以及微软公司没有从属关系。

© 2010-2017 我的世界中文论坛 版权所有。本站原创图文内容版权属于原创作者,未经许可不得转载。

快速回复 返回顶部 返回列表