1. Wiki
  2. /Entidades
  3. /Eventos de entidad

Eventos de entidad

Usa los eventos de entidad en los complementos de Bedrock para añadir y quitar grupos de componentes, elegir resultados al azar, ejecutar pasos en orden, encadenar eventos y cambiar propiedades.

Los eventos son la forma en que una criatura cambia. Una cría crece, un lobo domesticado se sienta, un creeper empieza a encender la mecha: cada una de esas cosas es un evento que activa o desactiva grupos de componentes. Esta página muestra todo lo que puede hacer un evento, usando el gólem de rubí de El archivo de entidad.

Los archivos

Los eventos van en el mismo archivo que el resto del comportamiento de la criatura, en el bloque events.

Paquete de comportamiento
BP/
  entities/
    ruby_golem.json    <- "events" is inside minecraft:entity

Cómo es un evento

Un evento es un nombre con un objeto de acciones. Cuando el evento se dispara, el juego ejecuta las acciones.

BP/entities/ruby_golem.json (events)
"events": {
  "wiki:become_angry": {
    "add": { "component_groups": ["wiki:angry"] },
    "remove": { "component_groups": ["wiki:calm"] }
  }
}

Pon a tus eventos tu propio espacio de nombres, como wiki:become_angry. Los nombres minecraft: son para los eventos que dispara el propio juego.

Todas las acciones de un vistazo

AcciónQué hace
addActiva uno o más grupos de componentes
removeDesactiva uno o más grupos de componentes
set_propertyCambia una propiedad declarada en description.properties
triggerDispara otro evento
randomizeElige una entrada de una lista, según su peso
sequenceEjecuta todas las entradas de una lista, de arriba abajo
first_validEjecuta la primera entrada cuyos filtros se cumplen y se salta el resto
filtersSolo deja que se ejecuten las acciones si se cumple un filtro
queue_commandEjecuta un comando como la criatura, en el siguiente tick
play_soundReproduce uno de los sonidos de la criatura, como "saddle" en un camello

add y remove

Estas dos hacen la mayor parte del trabajo. Las dos aceptan una lista, así que puedes cambiar varios grupos a la vez.

Dentro de un evento
"add": { "component_groups": ["wiki:angry", "wiki:glowing_eyes"] },
"remove": { "component_groups": ["wiki:calm"] }
  • Los grupos deben existir en component_groups dentro del mismo archivo. Si un nombre está mal escrito, ese grupo simplemente no se añade, así que revisa bien los nombres.
  • Añadir un grupo que ya está activo lo reinicia. Un temporizador dentro de él vuelve a contar desde cero.
  • Quitar un grupo que no está activo no hace nada, así que puedes quitarlo "por si acaso" sin problema.

set_property

Cambia una propiedad de la criatura. La propiedad debe estar declarada en la descripción.

Dentro de un evento
"set_property": {
  "wiki:mood": "angry",
  "wiki:rubies_eaten": "math.min(q.property('wiki:rubies_eaten') + 1, 5)"
}

El valor puede ser un valor simple o una expresión de Molang dentro de un texto. La segunda línea de arriba suma 1 cada vez, pero nunca pasa de 5. Consulta Consultas de Molang para ver qué puedes leer.

trigger: encadenar eventos

trigger dispara otro evento. Así puedes escribir una lógica una sola vez y reutilizarla.

Dentro de un evento
"trigger": "wiki:calm_down"

También puedes decir quién recibe el evento:

Dentro de un evento
"trigger": {
  "event": "wiki:calm_down",
  "target": "self"
}

randomize: elegir una

randomize contiene una lista de entradas. El juego elige una de ellas y la ejecuta. Cada entrada puede tener un weight (peso): los pesos más grandes se eligen más a menudo. Una entrada sin peso cuenta como 1.

BP/entities/ruby_golem.json (events)
"minecraft:entity_spawned": {
  "randomize": [
    {
      "weight": 3,
      "trigger": "wiki:spawn_adult"
    },
    {
      "weight": 1,
      "trigger": "wiki:spawn_baby"
    }
  ]
}

La probabilidad de cada entrada es su peso dividido entre el total. Aquí el total es 4, así que un adulto tiene 3 de 4 posibilidades (75%) y una cría 1 de 4 (25%).

Una entrada también puede ser solo { "weight": 3 }, sin acciones. Eso significa "3 partes de probabilidad de no hacer nada".

sequence: hacer varias cosas en orden

sequence ejecuta todas las entradas, de la primera a la última. Se vuelve muy útil cuando las entradas tienen sus propios filters: cada una solo se ejecuta si se cumple su comprobación.

