Een predicate met één conditie heeft geen wrapper, en dat is een echte structuurwijziging
Eén conditie is het object zelf. Twee of meer worden gewikkeld in all_of of any_of. Plus de acht conditietypen, en waarom inverteren een wrapper is in plaats van een vlag.
Een datapack-predicate is een JSON-bestand dat een conditie beschrijft, en de structuur ervan verandert afhankelijk van hoeveel condities je hebt. Dat is het punt waar mensen over struikelen bij het kopiëren en uitbreiden van een voorbeeld.
Eén is geen lijst van één
| condities | uitvoervorm |
|---|---|
| 0 | {} |
| 1 | het conditieobject zelf |
| 2+ | { "condition": "minecraft:all_of", "terms": [ … ] } |
Er zit geen wrapper om een enkele conditie. Voeg een tweede toe en het hele bestand verandert van vorm — de oorspronkelijke conditie wordt het eerste element van een terms array under a new root. Anything that reads or generates these has to handle both forms, and an example built from one condition does not show you the shape you will need the moment you add another.
any_of is the alternative combinator: alle voorwaarden moeten slagen, of een daarvan.
Inverteren is ook een wrapper, geen vlag
Er is geen "invert": true field. A negated condition is wrapped:
{ "condition": "minecraft:inverted", "term": { …the original condition… } }
Opmerking term, singular — inverted takes exactly one, where all_of and any_of take a terms array. Two similar-looking keys with different shapes, and inversion applies per condition, so a predicate can mix inverted and plain terms freely inside one all_of.
De acht conditietypen
entity_properties random_chance
value_check random_chance_with_looting
weather_check time_check
location_check match_tool
random_chance_with_looting is the one worth pausing on: it takes a base chance en a looting_multiplier, so the probability scales with the killer's Looting level. That makes it meaningful only where a killer exists in context — it is a drop-rate condition, not a general-purpose random gate. Plain random_chance is the one to reach for everywhere else.
value_check compares a number against one of three sources: betoveringsniveau, geluk, of een aangepaste expressie die je na het kopiëren handmatig in de JSON bewerkt.
De kiezers zijn exact de vanilla-sets
Handig om te weten wanneer je controleert of een bioom- of structuur-id echt bestaat: de dropdowns van de maker zijn geen gecureerde selectie.
- 66 biomen — elk bioom in het spel, zonder ontbrekende of verzonnen elementen
- 34 structuren — evenzo
- 18 blok-tags en 15 voorwerpen, die zijn een werkende subset
Dat is gecontroleerd aan de hand van de eigen registergegevens van het spel en niet aangenomen, dus als een id ontbreekt in de bioom- of structurenlijst, bestaat de id niet. Voor de blok-tags en voorwerpen is het omgekeerd: afwezigheid betekent alleen dat de kiezer deze niet vermeldt, en zelf de id typen is prima.