1. Wiki
  2. /Entités
  3. /Le fichier d'entité

Le fichier d'entité

Comment est construit un fichier d'entité de pack de comportements Bedrock : la description, les composants, les groupes de composants et les événements, avec l'exemple complet d'un golem de rubis.

Chaque créature d'un add-on a un fichier de comportement. Il décide de la santé de la créature, de sa façon de se déplacer, de ce qu'elle attaque et de la façon dont elle évolue avec le temps. Cette page décortique ce fichier morceau par morceau, avec un golem de rubis comme exemple.

Si tu n'as jamais créé de créature, commence par Ta première créature personnalisée. Cette page va plus loin dans l'organisation du fichier.

Les fichiers

Le fichier de comportement se trouve dans le dossier entities du pack de comportements. Tu choisis le nom du fichier, mais lui donner le nom de la créature, c'est plus clair.

Pack de comportements
BP/
  entities/
    ruby_golem.json
  spawn_rules/
    ruby_golem.json

L'apparence de la créature est définie dans un second fichier, dans le pack de ressources. Voir Le fichier d'entité client.

Les quatre parties

Dans minecraft:entity, il y a jusqu'à quatre blocs. Seul description est obligatoire, mais presque toutes les créatures utilisent les quatre.

PartieCe qu'elle contient
descriptionL'identifiant de la créature et quelques interrupteurs : peut-elle avoir un œuf d'apparition, /summon peut-il la créer, quelles propriétés elle stocke
componentsCe que la créature a toujours : santé, déplacement, boîte de collision, comportements de base
component_groupsDes lots de composants nommés que tu actives et désactives plus tard, comme "bébé" ou "en colère"
eventsDes actions nommées qui activent et désactivent ces lots

Voici le squelette vide :

BP/entities/ruby_golem.json
{
  "format_version": "1.26.50",
  "minecraft:entity": {
    "description": {},
    "components": {},
    "component_groups": {},
    "events": {}
  }
}

format_version indique au jeu quelle version des règles suit ton fichier. Utilise une version récente, comme celle des entités vanilla.

Partie 1 : description

BP/entities/ruby_golem.json (description)
"description": {
  "identifier": "wiki:ruby_golem",
  "is_spawnable": true,
  "is_summonable": true
}
ChampCe qu'il fait
identifierL'identifiant de la créature, sous la forme namespace:name. Il doit correspondre exactement à celui du fichier du pack de ressources. N'utilise jamais l'espace de noms minecraft pour tes propres créatures.
is_spawnabletrue donne un œuf d'apparition à la créature et permet aux règles d'apparition de la placer dans le monde.
is_summonabletrue permet à la commande /summon de la créer.
runtime_identifierFacultatif. Emprunte un comportement caché, codé en dur, à une créature vanilla, par exemple minecraft:snowball. La plupart des créatures n'en ont pas besoin.
propertiesFacultatif. Des valeurs que la créature retient, expliquées plus bas.

Beaucoup de créatures vanilla ont aussi une ligne spawn_category, comme "creature" ou "monster". Ta créature fonctionne sans.

Les propriétés : des valeurs que la créature retient

Les propriétés sont de petites données stockées sur chaque créature. Tu peux les modifier depuis des événements, les tester avec des filtres, et les lire en Molang avec q.property('wiki:mood').

BP/entities/ruby_golem.json (description)
"properties": {
  "wiki:mood": {
    "type": "enum",
    "values": ["calm", "angry"],
    "default": "calm",
    "client_sync": true
  },
  "wiki:rubies_eaten": {
    "type": "int",
    "range": [0, 5],
    "default": 0
  }
}
TypeContientChamp supplémentaire
booltrue ou falseaucun
intUn nombre entierrange : la valeur autorisée la plus basse et la plus haute
floatUn nombre décimalrange : la valeur autorisée la plus basse et la plus haute
enumUn mot choisi dans une listevalues : la liste des mots autorisés
  • default est la valeur de départ. Ça peut aussi être une expression Molang, ce que les abeilles vanilla utilisent pour calculer leur état de départ.
  • client_sync envoie la valeur au pack de ressources, pour que les animations et les contrôleurs de rendu puissent l'utiliser. Active-le seulement quand l'apparence en dépend.

