滤器
即MinecraftFilter,用于测试指定项目是否指定的条件,这是Addon附加包的一重大特色之一,带有较复杂的逻辑。
滤器被用于的地方较多,如实体行为组件、实体生成规则、事件、生物群系等
至于是怎么用到实体行为组件里,请查看实体文档已查阅需要使用到滤器的组件,这些基本上均为内嵌。
制作
格式
- test:(字符串)要测试的项目(详细介绍见下)。
- subject:(字符串)测试的主体。只有部分测试需要指定这个字段(详细介绍见下)。
- domain:(字符串)域。只有部分测试需要指定这个字段(详细介绍见下)。
- value(字符串或数字或布尔)给定的值。将会拿实际的数据与这个值进行比较。
- operator:(字符串)比较方式。在指定项目(test)上,主体(subject)的域(domain)与给定的值(value)的比较方式(
测试主体
- self:调用此测试的实体(即使用了该滤器的实体)。
- other:除调用者以外的,参与交互的实体。该实体具体是哪个,由调用该滤器的组件或事件决定。可能没有这个实体。
- parent:调用者的父母。可能没有这个实体。
- player:参与交互的玩家。该玩家具体是哪个,由调用该滤器的组件或事件决定。可能没有这个实体。
- target:调用者的目标实体。通常是该实体正在追杀的目标。可能没有这个实体。
比较方式
- =、==、equals:等于。当主体的项目与给定数据完全一致时,测试通过。如果比较方式被省略,则默认使用该种方式比较。
- !=、<>、not:不等于。当主体的项目与给定数据不一致时,测试通过。
- <:小于。当主体的项目小于给定数据时,测试通过。
- <=:小于等于。当主体的项目小于或等于给定数据时,测试通过。
- >:大于。当主体的项目大于给定数据时,测试通过。
- >=:大于等于。当主体的项目大于或等于给定数据时,测试通过。
组合
滤器其实可以将基本单位通过逻辑进行任意组合。
- any_of:(数组)当其下只要有任何一个滤器通过时,这组滤器就能通过。
- all_of:(数组)当其下的所有滤器通过时,这组滤器才能通过。
- none_of:(对象或数组)当其下的(所有)滤器没有通过时,该滤器才能通过。
例如可以这么写:
{
"any_of": [
{ "test": "has_biome_tag", "operator": "==", "value": "taiga"},
{ "test": "has_biome_tag", "operator": "!=", "value": "mega" }
]
}
当生物群系有taiga标签或者没有mega标签时,条件达成。
如果把any_of改成all_of:
{
"all_of": [
{ "test": "has_biome_tag", "operator": "==", "value": "taiga"},
{ "test": "has_biome_tag", "operator": "!=", "value": "mega" }
]
}
就变成了当生物群系有taiga标签并且没有mega标签时,条件才能达成。
如果改成none_of:
{
"none_of": [
{ "test": "has_biome_tag", "operator": "==", "value": "taiga"},
{ "test": "has_biome_tag", "operator": "!=", "value": "mega" }
]
}
就变成了当生态群系有taiga标签或者没有mega标签时,条件都不能达成。
all_of、any_of以及none_of可以自由组合和嵌套
{
"none_of": [
{ /* A */ "test": "is_family", "subject": "other", "value": "mob" },
{
"all_of": [
{ /* B */ "test": "is_family", "subject": "other", "value": "player" },
{
"none_of": { /* C */ "test": "has_ability", "subject": "other", "value": "instabuild" }
}
]
}
]
}
只要 A 滤器通过,或者B 滤器通过且C 滤器不通过,这整个一大块就不能通过。
更多示例以及测试项目请看↓提示(一定要配合使用)
测试项目
*请前往>API文档>其它文档>滤器 查看