Le fichier de comportement décide de ce que fait une créature. Le fichier d'entité client décide de son apparence : quel modèle, quel skin, quelles animations et à quoi ressemble son œuf d'apparition. Il se trouve dans le pack de ressources.
Vois-le comme une liste de petits surnoms. Ici, tu donnes un nom court à chaque modèle, texture et animation, et les autres fichiers du pack de ressources utilisent ces noms.
Les fichiers
RP/
entity/
ruby_golem.entity.json
models/
entity/
ruby_golem.geo.json
textures/
entity/
ruby_golem.png
ruby_golem_angry.png
animations/
ruby_golem.animation.json
animation_controllers/
ruby_golem.animation_controllers.json
render_controllers/
ruby_golem.render_controllers.jsonSeuls le fichier entity, un modèle et une texture sont obligatoires. Les autres sont facultatifs : tu peux emprunter des animations et des contrôleurs de rendu vanilla au lieu d'écrire les tiens.
Le nom du fichier peut être n'importe lequel. Ce qui le relie au pack de comportements, c'est l'identifier.
Un exemple complet
Voici le fichier client du golem de rubis de la page Le fichier d'entité. Il affiche une texture en colère quand la propriété wiki:mood du golem vaut angry.
{
"format_version": "1.10.0",
"minecraft:client_entity": {
"description": {
"identifier": "wiki:ruby_golem",
"materials": {
"default": "entity_alphatest"
},
"textures": {
"default": "textures/entity/ruby_golem",
"angry": "textures/entity/ruby_golem_angry"
},
"geometry": {
"default": "geometry.wiki.ruby_golem"
},
"animations": {
"walk": "animation.wiki.ruby_golem.walk",
"attack": "animation.wiki.ruby_golem.attack",
"look_at_target": "animation.common.look_at_target",
"attack_controller": "controller.animation.wiki.ruby_golem.attack"
},
"scripts": {
"scale": "1.2",
"animate": [
{ "walk": "q.modified_move_speed" },
"look_at_target",
"attack_controller"
]
},
"render_controllers": ["controller.render.wiki.ruby_golem"],
"spawn_egg": {
"base_color": "#9b111e",
"overlay_color": "#f4c2c2"
}
}
}
}La plupart des fichiers client vanilla utilisent "format_version": "1.10.0", et c'est aussi un bon choix pour le tien. La suite de la page passe en revue chaque champ.
identifier
L'identifiant de la créature, exactement comme dans le pack de comportements : wiki:ruby_golem. Si les deux ne correspondent pas, la créature est invisible.
materials
Un matériau indique au jeu comment dessiner les pixels : opaques, transparents, lumineux, etc. Tu choisis parmi les matériaux qui existent déjà dans le jeu et tu donnes un nom court à chacun.
"materials": {
"default": "entity_alphatest",
"glow": "entity_emissive_alpha"
}| Matériau | À utiliser pour |
|---|---|
entity | Des skins totalement opaques, sans pixels transparents |
entity_alphatest | Des skins avec des trous totalement transparents. Le choix par défaut le plus sûr. |
entity_alphablend | Des pixels semi-transparents, comme le verre ou le slime |
entity_emissive_alpha | Des parties qui brillent dans le noir, définies par l'alpha de la texture |
Beaucoup de créatures vanilla ont des matériaux à leur nom (pig, iron_golem). Ils sont réglés pour une seule créature, donc pour la tienne, reste sur les matériaux généraux entity....
textures
Des noms courts pour chaque skin. Les chemins partent de la racine du pack de ressources et ne contiennent pas .png.
"textures": {
"default": "textures/entity/ruby_golem",
"angry": "textures/entity/ruby_golem_angry"
}Tu peux en lister autant que tu veux. C'est le contrôleur de rendu qui décide laquelle est affichée. Des conseils pour peindre des skins se trouvent dans Textures en pixel art.
geometry
Des noms courts pour chaque modèle. La valeur est l'identifier écrit dans le fichier .geo.json, pas le nom du fichier.
"geometry": {
"default": "geometry.wiki.ruby_golem"
}Une créature peut avoir plusieurs modèles. Les poulets vanilla, par exemple, ont un modèle normal, un modèle froid et un modèle bébé.
animations
Des noms courts pour les animations et les contrôleurs d'animation. Tu peux mélanger les tiens avec ceux du jeu vanilla.
"animations": {
"walk": "animation.wiki.ruby_golem.walk",
"look_at_target": "animation.common.look_at_target",
"attack_controller": "controller.animation.wiki.ruby_golem.attack"
}Leur donner un nom ne suffit pas : elles ne sont jouées que si elles sont listées dans scripts.animate (voir plus bas) ou lancées par un contrôleur d'animation.
Des animations vanilla pratiques à emprunter, si tes os ont les noms correspondants :
| Animation | Fait bouger | Os attendus |
|---|---|---|
animation.common.look_at_target | La tête vers ce que regarde la créature | head |
animation.quadruped.walk | Quatre pattes pendant la marche | leg0 à leg3 |
animation.humanoid.move | Les bras et les jambes pendant la marche | leftarm, rightarm, leftleg, rightleg |
animation_controllers
Les anciens fichiers client listent les contrôleurs dans leur propre tableau au lieu de animations :
"animation_controllers": [
{ "attack": "controller.animation.wiki.ruby_golem.attack" }
]Chaque entrée est un objet avec un nom court. Les contrôleurs listés ici tournent tout seuls, sans scripts.animate. Avec un format_version 1.10.0 ou plus récent, on met d'habitude les contrôleurs dans animations et on les lance depuis scripts.animate, comme dans l'exemple complet.
render_controllers
Un contrôleur de rendu choisit la géométrie, la texture et le matériau à dessiner. La liste peut en contenir plusieurs, et ils dessinent tous.
"render_controllers": ["controller.render.wiki.ruby_golem"]Pour une créature avec un seul modèle, un seul skin et un seul matériau, tu n'as pas besoin du tien. Le controller.render.default vanilla dessine ceux qui s'appellent default. Pour changer de texture, écris ton propre petit contrôleur :
{
"format_version": "1.8.0",
"render_controllers": {
"controller.render.wiki.ruby_golem": {
"geometry": "Geometry.default",
"materials": [{ "*": "Material.default" }],
"textures": [
"q.property('wiki:mood') == 'angry' ? Texture.angry : Texture.default"
]
}
}
}Geometry.default, Material.default et Texture.angry renvoient aux noms courts du fichier client. Le * dans materials veut dire "tous les os". La ligne de texture est une question Molang : les golems en colère reçoivent le skin en colère.
Ça ne marche que parce que la propriété a "client_sync": true dans le pack de comportements. Sans ça, le pack de ressources ne peut pas voir la valeur.
Tu peux aussi activer ou désactiver un contrôleur de rendu entier avec une condition Molang. Les creepers vanilla le font pour leur lueur quand ils sont chargés :
"render_controllers": [
"controller.render.wiki.ruby_golem",
{ "controller.render.wiki.ruby_golem_glow": "q.property('wiki:mood') == 'angry'" }
]scripts
scripts contient de petits morceaux de Molang qui s'exécutent sur l'appareil du joueur.
| Script | Quand il s'exécute | À quoi il sert |
|---|---|---|
initialize | Une fois, quand la créature apparaît pour la première fois | Définir les valeurs de départ des variables |
pre_animation | À chaque image, avant les animations | Calculer des valeurs dont les animations ont besoin |
animate | À chaque image | Choisir les animations et les contrôleurs à jouer |
scale | À chaque image | Agrandir ou rétrécir tout le modèle |
variables | Pas un script : une liste | Marquer des variables comme public pour que les attachables puissent les lire |
animate
Chaque entrée est un nom court tiré de animations. Mets-le dans un objet pour le jouer avec une intensité de 0 à 1 :
"animate": [
{ "walk": "q.modified_move_speed" },
"look_at_target",
"attack_controller"
]walk est jouée plus fort quand le golem avance plus vite, et s'arrête quand il est immobile. look_at_target est toujours jouée.
scale
"scale": "q.is_baby ? 0.5 : 1.2"Ça change seulement l'apparence de la créature. Sa boîte de collision, définie dans le pack de comportements, garde la même taille. Les chauves-souris vanilla utilisent "0.35" pour rétrécir leur modèle.
pre_animation
"pre_animation": [
"v.is_angry = q.property('wiki:mood') == 'angry';"
]Calcule une valeur une seule fois ici et utilise v.is_angry dans plein d'animations, au lieu de répéter partout la même longue expression.
spawn_egg
Sans spawn_egg, la créature n'a pas d'œuf dans l'inventaire créatif. Il y a deux façons d'en créer un.
Deux couleurs. Le jeu dessine un œuf standard avec une couleur de fond et des taches :
"spawn_egg": {
"base_color": "#9b111e",
"overlay_color": "#f4c2c2"
}Ta propre image. Utilise un nom court de item_texture.json, exactement comme pour l'icône d'un objet (voir Textures des objets) :
"spawn_egg": {
"texture": "wiki_ruby_golem_egg"
}Si ce nom court contient une liste de plusieurs textures, ajoute "texture_index" pour en choisir une. Il commence à 0. L'œuf a aussi besoin de "is_spawnable": true dans le pack de comportements, et d'un nom dans le fichier de langue :
entity.wiki:ruby_golem.name=Ruby Golem
item.spawn_egg.entity.wiki:ruby_golem.name=Ruby Golem Spawn EggAutres champs
| Champ | Ce qu'il fait |
|---|---|
enable_attachables | true affiche l'armure et les objets tenus sur la créature, grâce aux attachables |
hide_armor | true masque l'armure que porte la créature |
held_item_ignores_lighting | true dessine les objets tenus entièrement éclairés, même dans le noir |
locators | Des points nommés sur le modèle, comme l'endroit où s'attache une laisse |
particle_effects | Des noms courts pour les particules, à utiliser dans les animations |
sound_effects | Des noms courts pour les sons, à utiliser dans les animations |
min_engine_version | Ne charge ce fichier que si le pack cible cette version du jeu ou une plus récente |
Quand quelque chose ne va pas
| Ce que tu vois | Cause la plus probable |
|---|---|
| La créature est invisible, on ne voit que son ombre | L'identifier ne correspond pas au pack de comportements, ou le nom de la géométrie est faux |
| Un damier violet et noir | Le chemin de la texture est faux, ou il se termine par .png |
| Les trous sont noirs au lieu d'être transparents | Utilise entity_alphatest au lieu de entity |
| Une animation n'est jamais jouée | Elle est dans animations mais pas dans scripts.animate ni dans un contrôleur |
| Pas d'œuf d'apparition | spawn_egg est absent, ou is_spawnable vaut false dans le pack de comportements |
| La texture ne change jamais | Il manque "client_sync": true à la propriété |
Tu trouveras plus d'aide dans Dépannage. Pour le guide complet de création d'une créature, consulte Ta première créature personnalisée.