Minecraft(我的世界)中文论坛

 找回密码
 注册(register)

!header_login!

只需一步,立刻登录

查看: 2012|回复: 4

[命令] 将conditional命令转入函数文件

[复制链接]
10.01100010 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
24951
钻石
性别
保密
注册时间
2013-1-5
查看详细资料
发表于 2017-7-16 13:13:34 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 贰逼 于 2017-7-16 13:15 编辑

函数文件中无法使用conditional这样一个快捷功能,这也造成了很多命令在1.11-升级为1.12时的困难。
当然也希望官方能够在将来制作函数文件使用conditional的功能,但在此之前,至少在目前版本,转入conditional指令的方法只有通过stats

这也许有些“返祖”,因为conditional早在1.8即可实现:1.8模块:stats与条件语句
由于函数文件的快捷性,极大提高了命令书写效率,对于一个拥有conditional命令的模块,我们只需首尾合计添加几个命令

例如:

游戏中这样一个conditional模块,可以实现条件检测(命令方块是否指向上方)
2017-07-16_13.26.39.png
若条件不符则无输出

2017-07-16_13.26.53.png
2017-07-16_13.27.02.png
2017-07-16_13.30.48.png
函数test:test也有如此功能,我们来看一下所有命令:
  1. #第一部分:创建一个过程实体,一个过程变量,初始化stats关联到这个实体(stats设为SuccessCount,检测命令是否执行成功)
  2. summon area_effect_cloud ~ ~ ~ {Duration:1,Tags:[general_Condition]}
  3. scoreboard objectives add general_Cond dummy
  4. scoreboard players set @e[tag=general_Condition] general_Cond 0
  5. stats entity @e[tag=general_Condition] set SuccessCount @e[tag=general_Condition] general_Cond
  6. #第二部分:主要的命令部分,第一条是被检测的命令,第二条是conditional命令
  7. execute @e[tag=general_Condition] ~ ~ ~ testforblock 0 56 0 minecraft:command_block facing=up
  8. execute @e[tag=general_Condition,score_general_Cond_min=1] ~ ~ ~ say 1
  9. #注意,每次使用后都要将过程变量初始化(设为0,不能reset,这样下一次无法执行stats统计)
  10. scoreboard players set @e[tag=general_Condition] general_Cond 0
  11. #第三部分:将过程变量删除
  12. scoreboard objectives remove general_Cond
复制代码
其中过程实体,过程变量意思是它们随着函数的执行开始产生,执行结束销毁

尽管看起来比condtional命令方块麻烦,但实际上函数文件比游戏内命令方块书写效率更高,而且利用stats实际上只是在首尾添加几个命令,所以应该说简化了过程。更重要的是利用stats,我们除了可以检测分数为1,还可以检测分数为0,做到unconditional
  1. execute @e[tag=general_Condition,score_general_Cond=0] ~ ~ ~
复制代码
除了SuccessCount,stats还有AffectedBlocks,AffectedEntities,AffectedItems,QueryResult,用于检测各类命令执行

检测命令执行成功的condtional通用格式:
  1. A
  2. cond:B
  3. C
  4. cond:D
  5. cond:E
复制代码
转为:
  1. summon area_effect_cloud ~ ~ ~ {Duration:1,Tags:[general_Condition]}
  2. scoreboard objectives add general_Cond dummy
  3. scoreboard players set @e[tag=general_Condition] general_Cond 0
  4. stats entity @e[tag=general_Condition] set SuccessCount @e[tag=general_Condition] general_Cond
  5. execute @e[tag=general_Condition] ~ ~ ~ A
  6. execute @e[tag=general_Condition,score_general_Cond_min=1] ~ ~ ~ B
  7. scoreboard players set @e[tag=general_Condition] general_Cond 0
  8. execute @e[tag=general_Condition] ~ ~ ~ C
  9. execute @e[tag=general_Condition,score_general_Cond_min=1] ~ ~ ~ D
  10. execute @e[tag=general_Condition,score_general_Cond_min=1] ~ ~ ~ E
  11. scoreboard players set @e[tag=general_Condition] general_Cond 0
  12. scoreboard objectives remove general_Cond
复制代码
关于多次嵌套conditional,stats第一次相对执行获取C执行情况,第二次相对执行就能够获取D的执行情况,无需任何其他计分板。
来自群组: Command Block Logic
不死之躯 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
6976
钻石
性别
保密
注册时间
2016-2-8
查看详细资料
发表于 2017-7-16 13:44:13 | 显示全部楼层
膜拜大佬         

什么是函数
什么是conditional
回复

使用道具 举报

測試 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
884
钻石
性别
保密
注册时间
2013-12-9
查看详细资料
发表于 2017-7-16 19:52:24 | 显示全部楼层
本帖最后由 測試 于 2017-7-16 21:08 编辑
不死之躯 发表于 2017-7-16 13:44
膜拜大佬         

什么是函数

1. 把一大波指令打包起来,并取一个较短的名字方便使用
2. 百度翻译结果:条件性的。当某条件成立,就触发特定事件
【编辑:删掉一些内容
回复

使用道具 举报

pca006132 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
8180
钻石
性别
保密
注册时间
2013-2-14
查看详细资料
发表于 2017-7-16 20:24:06 | 显示全部楼层
測試 发表于 2017-7-16 19:52
1. 把一大波指令打包起来,并取一个较短的名字方便使用
2. 百度翻译结果:条件性的。当某条件成立,就触 ...

函数是一组命令,除了方便使用以外还能做到无延迟调用、递归调用等等。
conditional是命令方块的一种模式,当当前游戏刻指着其尾部的命令方块成功执行命令时这命令方块才会执行命令。在命令里引申为当前一条命令成功执行就执行本命令。

所以你能不能了解相关物件后才回答别人的提问呢?

评分

参与人数 1金粒 +15 收起 理由
測試 + 15 dalao好!

查看全部评分

回复

使用道具 举报

1186626517 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
778
钻石
性别
保密
注册时间
2015-2-8
查看详细资料
发表于 2018-5-31 10:43:06 | 显示全部楼层
大佬,我想问为什么不直接用@p,而采用一个过程实体AEC,stats entity @p set SuccessCount @p general_Cond,然后在检测execute @p ~ ~ ~ 再执行execute @p[score_general_Cond_min=1] ~ ~ ~ 为什么不采用这种
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2019-12-15 23:59 , Processed in 0.036847 second(s), Total 14, Slave 13 queries, Release: Build.2019.12.06.1150, Gzip On, MemCached On.

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

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

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