Propriétés ou groupes de composants ?

Utilise un groupe de composants quand la créature doit agir différemment. Utilise une propriété quand tu as juste besoin de retenir quelque chose, ou quand le modèle ou la texture doit changer en fonction.

Partie 2 : components

Les components sont toujours actifs, dès l'apparition de la créature. Mets-y ce qui ne change jamais : sa famille, sa boîte de collision, sa physique et sa façon de marcher.

BP/entities/ruby_golem.json (components)
"components": {
  "minecraft:type_family": { "family": ["ruby_golem", "golem", "mob"] },
  "minecraft:health": { "value": 40, "max": 40 },
  "minecraft:collision_box": { "width": 1.2, "height": 2.4 },
  "minecraft:physics": {},
  "minecraft:movement": { "value": 0.25 },
  "minecraft:movement.basic": {},
  "minecraft:navigation.walk": { "avoid_water": true },
  "minecraft:jump.static": {},
  "minecraft:behavior.random_stroll": { "priority": 6, "speed_multiplier": 0.8 },
  "minecraft:behavior.look_at_player": { "priority": 7, "look_distance": 8 }
}

Chaque clé est un composant, et son objet contient les réglages de ce composant. Un objet vide {} veut dire "utilise les valeurs par défaut". Il y a des centaines de composants au choix : parcours-les tous dans Composants d'entité.

Partie 3 : component groups

Un groupe de composants est un lot de composants nommé qui reste désactivé jusqu'à ce qu'un événement l'ajoute. C'est comme ça qu'une même créature peut être un bébé puis un adulte, ou calme puis en colère.

BP/entities/ruby_golem.json (component_groups)
"component_groups": {
  "wiki:baby": {
    "minecraft:is_baby": {},
    "minecraft:scale": { "value": 0.5 },
    "minecraft:ageable": {
      "duration": 1200,
      "grow_up": { "event": "wiki:grow_up", "target": "self" }
    }
  },
  "wiki:angry": {
    "minecraft:attack": { "damage": 6 },
    "minecraft:behavior.melee_attack": { "priority": 3 },
    "minecraft:movement": { "value": 0.32 }
  }
}

Quelques règles bonnes à savoir :

  1. Tu choisis les noms des groupes. Ajouter ton espace de noms (wiki:angry) évite les conflits et les rend faciles à repérer.
  2. Une créature ne peut avoir qu'un seul exemplaire de chaque composant. Quand un groupe contenant minecraft:movement est ajouté, sa vitesse remplace celle que la créature avait avant.
  3. Ajouter un groupe déjà actif redémarre ses composants. Un minecraft:timer, par exemple, recommence à compter à partir de zéro.

Partie 4 : events

Les événements sont les interrupteurs. Chaque événement a un nom et une liste d'actions, le plus souvent add et remove pour les groupes de composants.

BP/entities/ruby_golem.json (events)
"events": {
  "wiki:grow_up": {
    "remove": { "component_groups": ["wiki:baby"] }
  },
  "wiki:become_angry": {
    "add": { "component_groups": ["wiki:angry"] },
    "set_property": { "wiki:mood": "angry" }
  }
}

Quelque chose doit déclencher un événement. Dans le groupe bébé ci-dessus, minecraft:ageable déclenche wiki:grow_up quand le temps est écoulé. D'autres composants, comme minecraft:damage_sensor, minecraft:timer et minecraft:environment_sensor, déclenchent aussi des événements. Les commandes aussi : /event entity @e[type=wiki:ruby_golem] wiki:become_angry.

Les événements peuvent faire bien plus : choisir au hasard, exécuter des étapes dans l'ordre et vérifier des conditions. Tout ça se trouve sur la page suivante, Événements d'entité.

Le golem de rubis complet

Voici tout assemblé. La plupart du temps, le golem apparaît adulte, parfois bébé. Il se met en colère quand un joueur le frappe, et se calme au bout de 20 secondes.

