Um predicate com uma condição não tem invólucro, e isso é uma mudança real de forma
Uma condição é o próprio objeto. Duas ou mais são envolvidas em all_of ou any_of. Além disso, os oito tipos de condição, e por que inverter é um invólucro em vez de uma flag.
Um predicate de datapack é um arquivo JSON que descreve uma condição, e sua estrutura muda dependendo de quantas condições você tem. É justamente aí que as pessoas tropeçam ao copiar um exemplo e estendê-lo.
Uma não é uma lista de uma
| condições | forma da saída |
|---|---|
| 0 | {} |
| 1 | o próprio objeto de condição |
| 2+ | { "condition": "minecraft:all_of", "terms": [ … ] } |
Não há invólucro em torno de uma única condição. Adicione uma segunda e o arquivo inteiro muda de forma — a condição original passa a ser o primeiro elemento de um array terms sob uma nova raiz. Qualquer coisa que leia ou gere esses arquivos precisa lidar com as duas formas, e um exemplo construído com uma condição não mostra a forma que você vai precisar no momento em que adicionar outra.
any_of é o combinador alternativo: todos os termos precisam passar, ou qualquer um deles.
Inverter também é um invólucro, não uma flag
Não existe campo "invert": true. Uma condição negada é envolvida:
{ "condition": "minecraft:inverted", "term": { …the original condition… } }
Repare em term, no singular — inverted aceita exatamente um, enquanto all_of e any_of aceitam um array terms. Duas chaves parecidas com formas diferentes, e a inversão se aplica por condição, então um predicate pode misturar termos invertidos e normais livremente dentro de um mesmo all_of.
Os oito tipos de condição que o construtor oferece
entity_properties random_chance
int_value_check random_chance_with_enchanted_bonus
weather_check time_check
location_check match_tool
O jogo tem vinte tipos de condição; estes são os oito que o seletor do construtor cobre. Dois deles mudaram de nome, e o construtor ainda grava os ids antigos — random_chance_with_looting e value_check — que as versões atuais recusam, então renomeie esses dois na saída.
random_chance_with_enchanted_bonus é o que merece uma pausa: ele usa uma chance sem o encantamento e um enchanted_chance que escala com o nível de um encantamento (Saque, nas próprias tabelas do vanilla), então a probabilidade depende do que o assassino está segurando. Isso o torna útil apenas onde existe um assassino no contexto — é uma condição de taxa de drop, não um portão aleatório de uso geral. O random_chance simples é o que você deve usar em todo o resto.
int_value_check (e float_value_check) testam se um número cai dentro de um intervalo. A verificação de valor do construtor oferece uma fonte de nível de encantamento ou uma expressão personalizada que você edita no JSON à mão depois de copiar.
Os seletores são exatamente os conjuntos do vanilla
Vale saber quando você está verificando se um id de bioma ou estrutura é real: os menus suspensos do construtor não são uma amostra curada.
- 66 biomas — todos os biomas até a 26.2; o
dappled_forestda 26.3 está faltando, então digite-o à mão - 34 estruturas — igualmente até a 26.2; as 18 estruturas
abandoned_camp_*que a 26.3 adicionou não estão listadas - 18 tags de bloco e 15 itens, que são um subconjunto funcional
Isso foi verificado com os próprios dados de registro do jogo, e não presumido, então se um id está ausente da lista de biomas ou estruturas e não é uma das adições da 26.3, o id não existe. Para as tags de bloco e os itens é o contrário: a ausência significa apenas que o seletor não o lista, e digitar o id você mesmo não tem problema.