1. Wiki
  2. /Entités
  3. /Événements d'entité

Événements d'entité

Utilise les événements d'entité dans les add-ons Bedrock pour ajouter et retirer des groupes de composants, tirer des résultats au hasard, exécuter des étapes dans l'ordre, enchaîner des événements et modifier des propriétés.

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.

Pack de comportements
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.

BP/entities/ruby_golem.json (events)
"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

ActionCe qu'elle fait
addActive un ou plusieurs groupes de composants
removeDésactive un ou plusieurs groupes de composants
set_propertyModifie une propriété déclarée dans description.properties
triggerDéclenche un autre événement
randomizeChoisit une seule entrée d'une liste, selon son poids
sequenceExécute toutes les entrées d'une liste, de haut en bas
first_validExécute la première entrée dont les filtres passent, et ignore les autres
filtersN'autorise les actions que si un filtre passe
queue_commandExécute une commande en tant que la créature, au tick suivant
play_soundJoue 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.

Dans un événement
"add": { "component_groups": ["wiki:angry", "wiki:glowing_eyes"] },
"remove": { "component_groups": ["wiki:calm"] }
  • Les groupes doivent exister dans component_groups du 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.

Dans un événement
"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.

Dans un événement
"trigger": "wiki:calm_down"

Tu peux aussi préciser qui reçoit l'événement :

Dans un é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.

BP/entities/ruby_golem.json (events)
"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.

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"] }
    }
  ]
}

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.

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 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.

BP/entities/ruby_golem.json (events)
"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.

Dans un événement
"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énementQuand il se déclenche
minecraft:entity_spawnedQuand la créature apparaît : apparition naturelle, œuf d'apparition ou /summon
minecraft:entity_bornQuand la créature naît de la reproduction de deux parents
minecraft:entity_transformedQuand 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, interact et ageable.
  • Commandes. /event entity @e[type=wiki:ruby_golem] wiki:become_angry le déclenche sur chaque golem de rubis.
  • Invocation. /summon wiki:ruby_golem ~ ~ ~ 0 0 wiki:spawn_baby fait apparaître le golem et déclenche aussitôt un événement. Voir /summon.
  • Règles d'apparition. La condition herd peut 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 voisCause la plus probable
Rien ne se passeLe 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 fauxIl 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 choseUn 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.

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