Un predicado con una sola condición no tiene envoltura, y eso es un cambio de forma real
Una condición es el objeto en sí. Dos o más se envuelven en all_of o any_of. Además de los ocho tipos de condición, y por qué la inversión es una envoltura en lugar de una bandera.
Un predicado de paquete de datos (datapack predicate) es un archivo JSON que describe una condición, y su estructura cambia dependiendo de cuántas condiciones tengas. Esa es la parte que confunde a las personas que copian un ejemplo y lo extienden.
Uno no es una lista de uno
| condiciones | forma de salida |
|---|---|
| 0 | {} |
| 1 | el objeto de la condición en sí |
| 2+ | { "condition": "minecraft:all_of", "terms": [ … ] } |
No hay envoltura alrededor de una sola condición. Si añades una segunda, todo el archivo cambia de forma: la condición original se convierte en el primer elemento de un array terms bajo una nueva raíz. Cualquier cosa que lea o genere estos tiene que manejar ambas formas, y un ejemplo construido a partir de una condición no muestra la forma que necesitarás en el momento en que añadas otra.
any_of es el combinador alternativo: todos los términos deben pasar, o cualquiera de ellos.
La inversión también es una envoltura, no una bandera
No hay campo "invert": true. Una condición negada se envuelve:
{ "condition": "minecraft:inverted", "term": { …the original condition… } }
Observa term, en singular — inverted toma exactamente uno, mientras que all_of y any_of toman un array terms. Dos claves de aspecto similar con formas diferentes, y la inversión se aplica por condición, por lo que un predicado puede mezclar términos invertidos y simples libremente dentro de un all_of.
Los ocho tipos de condición
entity_properties random_chance
value_check random_chance_with_looting
weather_check time_check
location_check match_tool
random_chance_with_looting es el que merece una pausa: toma una probabilidad base y un looting_multiplier, por lo que la probabilidad escala con el nivel de Botín (Looting) del asesino. Eso lo hace significativo solo donde existe un asesino en contexto; es una condición de tasa de caída, no una puerta aleatoria de propósito general. El random_chance simple es el que se debe usar en cualquier otro lugar.
value_check compara un número con una de tres fuentes: nivel de encantamiento, suerte (luck), o una expresión personalizada que editas manualmente en el JSON después de copiar.
Los selectores son exactamente los conjuntos de vainilla
Vale la pena saberlo cuando compruebas si un ID de bioma o estructura es real: los desplegables del constructor no son una muestra seleccionada.
- 66 biomas — cada bioma del juego, sin que falte nada y sin nada inventado
- 34 estructuras — de igual manera
- 18 etiquetas de bloque y 15 objetos, que sí son un subconjunto funcional
Esto se verificó con los propios datos de registro del juego en lugar de asumirse, por lo que si un ID está ausente de la lista de biomas o estructuras, el ID no existe. Para las etiquetas de bloque y los objetos es lo contrario: la ausencia solo significa que el selector no lo lista, y escribir el ID tú mismo está bien.