Un filtro es una pregunta de sí o no que el juego se hace sobre una criatura. "¿El atacante es un jugador?" "¿Es de día?" "¿Esta criatura está en el agua?" Si la respuesta es sí, el filtro se cumple y lo que protege puede ocurrir.
Los filtros aparecen por todas partes en los archivos de una criatura: en los eventos, en componentes como los sensores de daño y la selección de objetivos, y en las reglas de aparición. Apréndelos una vez y podrás usarlos en todas partes.
Los archivos
Los filtros no tienen un archivo propio. Van dentro de otros archivos, bajo claves llamadas filters (o biome_filter en las reglas de aparición).
BP/
entities/
ruby_golem.json <- in events and many components
spawn_rules/
ruby_golem.json <- minecraft:biome_filterUna prueba
El filtro más pequeño es una sola prueba (test):
{ "test": "is_family", "subject": "other", "operator": "==", "value": "player" }Léelo como una frase: "¿La familia de la otra entidad es igual a player?"
| Campo | Qué significa | Si lo omites |
|---|---|---|
test | Qué pregunta se hace. Mira las tablas de abajo. | Obligatorio |
subject | Sobre quién se pregunta | self |
operator | Cómo se compara con value | equals |
value | Con qué se compara | En las pruebas de sí/no: true |
domain | Un detalle extra para algunas pruebas, como una ranura de equipo o el nombre de una propiedad | Depende de la prueba |
Gracias a los valores por defecto, los filtros cortos son muy comunes:
{ "test": "is_daytime" }
{ "test": "in_water", "value": false }
{ "test": "has_tag", "value": "wiki:tamed" }El primero pregunta "¿es de día?". El segundo pregunta "¿esta criatura no está en el agua?".
Sujetos: a quién se pone a prueba
| Sujeto | Quién es |
|---|---|
self | La criatura dueña del filtro |
other | La otra entidad de una interacción: la que es objetivo, la que se toca o con la que se interactúa |
player | El jugador que participa en la interacción |
target | El objetivo actual de la criatura |
damager | Quien causó el daño, en un sensor de daño |
parent | El padre o la madre de la criatura |
block | El bloque implicado, para pruebas de bloques como is_block |
Qué sujetos tienen sentido depende de dónde esté el filtro. En un sensor de daño, other y damager son el atacante. En un comportamiento de selección de objetivos, other es la criatura que se está valorando como objetivo.
Operadores: cómo comparar
| Operador | Significa |
|---|---|
==, =, equals | Igual a (por defecto) |
!=, <>, not | Distinto de |
< | Menor que |
<= | Menor o igual que |
> | Mayor que |
>= | Mayor o igual que |
Los operadores de mayor/menor solo tienen sentido en pruebas de números como actor_health o distance_to_nearest_player.
Combinar pruebas
Junta varias pruebas con un grupo:
| Grupo | Se cumple cuando |
|---|---|
all_of | Se cumplen todas las pruebas de dentro (Y) |
any_of | Se cumple al menos una prueba de dentro (O) |
none_of | No se cumple ninguna prueba de dentro (NO) |
Los grupos pueden contener otros grupos, así que puedes construir cualquier regla que necesites. Este se cumple para un jugador que no va agachado, de noche o durante una tormenta eléctrica:
"filters": {
"all_of": [
{ "test": "is_family", "subject": "other", "value": "player" },
{ "test": "is_sneaking", "subject": "other", "value": false },
{
"any_of": [
{ "test": "is_daytime", "value": false },
{ "test": "weather_at_position", "value": "thunderstorm" }
]
}
]
}Una lista sin grupo equivale a all_of
Si escribes una lista simple de pruebas sin nombre de grupo, todas las pruebas deben cumplirse, igual que con all_of. Las reglas de aparición del juego base lo hacen a menudo.
Dónde se usan los filtros
Sensor de daño: reacciona a quien te golpea
"minecraft:damage_sensor": {
"triggers": [
{
"on_damage": {
"filters": { "test": "is_family", "subject": "other", "value": "player" },
"event": "wiki:become_angry"
}
}
]
}Solo los jugadores hacen enfadar al gólem. El daño de criaturas, caídas o fuego no hace nada especial. Consulta minecraft:damage_sensor.
Selección de objetivos: a quién atacar
"minecraft:behavior.nearest_attackable_target": {
"priority": 2,
"entity_types": [
{
"filters": {
"all_of": [
{ "test": "is_family", "subject": "other", "value": "monster" },
{ "test": "is_family", "subject": "other", "operator": "not", "value": "creeper" }
]
},
"max_dist": 16
}
]
}El gólem caza monstruos, pero deja en paz a los creepers. Consulta behavior.nearest_attackable_target.
Sensor de entorno: reacciona al mundo
"minecraft:environment_sensor": {
"triggers": [
{
"filters": { "test": "in_water" },
"event": "wiki:start_rusting"
}
]
}El sensor de entorno comprueba sus filtros todo el tiempo y dispara el evento mientras se cumplen.
Eventos y reglas de aparición
Dentro de los eventos, filters decide si una entrada se ejecuta (consulta Eventos de entidad). En las reglas de aparición, minecraft:biome_filter usa las mismas pruebas para elegir biomas (consulta Reglas de aparición).
Las pruebas más útiles
Hay más de cien pruebas. Estas son las que usarás más a menudo, agrupadas por lo que comprueban.
¿Quién es?
| Prueba | Valor | Se cumple cuando el sujeto... |
|---|---|---|
is_family | Nombre de familia, como "player" | tiene esa familia en minecraft:type_family |
has_component | ID de componente, como "minecraft:is_baby" | tiene ese componente en este momento |
has_tag | Nombre de etiqueta | tiene esa etiqueta de /tag |
is_baby | true / false | es una cría |
is_tamed | true / false | está domesticado |
is_owner | true / false | es el dueño de la criatura dueña del filtro |
has_nametag | true / false | tiene un nombre personalizado |
is_variant | Número | tiene ese número en minecraft:variant |
is_mark_variant | Número | tiene ese número en minecraft:mark_variant |
is_color | Nombre de color, como "red" | tiene ese color |
Vida y estado
| Prueba | Valor | Se cumple cuando el sujeto... |
|---|---|---|
actor_health | Número | tiene una vida que, comparada con el valor, cumple el operador (usa <, >, etc.) |
is_missing_health | true / false | no tiene la vida al máximo |
has_mob_effect | ID de efecto, como "poison" | tiene ese efecto. Consulta Efectos del juego base. |
on_fire | true / false | está ardiendo |
on_ground | true / false | está pisando el suelo |
is_sneaking | true / false | va agachado |
is_sprinting | true / false | está esprintando |
is_moving | true / false | se está moviendo |
is_riding | true / false | va montado en otra entidad |
rider_count | Número | lleva ese número de jinetes |
has_target | true / false | tiene algo a lo que atacar |
has_damage | Tipo de daño, como "fall" o "fire" | está recibiendo ese tipo de daño (sensores de daño) |
Objetos
| Prueba | Valor | Se cumple cuando el sujeto... |
|---|---|---|
has_equipment | ID de objeto | tiene ese objeto en la ranura indicada en domain, como "hand", "head" o "any" |
has_equipment_tag | Etiqueta de objeto | tiene un objeto con esa etiqueta en la ranura de domain |
has_ranged_weapon | true / false | lleva un arco o una ballesta |
Dónde está
| Prueba | Valor | Se cumple cuando el sujeto... |
|---|---|---|
in_water | true / false | está en el agua |
is_underwater | true / false | está completamente bajo el agua |
in_water_or_rain | true / false | está en el agua o bajo la lluvia |
in_lava | true / false | está en la lava |
is_underground | true / false | tiene bloques encima |
in_nether / in_overworld | true / false | está en esa dimensión |
has_biome_tag | Etiqueta de bioma, como "desert" | está en un bioma con esa etiqueta. Consulta Biomas del juego base. |
is_biome | Tipo de bioma, como "ocean" o "jungle" | está en ese tipo general de bioma |
is_altitude | Número | está a una altura que, comparada con el valor, cumple el operador |
is_block | ID de bloque | (con "subject": "block") el bloque implicado es ese bloque |
is_in_village | true / false | está dentro de una aldea |
¿has_biome_tag o is_biome?
Mejor has_biome_tag. Las etiquetas son más precisas, y los biomas personalizados de otros complementos pueden llevar las mismas etiquetas.
Distancia
| Prueba | Valor | Se cumple cuando... |
|---|---|---|
distance_to_nearest_player | Número de bloques | el jugador más cercano está a esa distancia (usa < o >) |
target_distance | Número de bloques | el objetivo de la criatura está a esa distancia |
owner_distance | Número de bloques | el dueño de la criatura está a esa distancia |
home_distance | Número de bloques | el hogar de la criatura está a esa distancia |
Hora, tiempo y el mundo
| Prueba | Valor | Se cumple cuando... |
|---|---|---|
is_daytime | true / false | es de día |
hourly_clock_time | Número de 0 a 24000 | la hora del día, comparada con el valor, cumple el operador |
moon_phase | Número de 0 a 7 | la luna está en esa fase |
weather_at_position | Tiempo, como "thunderstorm" | el tiempo donde está el sujeto coincide |
is_difficulty | "peaceful", "easy", "normal" o "hard" | el juego está en esa dificultad |
is_game_rule | true / false | la regla del juego indicada en domain está activada |
random_chance | Número | sale bien una tirada al azar: un valor de 10 se cumple más o menos 1 vez de cada 10 |
Propiedades de entidad
Estas leen las propiedades declaradas en la descripción de la criatura. El nombre de la propiedad va en domain:
| Prueba | Valor |
|---|---|
bool_property | true / false |
int_property | Número entero |
float_property | Número decimal |
enum_property | Una de las palabras de values |
has_property | El nombre de la propiedad (en value, sin domain) |
{ "test": "enum_property", "domain": "wiki:mood", "value": "angry" }Cuando algo sale mal
| Lo que ves | Causa más probable |
|---|---|
| El filtro nunca se cumple | subject equivocado. En un sensor de daño o en la selección de objetivos, normalmente quieres other, no self. |
| El filtro se cumple cuando no debería | A una prueba de sí/no le falta "value": false donde querías decir "no", o una clave está mal escrita (como allof). Revisa el registro de contenido (Content Log). |
| Falla una prueba de familia | La familia no está en la lista minecraft:type_family del objetivo |
| Falla una prueba de propiedad | El nombre de la propiedad en domain no coincide con el de description.properties |
| Una prueba de número se comporta raro | Falta el operador, así que comprueba una coincidencia exacta |
Tienes más ayuda en Solución de problemas.