本帖最后由 贰逼 于 2015-11-15 18:53 编辑

        3.3+ else
之前的枚举就是:
if和if else,是对于不同结果的输出。
情况不能被全部枚举,如果我要检测并不是枚举过的条件并输出,那么就需要else(另)

在1.9中,else有三种表达方式。
(↓表示输出接口,∨表示condition输出)
  • 串联模块中的execute枚举使用bool变量






/scoreboard players tag 转存实体 add bool变量名


/execute 条件1 输出1


/execute 条件1 /scoreboard players tag 转存实体 remove bool变量名


/execute 条件2 输出2


/execute 条件2 /scoreboard players tag 转存实体 remove bool变量名


/execute 条件n 输出n


/execute 条件n /scoreboard players tag 转存实体 remove bool变量名


/execute 转存实体[tag=bool变量名] else输出

主要就是使用bool变量转存枚举的输出情况,然后else判断后输出


  • 并联模块中的"条件嵌套"枚举使用bool变量





将串联分为并联,仍然使用bool变量


/scoreboard players tag 转存实体 add bool变量名


条件1


输出1


条件2



输出2


条件n


输出n


/testfor 转存实体[tag=bool变量名]


else输出

原理和execute的bool法相同。
*需要注意核心的位置先后顺序,否则逻辑矛盾)
图中使用的还是execute并联,可以对比以下"条件嵌套"和execute区别和共同点)

  • 串联模块使用NBT修改





不用任何实体转存,靠NBT修改完成

条件1


/blockdata else输出核心坐标 {conditionMet:0b}


输出1


条件2


/blockdata else输出核心坐标 {conditionMet:0b}


输出2


条件n


/blockdata else输出核心坐标 {conditionMet:0b}


输出n


else输出核心


else输出)


/blockdata else输出核心坐标 {conditionMet:1b}



原理就是如果前面的并联模块的枚举有任意输出,就使else输出的核心变为conditional,从而中断else输出的模块。
*其中需要注意何处摆放condition和指令方块的类型(否则无法达成目的),依旧需要注意核心的位置(先后顺序,否则逻辑矛盾)


这些方式输出依据主要运用时钟,而时钟以后会讲到。


对比:
方案一是串联模块枚举

方案二是并联模块枚举的逻辑层次简化

方案三是并联模块枚举的指令数量简化


[groupid=546]Command Block Logic[/groupid]