BP/entities/ruby_golem.json (events)
"wiki:fed_ruby": {
  "sequence": [
    {
      "set_property": {
        "wiki:rubies_eaten": "q.property('wiki:rubies_eaten') + 1"
      }
    },
    {
      "filters": { "test": "is_baby", "value": true },
      "trigger": "wiki:grow_up"
    },
    {
      "filters": { "test": "int_property", "domain": "wiki:rubies_eaten", "operator": ">=", "value": 4 },
      "add": { "component_groups": ["wiki:shiny"] }
    }
  ]
}

Los cambios se aplican al final

Cuando se ejecuta un evento, el juego calcula primero todas sus acciones y las aplica en la siguiente actualización de la criatura. Así que un filtro de una entrada posterior de un sequence sigue viendo los valores antiguos. En el ejemplo de arriba, la tercera entrada comprueba el contador de antes de que la primera entrada sumara 1. Tenlo en cuenta, o divide la lógica en dos eventos.

first_valid: gana la primera que coincide

first_valid se parece a sequence, pero se detiene después de la primera entrada cuyos filtros se cumplen. Es perfecto para "si pasa esto, si no, si pasa aquello, si no...". Las vacas del juego base lo usan para elegir un aspecto cálido o frío según el bioma donde aparecen.

BP/entities/ruby_golem.json (events)
"wiki:pick_color": {
  "first_valid": [
    {
      "filters": { "test": "has_biome_tag", "value": "desert" },
      "add": { "component_groups": ["wiki:sandy"] }
    },
    {
      "filters": { "test": "has_biome_tag", "value": "frozen" },
      "add": { "component_groups": ["wiki:icy"] }
    },
    {
      "add": { "component_groups": ["wiki:plain"] }
    }
  ]
}

La última entrada no tiene filtros, así que siempre se cumple. Funciona como el caso "en cualquier otro caso".

filters en todo el evento

Puedes poner filters directamente en un evento. Si el filtro falla, no se ejecuta nada del evento.

BP/entities/ruby_golem.json (events)
"wiki:become_angry": {
  "filters": { "test": "is_baby", "value": false },
  "add": { "component_groups": ["wiki:angry"] }
}

Ahora las crías de gólem nunca se enfadan. Esto necesita un format_version de 1.19.20 o más reciente. Con una versión más antigua, el juego se salta el filtro y siempre ejecuta el evento.

queue_command

Ejecuta un comando como si lo escribiera la criatura. Se ejecuta en el siguiente tick, salvo que la criatura ya no exista para entonces.

Dentro de un evento
"queue_command": {
  "command": "say I am made of rubies!"
}

Es útil para cosas pequeñas como partículas, sonidos o etiquetas ("tag @s add wiki:tamed"). Para algo más grande, una función o un script es más fácil de manejar.

Eventos que el juego dispara por ti

Algunos eventos tienen nombres minecraft: fijos. Si tu criatura tiene un evento con uno de estos nombres, el juego lo dispara en el momento adecuado.

EventoCuándo se dispara
minecraft:entity_spawnedCuando la criatura aparece por primera vez: aparición natural, un huevo generador o /summon
minecraft:entity_bornCuando la criatura nace de la cría de dos padres
minecraft:entity_transformedCuando otra criatura se convierte en esta, mediante minecraft:transformation

En minecraft:entity_spawned es donde la mayoría de las criaturas preparan su estado inicial, como elegir entre adulto y cría.

Otras formas de disparar un evento

  • Componentes. Muchos componentes aceptan un evento, como timer, damage_sensor, environment_sensor, interact y ageable.
  • Comandos. /event entity @e[type=wiki:ruby_golem] wiki:become_angry lo dispara en todos los gólems de rubí.
  • Invocación. /summon wiki:ruby_golem ~ ~ ~ 0 0 wiki:spawn_baby hace aparecer al gólem y dispara un evento en ese mismo momento. Consulta /summon.
  • Reglas de aparición. La condición herd puede disparar un evento en parte de un grupo. Consulta Reglas de aparición.

Cuando algo sale mal

Lo que vesCausa más probable
No pasa nadaEl nombre del evento está escrito de otra forma donde se dispara, o nada lo dispara
El grupo no se añadeEl nombre del grupo en add no está en component_groups
Un filtro de sequence parece fallarVe los valores de antes de que empezara el evento: mira el aviso de arriba
Se ignora un filtro de la raízEl format_version del archivo es anterior a 1.19.20
randomize siempre elige lo mismoUn peso es mucho más grande que los demás

Prueba los eventos rápidamente disparándolos con /event en una sola criatura. Tienes más ayuda en Solución de problemas. Siguiente: Reglas de aparición.

We use cookies to improve your experience and analyse site traffic. Learn more