函数文件中无法使用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] ~ ~ ~
检测命令执行成功的condtional通用格式:
- A
- cond:B
- C
- cond:D
- cond:E
- 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
[groupid=546]Command Block Logic[/groupid]