Une animation ne sert pas qu'à bouger des os. À n'importe quel moment d'une animation, tu peux faire apparaître des particules, jouer un son, changer une variable, ou même lancer une commande. Dans ce guide, notre golem de rubis laisse des étincelles rouges et un gros bruit sourd à chaque pas, et se met en colère quand il est gravement blessé.
Ce guide s'appuie sur Animations d'entité et Contrôleurs d'animation.
Les fichiers
RP/
animations/
ruby_golem.animation.json
entity/
ruby_golem.entity.json
models/
entity/
ruby_golem.geo.json
BP/
animations/
ruby_golem.animation.json
animation_controllers/
ruby_golem.animation_controllers.json
entities/
ruby_golem.jsonEh oui, un pack de comportements peut aussi avoir des animations. La partie 3 explique pourquoi.
Quel pack peut faire quoi
| Événement | Pack de ressources | Pack de comportements |
|---|---|---|
Particules (particle_effects) | Oui | Non |
Sons (sound_effects) | Oui | Non |
Molang, comme variable.x = 1; | Oui | Oui |
Commandes, comme /say hi | Non | Oui |
Événements d'entité, comme @s wiki:enrage | Non | Oui |
La règle à retenir : le pack de ressources s'occupe de ce qu'on voit et entend sur l'écran de chaque joueur. Le pack de comportements s'occupe des vrais changements dans la partie, partagés par tout le monde.
Partie 1 : les particules
Donner un nom court à la particule
L'entité client liste les particules que la créature peut utiliser, chacune avec un nom court :
"particle_effects": {
"sparkle": "wiki:ruby_sparkle",
"dust": "minecraft:villager_happy"
}À droite, on trouve l'identifiant d'un effet de particules. Ce peut être un effet vanilla ou un effet que tu as créé toi-même (voir Particules).
La faire apparaître depuis une animation
Ajoute particle_effects à l'animation. Les clés sont des temps en secondes, comme des images clés :
"animation.ruby_golem.walk": {
"loop": true,
"animation_length": 1.0,
"bones": { },
"particle_effects": {
"0.0": { "effect": "sparkle", "locator": "left_foot" },
"0.5": { "effect": "sparkle", "locator": "right_foot" }
}
}À chaque boucle de la marche, une étincelle apparaît sous le pied gauche, puis sous le pied droit.
| Champ | Ce qu'il fait |
|---|---|
effect | Le nom court défini dans l'entité client. Obligatoire. |
locator | L'endroit du modèle où la particule démarre. Laisse-le de côté pour utiliser la position de la créature. |
bind_to_actor | false laisse la particule dans le monde au lieu de suivre la créature |
pre_effect_script | Du Molang lancé juste avant le départ de la particule, pour définir des variables que la particule lit |
Pour faire apparaître plusieurs particules en même temps, utilise une liste : "0.0": [ { ... }, { ... } ].
Les locators
Un locator est un point nommé à l'intérieur d'un os de ton modèle. Ajoute-les dans le fichier de géométrie :
{
"name": "left_leg",
"parent": "body",
"pivot": [3, 12, 0],
"locators": {
"left_foot": [3, 0, 0]
},
"cubes": [ ]
}Comme le locator se trouve dans un os, il bouge quand l'os bouge. Une particule placée sur left_foot suit la jambe qui se balance.
Partie 2 : les sons
Les sons marchent de la même façon. D'abord, des noms courts dans l'entité client :
"sound_effects": {
"thud": "mob.wiki.ruby_golem.step"
}À droite, on trouve le nom d'un événement sonore de RP/sounds/sound_definitions.json. Ensuite, ajoute sound_effects à l'animation :
"sound_effects": {
"0.0": { "effect": "thud" },
"0.5": { "effect": "thud" }
}Chaque entrée de son a un effect et un locator facultatif, exactement comme les particules.
Des pas bien synchronisés
Place les clés de son aux moments où un pied touche le sol dans ton animation. Si la marche utilise anim_time_update avec query.modified_distance_moved, les pas accélèrent et ralentissent automatiquement avec le golem.
Depuis un état de contrôleur
Les états d'un contrôleur peuvent aussi avoir des particle_effects et des sound_effects. Ils n'ont pas de temps, car un état n'a pas de chronologie. À la place, ils démarrent quand la créature entre dans l'état :
"alert": {
"animations": ["fists_up"],
"particle_effects": [{ "effect": "sparkle", "locator": "head" }],
"sound_effects": [{ "effect": "roar" }],
"transitions": [{ "idle": "!query.has_target" }]
}La timeline
En plus des particules et des sons, une animation peut avoir une timeline : une liste de choses à lancer à des moments précis. Dans un pack de ressources, la timeline exécute du Molang :
"animation.ruby_golem.blink": {
"animation_length": 4.0,
"loop": true,
"timeline": {
"0.0": "variable.eyes_closed = 0;",
"3.8": "variable.eyes_closed = 1;"
}
}Toutes les quatre secondes, le golem ferme les yeux un instant. Un contrôleur de rendu peut lire variable.eyes_closed pour afficher une autre texture ou cacher les os des yeux (voir Contrôleurs de rendu).
Une clé peut contenir une seule chaîne ou une liste de chaînes : "1.0": ["variable.a = 1;", "variable.b = 2;"].
Partie 3 : les animations du pack de comportements
Voici l'astuce. Le serveur peut lui aussi lancer des animations et des contrôleurs. Il ne peut pas bouger d'os (le serveur n'a pas de modèle à bouger), mais il peut exécuter des timelines et des états de contrôleur. Ça en fait un mini outil de script dans ta créature, sans JavaScript.
Dans un pack de comportements, un événement peut être trois choses :
| Chaîne d'événement | Ce qu'elle fait |
|---|---|
"/say Hello" | Lance une commande, comme si la créature la tapait. @s désigne la créature elle-même. |
"@s wiki:enrage" | Lance un événement de la liste events de la créature |
"variable.rage = 1;" | Exécute du Molang |
Les événements d'entité ne peuvent viser que la créature elle-même, donc c'est toujours @s suivi du nom de l'événement.
Étape 1 : un contrôleur qui surveille la vie
Faisons enrager le golem quand sa vie passe sous 20, et le calmer à nouveau quand il guérit :
{
"format_version": "1.10.0",
"animation_controllers": {
"controller.animation.ruby_golem.rage": {
"initial_state": "calm",
"states": {
"calm": {
"transitions": [
{ "enraged": "query.health < 20" }
]
},
"enraged": {
"on_entry": [
"/say The ruby golem is cracking!",
"/particle minecraft:lava_particle ~ ~1 ~",
"@s wiki:enrage"
],
"on_exit": [
"@s wiki:calm_down"
],
"transitions": [
{ "calm": "query.health >= 20" }
]
}
}
}
}
}La liste on_entry s'exécute une fois quand le golem entre dans enraged. Les commandes partent du golem, donc ~ ~1 ~ veut dire un bloc au-dessus de lui.
Étape 2 : une animation minuteur qui se répète
Une animation en boucle dans le pack de comportements fait un minuteur bien pratique. Celle-ci soigne un peu le golem au début de chaque boucle de 10 secondes :
{
"format_version": "1.10.0",
"animations": {
"animation.ruby_golem.regen": {
"loop": true,
"animation_length": 10.0,
"timeline": {
"0.0": "/effect @s regeneration 3 0 true"
}
}
}
}Étape 3 : les activer dans l'entité
Dans le fichier d'entité du pack de comportements, liste-les sous description et lance-les avec scripts.animate, comme le fait l'entité client :
{
"format_version": "1.21.0",
"minecraft:entity": {
"description": {
"identifier": "wiki:ruby_golem",
"is_spawnable": true,
"is_summonable": true,
"animations": {
"rage": "controller.animation.ruby_golem.rage",
"regen": "animation.ruby_golem.regen"
},
"scripts": {
"animate": ["rage", "regen"]
}
},
"component_groups": {
"wiki:enraged": {
"minecraft:movement": { "value": 0.35 },
"minecraft:attack": { "damage": 12 }
}
},
"components": { },
"events": {
"wiki:enrage": {
"add": { "component_groups": ["wiki:enraged"] }
},
"wiki:calm_down": {
"remove": { "component_groups": ["wiki:enraged"] }
}
}
}
}Maintenant, un golem blessé se déplace plus vite et frappe plus fort, puis redevient normal dès que sa régénération le fait repasser au-dessus de 20 points de vie.
Les commandes se lancent souvent
Une commande dans on_entry s'exécute à chaque entrée dans l'état, pour chaque golem du monde. Vingt golems qui changent d'état, ça fait vingt messages /say. Garde les commandes de chat pour tes tests et utilise des commandes silencieuses dans l'add-on final.
Quand quelque chose ne marche pas
| Ce que tu vois | Cause la plus probable |
|---|---|
| Pas de particules | Le nom court n'est pas dans les particle_effects de l'entité client, ou l'identifiant de la particule est faux |
| Les particules apparaissent aux pieds de la créature, pas au locator | Le nom du locator contient une faute de frappe ou il est dans un autre os |
| Pas de son | Le nom de l'événement sonore n'existe pas dans sound_definitions.json |
| Une commande dans un pack de ressources ne fait rien | Les commandes ne marchent que dans les animations du pack de comportements |
| Un contrôleur du pack de comportements ne se lance jamais | Il est dans description.animations mais pas dans description.scripts.animate |
@s wiki:enrage ne fait rien | L'événement manque dans les events de l'entité, ou son nom contient une faute de frappe |
Tu trouveras plus d'aide dans Dépannage.
Et ensuite
- Découvre les commandes que tu peux lancer depuis une timeline dans Commandes.
- Crée tes propres effets dans Particules.
- Lis la vie, les cibles et bien plus avec les requêtes Molang.