条件语句
下一页为 !非的概念
条件语句是模块中的一个重要指令
它用于判断事件是否成立,
若成立则输出;
若不成立则跳过。
条件语句将会涉及到
execute
- 条件与变量
- 相对性
testfor
关于枚举多个条件输出
或|| 与 且&&
- 或||
- 且&&
- 或且结合
!非的表达
- !非 单个变量
- !非 多个执行体
条件嵌套
- 条件嵌套相对性
- 条件嵌套与变量
- 子条件detect
全索引链接
§3.5 !非
?3.5.1 基本概念
下一页为 !非单个变量
在枚举条件的过程中,除了使用或与且来表达外,
还有一个重要的表达方式:!
!表示非,即逻辑关系中的否定含义。
那么!=就代表≠
所以在条件判断中,除了能判断符合
还能判断所有不符合。
条件1 → 输出1
!条件1 → 输出2
(由于在所有条件就是 符合条件1的 和 不符合条件1的,所以没有其他的选项了)
?3.5.2 单个变量
下一页为 !非多个执行体
对于单个变量指的是针对于单个变量的值。
例如x=1
那么x!=1代表x的值不为1。
- !单个范围(选择器自带min/max)
假设说f的a变量值>=1;
那么f的a变量值!>=1就是<1;
又因为目前变量储存的数都是整值,
所以也就是<=0。
!指令的输出与不输出↑
所以指令:
- execute @e[name=f,score_a_min=1]
变成:
- execute @e[name=f,score_a=0]
便完成了一个简单的!。
- !多个范围(或的枚举)
比如准确值10:
- execute @e[name=f,score_a_min=10,score_a=10]
(a<=10&&a>=10)
不能使用:
execute @e[name=f,score_a=9,score_a_min=11]
(a>=11&&a<=9)
这是一条错误指令,他表示且的关系,而a不可能同时<=11,<=9。
进一步分析两个范围,可以看到是一个或的关系:
a!=10可以表达成:
a>=11或a<=9;
所以得到以下指令:
在所有指令之前模拟fill执行:
- /fill ~1 ~ ~ ~4 ~ ~ redstone_block
接着按照顺序执行以下指令;
- /execute @e[name=f,score_a_min=11] ~ ~ ~ scoreboard players set @e[name=f] b 1
- /execute @e[name=f,score_a=9] ~ ~ ~ scoreboard players set @e[name=f] b 1
- /execute @e[name=f,score_b_min=1] ~ ~ ~ say 1
- /scoreboard players reset @e[name=f] b
效果:
1和15都不是10,有输出;
10是10,无输出
分析指令:
已经在或中讲解过了;
也就是枚举
a>=11或a<=9。
标准格式:
?3.5.3 多个执行体
多个执行体指的是针对与多个实体
比如我需要!所有NBT中指定标签的
那么就需要寻找拥有指定标签的。
- 非实体选择器(一般)
(abcd代表实体,其中a符合条件;x为变量)
a/b/c/d x=1
a reset x
(bcd x=1)
x=1 → 输出
也就是给!的对象去掉标签。
例如:
我需要在所有ArmorStand中
说出名字!=f的ArmorStand的名字。
使用以下指令:
在所有指令之前模拟fill执行:
- /fill ~1 ~ ~ ~4 ~ ~ redstone_block
接着按照顺序执行以下指令;
- /scoreboard players set @e[type=ArmorStand] a 1
- /scoreboard players reset @e[type=ArmorStand,name=f] a
- /execute @e[type=ArmorStand,score_a_min=1] ~ ~ ~ say @e[r=0]
- /scoreboard players reset @e[type=ArmorStand] a
效果:
通过修改指令中的特殊判断依据,可以达到!此依据的效果
分析指令:
首先给所有对象添加计分板Flag;
然后去掉特殊对象的Flag;
剩下的则都不符合特殊对象;
所以达到!的效果
标准格式:
- 实体选择器(只有某些分项有这个效果)
其实name=!f有这个效果。
type也是如此:
type=!Player
就是除了玩家外所有实体。