Un prédicat à une condition n'a pas d'enveloppe, et c'est un vrai changement de forme
Une condition est l'objet lui-même. Deux ou plus sont enveloppées dans all_of ou any_of. Plus les huit types de conditions, et pourquoi l'inversion est une enveloppe plutôt qu'un drapeau.
Un prédicat de datapack est un fichier JSON décrivant une condition, et sa structure change en fonction du nombre de conditions que vous avez. C'est la partie qui déroute les gens qui copient un exemple et l'étendent.
Un n'est pas une liste d'un
| conditions | forme de sortie |
|---|---|
| 0 | {} |
| 1 | l'objet condition lui-même |
| 2+ | { "condition": "minecraft:all_of", "terms": [ … ] } |
Il n'y a pas d'enveloppe autour d'une seule condition. Ajoutez-en une seconde et la forme du fichier entier change — la condition originale devient le premier élément d'un tableau terms sous une nouvelle racine. Tout ce qui lit ou génère ces éléments doit gérer les deux formes, et un exemple construit à partir d'une condition ne vous montre pas la forme dont vous aurez besoin au moment où vous en ajoutez une autre.
any_of est le combinateur alternatif : tous les termes doivent passer, ou n'importe lequel d'entre eux.
L'inversion est aussi une enveloppe, pas un drapeau
Il n'y a pas de champ "invert": true. Une condition niée est enveloppée :
{ "condition": "minecraft:inverted", "term": { …the original condition… } }
Notez term, singulier — inverted prend exactement un, tandis que all_of et any_of prennent un tableau terms. Deux clés d'apparence similaire avec des formes différentes, et l'inversion s'applique par condition, donc un prédicat peut mélanger librement des termes inversés et simples à l'intérieur d'un all_of.
Les huit types de conditions
entity_properties random_chance
value_check random_chance_with_looting
weather_check time_check
location_check match_tool
random_chance_with_looting est celui sur lequel il faut s'attarder : il prend une chance de base et une looting_multiplier, de sorte que la probabilité s'adapte au niveau de Butin du tueur. Cela ne le rend significatif que là où un tueur existe dans le contexte — c'est une condition de taux de chute, pas une porte aléatoire à usage général. Le simple random_chance est celui à utiliser partout ailleurs.
value_check compare un nombre à l'une des trois sources : niveau d'enchantement, Chance, ou une expression personnalisée que vous modifiez manuellement dans le JSON après l'avoir copié.
Les sélecteurs sont exactement les ensembles vanilla
Il est utile de savoir, lorsque vous vérifiez si un identifiant de biome ou de structure est réel : les listes déroulantes du constructeur ne sont pas un échantillon sélectionné.
- 66 biomes — chaque biome du jeu, sans rien manquer et sans rien inventer
- 34 structures — de même
- 18 tags de blocs et 15 objets, qui sont un sous-ensemble fonctionnel
Cela a été vérifié par rapport aux données de registre du jeu plutôt que supposé, donc si un identifiant est absent de la liste des biomes ou des structures, l'identifiant n'existe pas. Pour les tags de blocs et les objets, c'est le contraire : l'absence signifie seulement que le sélecteur ne le liste pas, et taper l'identifiant vous-même est tout à fait acceptable.