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.
BP/
entities/
ruby_golem.json <- "events" is inside minecraft:entityCómo es un evento
Un evento es un nombre con un objeto de acciones. Cuando el evento se dispara, el juego ejecuta las acciones.
"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ón | Qué hace |
|---|---|
add | Activa uno o más grupos de componentes |
remove | Desactiva uno o más grupos de componentes |
set_property | Cambia una propiedad declarada en description.properties |
trigger | Dispara otro evento |
randomize | Elige una entrada de una lista, según su peso |
sequence | Ejecuta todas las entradas de una lista, de arriba abajo |
first_valid | Ejecuta la primera entrada cuyos filtros se cumplen y se salta el resto |
filters | Solo deja que se ejecuten las acciones si se cumple un filtro |
queue_command | Ejecuta un comando como la criatura, en el siguiente tick |
play_sound | Reproduce 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.
"add": { "component_groups": ["wiki:angry", "wiki:glowing_eyes"] },
"remove": { "component_groups": ["wiki:calm"] }- Los grupos deben existir en
component_groupsdentro 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.
"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.
"trigger": "wiki:calm_down"También puedes decir quién recibe el 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.
"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.
"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.
"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.
"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.
"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.
| Evento | Cuándo se dispara |
|---|---|
minecraft:entity_spawned | Cuando la criatura aparece por primera vez: aparición natural, un huevo generador o /summon |
minecraft:entity_born | Cuando la criatura nace de la cría de dos padres |
minecraft:entity_transformed | Cuando 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,interactyageable. - Comandos.
/event entity @e[type=wiki:ruby_golem] wiki:become_angrylo dispara en todos los gólems de rubí. - Invocación.
/summon wiki:ruby_golem ~ ~ ~ 0 0 wiki:spawn_babyhace aparecer al gólem y dispara un evento en ese mismo momento. Consulta /summon. - Reglas de aparición. La condición
herdpuede disparar un evento en parte de un grupo. Consulta Reglas de aparición.
Cuando algo sale mal
| Lo que ves | Causa más probable |
|---|---|
| No pasa nada | El nombre del evento está escrito de otra forma donde se dispara, o nada lo dispara |
| El grupo no se añade | El nombre del grupo en add no está en component_groups |
Un filtro de sequence parece fallar | Ve los valores de antes de que empezara el evento: mira el aviso de arriba |
| Se ignora un filtro de la raíz | El format_version del archivo es anterior a 1.19.20 |
randomize siempre elige lo mismo | Un 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.