← Tous les articles

select, range_dispatch ou condition ?

Dans les nouvelles item definitions, le plus difficile n'est souvent pas le JSON. Le vrai choix, c'est la branche qui correspond honnêtement à la façon dont l'objet change. Une fois cette décision prise, le fichier devient beaucoup plus lisible.

Pensez d'abord au signal

Avant de choisir une branche, demandez-vous si l'objet garde toujours le même rendu, s'il passe entre des états nommés, s'il franchit des seuils numériques, ou s'il réagit à une condition vrai/faux. Cette réponse doit guider la structure.
Beaucoup de fichiers deviennent trop lourds parce que leur auteur choisit la branche la plus flexible avant de choisir la branche la plus juste. Cette flexibilité semble rassurante, mais elle crée souvent un arbre inutilement grand.

Tableau de décision rapide

BrancheQuand l'utiliserExemple typique
minecraft:modelL'objet a une seule identité visuelle.Un laissez-passer, un prop, un livre unique.
minecraft:selectL'objet passe entre des états nommés.sealed, awakened, broken, cursed.
minecraft:range_dispatchLe changement suit des seuils numériques.Charge, progression, paliers d'usure.
minecraft:conditionLe résultat dépend d'un vrai/faux.Objet sélectionné, utilisé, endommagé ou non.

Trois tests très simples

  • Si vous décrivez le changement avec des mots comme rituel, cassé ou actif, vous êtes probablement dans select.
  • Si vous pensez en seuils 0-25-50-75, vous êtes probablement dans range_dispatch.
  • Si l'objet fait quelque chose ou ne le fait pas, condition suffit souvent.

Trois exemples qui clarifient tout

1. Une relique avec des états narratifs

Si la relique peut être sealed, glowing ou cracked, ce sont des états nommés. C'est donc un cas propre pour select.

2. Un bâton qui se charge

Si le rendu change par paliers de charge, il faut une logique numérique, donc range_dispatch.

3. Une carte qui ne change qu'en main

Si l'apparence alternative existe seulement lorsque l'objet est sélectionné ou utilisé, un simple condition suffit souvent.

Erreurs fréquentes

  • Utiliser select pour un simple prop qui n'a besoin que d'un model.
  • Choisir range_dispatch alors que le changement réel est nommé, pas numérique.
  • Transformer un état binaire en arbre trop grand pour rien.
  • Oublier que le fallback n'est pas seulement une sécurité, mais aussi un point d'ancrage pour la lecture.

Où le builder aide vraiment

Le builder est surtout utile quand la logique est presque claire, mais que vous ne voulez plus reconstruire l'enveloppe JSON à la main. Il vous laisse choisir la branche, garder le fallback visible, ajouter les cas dans le bon ordre, puis copier un fichier propre dans le pack.
C'est particulièrement fort pendant une migration: vous construisez une seule definition, vous vérifiez que la bonne branche a été choisie, puis vous réutilisez le motif sur le reste des objets.

FAQ

Ai-je toujours besoin de branches en 1.21.4+ ?

Non. Beaucoup d'objets restent de simples fichiers model.

Puis-je mélanger états nommés et seuils numériques ?

Oui, mais c'est justement le moment où il faut choisir le niveau externe le plus simple avant d'empiler la logique.

Faut-il décider la branche avant la texture ?

Souvent oui. Le visuel peut venir après, mais la façon dont l'objet change mérite une réponse tôt.