本帖最后由 贰逼 于 2015-7-9 13:51 编辑

条件语句
下一页为 testfor详解
条件语句是模块中的一个重要指令
它用于判断事件是否成立,
若成立则输出;
若不成立则跳过。


条件语句将会涉及到
execute
  • 条件与变量
  • 相对性

testfor

关于枚举多个条件输出

或|| 与 且&&
  • 或||
  • 且&&
  • 或且结合

!非的表达
  • !非 单个变量
  • !非 多个执行体

条件嵌套
  • 条件嵌套相对性
  • 条件嵌套与变量
  • 子条件detect

全索引链接
上一篇(execute)--下一篇(关于枚举与多个条件输出

§3.2 testfor
下一页为 execute与testfor区别
        3.2.1 指令格式


/testfor <player> [datdaTag]
就是
/testfor 实体选择器 NBT数据

使用后的返回值不是执行指令,而是输出信号


        3.2.2 条件与变量
在本小章讲解之前,仍需要预置一个实体进行条件储存



/summon ArmorStand ~ ~ ~ {CustomName:"f",CustomNameVisible:1}

和之前的execute相同
依旧是原来的效果:
使用
/scoreboard players set @e[name=f] a 1



如果使用:
/testfor @e[name=f,score_a_min=1]
输出信号

反之,



如果使用
/testfor @e[name=f,score_a=0]
不会输出

        3.2.3 条件与NBT
上方的指令
/testfor @e[name=f]
等价于
/testfor @e[] {CustomName:"f"}



仍旧会有输出,因为NBT符合实体条件


        3.2.4 execute与testfor区别
这两条指令皆为探测指令,那么区别究竟是什么

  • execute返回指令,testfor返回信号
前面的execute大家都知道了是返回指令,而且是相对执行
根据前面可以看出testfor返回的是红石信号,而且需要借助比较器。
(当然testfor也有执行值,可以获取执行值后转存计分版)

  • execute倾向计分板,testfor倾向NBT
execute基本都是利用计分板操作的(以及相对性),这点testfor比较灵活,
因为testfor能直接加上NBT进行判断输出
(当然execute也可以借助scoreboard赋值后缀NBT来达到探测NBT的效果,在变量与NBT有讲解

  • execute无输出器,testfor有输出器
execute可以直接对接高频输出,而testfor对接后还需要输出器完成输出,
因此上面如果要达成
execute @e[name=f] ~ ~ ~ say 1
的效果

需要如下:



利用testfor探测:
/testfor @e[name=f]
比较器输出:
/say 1

值得注意的是,execute连接高频后会跟着高频输出
而testfor输出后由于比较器没有更新(Bud)所以仅仅输出一次
(后续有方法创建单次执行模块)

在模块中着重使用execute

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