Minecraft(我的世界)中文论坛
标题: 将conditional命令转入函数文件
作者: ⭐✔️ 时间: 2017-7-16 13:13
标题: 将conditional命令转入函数文件
本帖最后由 贰逼 于 2017-7-16 13:15 编辑
函数文件中无法使用conditional这样一个快捷功能,这也造成了很多命令在1.11-升级为1.12时的困难。
当然也希望官方能够在将来制作函数文件使用conditional的功能,但在此之前,至少在目前版本,转入conditional指令的方法只有通过stats
这也许有些“返祖”,因为conditional早在1.8即可实现:1.8模块:stats与条件语句
由于函数文件的快捷性,极大提高了命令书写效率,对于一个拥有conditional命令的模块,我们只需首尾合计添加几个命令
例如:

游戏中这样一个conditional模块,可以实现条件检测(命令方块是否指向上方)
若条件不符则无输出
函数test:test也有如此功能,我们来看一下所有命令:
- #第一部分:创建一个过程实体,一个过程变量,初始化stats关联到这个实体(stats设为SuccessCount,检测命令是否执行成功)
- summon area_effect_cloud ~ ~ ~ {Duration:1,Tags:[general_Condition]}
- scoreboard objectives add general_Cond dummy
- scoreboard players set @e[tag=general_Condition] general_Cond 0
- stats entity @e[tag=general_Condition] set SuccessCount @e[tag=general_Condition] general_Cond
- #第二部分:主要的命令部分,第一条是被检测的命令,第二条是conditional命令
- execute @e[tag=general_Condition] ~ ~ ~ testforblock 0 56 0 minecraft:command_block facing=up
- execute @e[tag=general_Condition,score_general_Cond_min=1] ~ ~ ~ say 1
- #注意,每次使用后都要将过程变量初始化(设为0,不能reset,这样下一次无法执行stats统计)
- scoreboard players set @e[tag=general_Condition] general_Cond 0
- #第三部分:将过程变量删除
- scoreboard objectives remove general_Cond
复制代码 其中过程实体,过程变量意思是它们随着函数的执行开始产生,执行结束销毁。
尽管看起来比condtional命令方块麻烦,但实际上函数文件比游戏内命令方块书写效率更高,而且利用stats实际上只是在首尾添加几个命令,所以应该说简化了过程。更重要的是利用stats,我们除了可以检测分数为1,还可以检测分数为0,做到unconditional:
- execute @e[tag=general_Condition,score_general_Cond=0] ~ ~ ~
复制代码 除了SuccessCount,stats还有AffectedBlocks,AffectedEntities,AffectedItems,QueryResult,用于检测各类命令执行
检测命令执行成功的condtional通用格式:
转为:
- summon area_effect_cloud ~ ~ ~ {Duration:1,Tags:[general_Condition]}
- scoreboard objectives add general_Cond dummy
- scoreboard players set @e[tag=general_Condition] general_Cond 0
- stats entity @e[tag=general_Condition] set SuccessCount @e[tag=general_Condition] general_Cond
- execute @e[tag=general_Condition] ~ ~ ~ A
- execute @e[tag=general_Condition,score_general_Cond_min=1] ~ ~ ~ B
- scoreboard players set @e[tag=general_Condition] general_Cond 0
- execute @e[tag=general_Condition] ~ ~ ~ C
- execute @e[tag=general_Condition,score_general_Cond_min=1] ~ ~ ~ D
- execute @e[tag=general_Condition,score_general_Cond_min=1] ~ ~ ~ E
- scoreboard players set @e[tag=general_Condition] general_Cond 0
- scoreboard objectives remove general_Cond
复制代码 关于多次嵌套conditional,stats第一次相对执行获取C执行情况,第二次相对执行就能够获取D的执行情况,无需任何其他计分板。
[groupid=546]Command Block Logic[/groupid]
作者: 不死之躯 时间: 2017-7-16 13:44
膜拜大佬
什么是函数
什么是conditional
作者: 測試 时间: 2017-7-16 19:52
本帖最后由 測試 于 2017-7-16 21:08 编辑
1. 把一大波指令打包起来,并取一个较短的名字方便使用
2. 百度翻译结果:条件性的。当某条件成立,就触发特定事件
【编辑:删掉一些内容
作者: pca006132 时间: 2017-7-16 20:24
函数是一组命令,除了方便使用以外还能做到无延迟调用、递归调用等等。
conditional是命令方块的一种模式,当当前游戏刻指着其尾部的命令方块成功执行命令时这命令方块才会执行命令。在命令里引申为当前一条命令成功执行就执行本命令。
所以你能不能了解相关物件后才回答别人的提问呢?
作者: 1186626517 时间: 2018-5-31 10:43
大佬,我想问为什么不直接用@p,而采用一个过程实体AEC,stats entity @p set SuccessCount @p general_Cond,然后在检测execute @p ~ ~ ~ 再执行execute @p[score_general_Cond_min=1] ~ ~ ~ 为什么不采用这种