BP/entities/ruby_golem.json
{
  "format_version": "1.26.50",
  "minecraft:entity": {
    "description": {
      "identifier": "wiki:ruby_golem",
      "is_spawnable": true,
      "is_summonable": true,
      "properties": {
        "wiki:mood": {
          "type": "enum",
          "values": ["calm", "angry"],
          "default": "calm",
          "client_sync": true
        }
      }
    },
    "components": {
      "minecraft:type_family": { "family": ["ruby_golem", "golem", "mob"] },
      "minecraft:health": { "value": 40, "max": 40 },
      "minecraft:collision_box": { "width": 1.2, "height": 2.4 },
      "minecraft:physics": {},
      "minecraft:movement": { "value": 0.25 },
      "minecraft:movement.basic": {},
      "minecraft:navigation.walk": { "avoid_water": true },
      "minecraft:jump.static": {},
      "minecraft:behavior.hurt_by_target": { "priority": 2 },
      "minecraft:behavior.random_stroll": { "priority": 6, "speed_multiplier": 0.8 },
      "minecraft:behavior.look_at_player": { "priority": 7, "look_distance": 8 },
      "minecraft:damage_sensor": {
        "triggers": [
          {
            "on_damage": {
              "filters": { "test": "is_family", "subject": "other", "value": "player" },
              "event": "wiki:become_angry"
            }
          }
        ]
      }
    },
    "component_groups": {
      "wiki:baby": {
        "minecraft:is_baby": {},
        "minecraft:scale": { "value": 0.5 },
        "minecraft:ageable": {
          "duration": 1200,
          "grow_up": { "event": "wiki:grow_up", "target": "self" }
        }
      },
      "wiki:angry": {
        "minecraft:attack": { "damage": 6 },
        "minecraft:behavior.melee_attack": { "priority": 3 },
        "minecraft:movement": { "value": 0.32 },
        "minecraft:timer": {
          "time": 20,
          "looping": false,
          "time_down_event": { "event": "wiki:calm_down" }
        }
      }
    },
    "events": {
      "minecraft:entity_spawned": {
        "randomize": [
          { "weight": 80 },
          { "weight": 20, "add": { "component_groups": ["wiki:baby"] } }
        ]
      },
      "wiki:grow_up": {
        "remove": { "component_groups": ["wiki:baby"] }
      },
      "wiki:become_angry": {
        "add": { "component_groups": ["wiki:angry"] },
        "set_property": { "wiki:mood": "angry" }
      },
      "wiki:calm_down": {
        "remove": { "component_groups": ["wiki:angry"] },
        "set_property": { "wiki:mood": "calm" }
      }
    }
  }
}

Comment ça se déroule :

  1. Le golem apparaît. Le jeu déclenche tout seul minecraft:entity_spawned, et le randomize donne 1 chance sur 5 d'ajouter wiki:baby.
  2. Un joueur le frappe. Le capteur de dégâts vérifie le filtre (l'attaquant est-il un joueur ?) et déclenche wiki:become_angry.
  3. Cet événement ajoute le groupe en colère : le golem a maintenant une attaque, un comportement de corps à corps et une vitesse plus élevée. hurt_by_target a déjà fait du joueur sa cible.
  4. Le minuteur du groupe en colère compte 20 secondes, puis déclenche wiki:calm_down, qui retire à nouveau le groupe.

Conseils

  • Garde components pour ce qui ne change jamais. Si un composant est à la fois dans components et dans un groupe, il devient difficile de savoir lequel est actif. Mets ce qui change uniquement dans des groupes.
  • Un rôle par groupe. De petits groupes comme wiki:angry et wiki:baby se combinent plus facilement qu'un énorme groupe par état.
  • Inspire-toi du vanilla. Les fichiers de la vache, du loup et de l'abeille dans Entités vanilla montrent plein d'exemples concrets.

Quand quelque chose ne va pas

Ce que tu voisCause la plus probable
La créature n'existe pas (/summon échoue)Une erreur JSON, ou une faute de frappe dans l'identifiant. Vérifie le Content Log.
Pas d'œuf d'apparitionis_spawnable vaut false, ou le pack de ressources n'a pas de spawn_egg
Un événement ne fait rienLe nom du groupe dans add ne correspond à aucun nom de component_groups
Une erreur de propriété dans le journalLa propriété n'est pas déclarée dans description.properties, ou la valeur sort de range ou de values
La créature ne revient jamais à son état normalRien ne déclenche l'événement qui retire le groupe

Tu trouveras plus d'aide dans Dépannage. Ensuite : Événements d'entité.

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