Les événements sont la façon dont une créature change. Un bébé grandit, un loup apprivoisé s'assoit, un creeper commence à s'allumer : à chaque fois, c'est un événement qui active ou désactive des groupes de composants. Cette page montre tout ce qu'un événement peut faire, avec le golem de rubis du guide Le fichier d'entité.
Les fichiers
Les événements se trouvent dans le même fichier que le reste du comportement de la créature, dans le bloc events.
BP/
entities/
ruby_golem.json <- "events" is inside minecraft:entityÀ quoi ressemble un événement
Un événement est un nom associé à un objet d'actions. Quand l'événement se déclenche, le jeu exécute les actions.
"events": {
"wiki:become_angry": {
"add": { "component_groups": ["wiki:angry"] },
"remove": { "component_groups": ["wiki:calm"] }
}
}Donne à tes événements ton propre espace de noms, comme wiki:become_angry. Les noms en minecraft: sont réservés aux événements que le jeu déclenche lui-même.
Toutes les actions en un coup d'œil
| Action | Ce qu'elle fait |
|---|---|
add | Active un ou plusieurs groupes de composants |
remove | Désactive un ou plusieurs groupes de composants |
set_property | Modifie une propriété déclarée dans description.properties |
trigger | Déclenche un autre événement |
randomize | Choisit une seule entrée d'une liste, selon son poids |
sequence | Exécute toutes les entrées d'une liste, de haut en bas |
first_valid | Exécute la première entrée dont les filtres passent, et ignore les autres |
filters | N'autorise les actions que si un filtre passe |
queue_command | Exécute une commande en tant que la créature, au tick suivant |
play_sound | Joue un des sons de la créature, comme "saddle" sur un dromadaire |
add et remove
Ces deux-là font l'essentiel du travail. Les deux prennent une liste, donc tu peux changer plusieurs groupes d'un coup.
"add": { "component_groups": ["wiki:angry", "wiki:glowing_eyes"] },
"remove": { "component_groups": ["wiki:calm"] }- Les groupes doivent exister dans
component_groupsdu même fichier. Si un nom est mal écrit, ce groupe n'est tout simplement pas ajouté : vérifie bien les noms. - Ajouter un groupe déjà actif le redémarre. Un minuteur à l'intérieur recommence à compter depuis zéro.
- Retirer un groupe inactif ne fait rien, donc tu peux en retirer un « au cas où » sans risque.
set_property
Modifie une propriété de la créature. La propriété doit être déclarée dans la description.
"set_property": {
"wiki:mood": "angry",
"wiki:rubies_eaten": "math.min(q.property('wiki:rubies_eaten') + 1, 5)"
}La valeur peut être une valeur simple, ou une expression Molang dans une chaîne. La deuxième ligne ci-dessus ajoute 1 à chaque fois, sans jamais dépasser 5. Consulte Requêtes Molang pour savoir ce que tu peux lire.
trigger : enchaîner des événements
trigger déclenche un autre événement. Ça te permet d'écrire un bout de logique une seule fois et de le réutiliser.
"trigger": "wiki:calm_down"Tu peux aussi préciser qui reçoit l'événement :
"trigger": {
"event": "wiki:calm_down",
"target": "self"
}randomize : en choisir une
randomize contient une liste d'entrées. Le jeu en choisit une et l'exécute. Chaque entrée peut avoir un weight (poids) : plus le poids est grand, plus elle est choisie souvent. Une entrée sans poids compte pour 1.
"minecraft:entity_spawned": {
"randomize": [
{
"weight": 3,
"trigger": "wiki:spawn_adult"
},
{
"weight": 1,
"trigger": "wiki:spawn_baby"
}
]
}La chance de chaque entrée est son poids divisé par le total. Ici, le total vaut 4 : un adulte a donc 3 chances sur 4 (75 %) et un bébé 1 sur 4 (25 %).
Une entrée peut aussi être juste { "weight": 3 } sans aucune action. Ça veut dire « 3 parts de chance de ne rien faire ».
sequence : faire plusieurs choses dans l'ordre
sequence exécute toutes les entrées, de la première à la dernière. Elle devient puissante quand les entrées ont leurs propres filters : chacune ne s'exécute que si son test passe.
"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"] }
}
]
}Les changements arrivent à la fin
Quand un événement s'exécute, le jeu calcule d'abord toutes ses actions et les applique à la prochaine mise à jour de la créature. Un filtre dans une entrée plus loin d'une sequence voit donc encore les anciennes valeurs. Dans l'exemple ci-dessus, la troisième entrée teste le compteur avant que la première entrée ait ajouté 1. Garde ça en tête, ou répartis la logique sur deux événements.
first_valid : la première qui correspond gagne
first_valid ressemble à sequence, mais s'arrête après la première entrée dont les filtres passent. C'est parfait pour « si ceci, sinon si cela, sinon... ». Les vaches vanilla s'en servent pour choisir un look chaud ou froid selon le biome où elles apparaissent.
"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 dernière entrée n'a pas de filtres, donc elle passe toujours. Elle joue le rôle du cas « sinon ».
Des filtres sur tout l'événement
Tu peux mettre filters directement sur un événement. Si le filtre échoue, rien dans l'événement ne s'exécute.
"wiki:become_angry": {
"filters": { "test": "is_baby", "value": false },
"add": { "component_groups": ["wiki:angry"] }
}Maintenant, les bébés golems ne se mettent jamais en colère. Il faut une format_version de 1.19.20 ou plus récente. Avec une version plus ancienne, le jeu ignore le filtre et exécute toujours l'événement.
queue_command
Exécute une commande comme si la créature l'avait tapée. Elle s'exécute au tick suivant, sauf si la créature a disparu entre-temps.
"queue_command": {
"command": "say I am made of rubies!"
}Pratique pour les petites choses comme des particules, des sons ou des tags ("tag @s add wiki:tamed"). Pour tout ce qui est plus gros, une fonction ou un script est plus facile à gérer.
Les événements que le jeu déclenche pour toi
Certains événements ont des noms minecraft: fixes. Si ta créature a un événement portant l'un de ces noms, le jeu le déclenche au bon moment.
| Événement | Quand il se déclenche |
|---|---|
minecraft:entity_spawned | Quand la créature apparaît : apparition naturelle, œuf d'apparition ou /summon |
minecraft:entity_born | Quand la créature naît de la reproduction de deux parents |
minecraft:entity_transformed | Quand une autre créature se transforme en celle-ci, via minecraft:transformation |
minecraft:entity_spawned est l'endroit où la plupart des créatures préparent leur état de départ, par exemple choisir entre adulte et bébé.
Autres façons de déclencher un événement
- Composants. Beaucoup de composants prennent un événement, comme
timer,damage_sensor,environment_sensor,interactetageable. - Commandes.
/event entity @e[type=wiki:ruby_golem] wiki:become_angryle déclenche sur chaque golem de rubis. - Invocation.
/summon wiki:ruby_golem ~ ~ ~ 0 0 wiki:spawn_babyfait apparaître le golem et déclenche aussitôt un événement. Voir /summon. - Règles d'apparition. La condition
herdpeut déclencher un événement sur une partie d'un groupe. Voir Règles d'apparition.
Quand quelque chose ne va pas
| Ce que tu vois | Cause la plus probable |
|---|---|
| Rien ne se passe | Le nom de l'événement est écrit autrement là où il est déclenché, ou rien ne le déclenche |
| Le groupe n'est pas ajouté | Le nom du groupe dans add n'est pas dans component_groups |
Un filtre de sequence semble faux | Il voit les valeurs d'avant le début de l'événement : voir l'avertissement plus haut |
| Un filtre à la racine est ignoré | La format_version du fichier est plus ancienne que 1.19.20 |
randomize choisit toujours la même chose | Un poids est bien plus grand que les autres |
Teste vite tes événements en les déclenchant avec /event sur une seule créature. Plus d'aide dans Dépannage. Ensuite : Règles d'apparition.