Tabelas de loot: pools, rolls e a diferença entre entradas e funções
Uma tabela de loot que não dropa nada geralmente tem os pesos ou as condições na camada errada. Veja o que cada nível de aninhamento controla e quais funções vale a pena conhecer.
O JSON de uma tabela de loot tem quatro níveis de profundidade e cada nível significa uma coisa diferente. Quase todo caso de "minha tabela não dropa nada" é uma condição presa a um nível de distância de onde deveria estar.
Os quatro níveis
table
└── pools[] how many independent draws
└── entries[] what can come out of this draw
└── functions[] modify the item that came out
rollsem um pool define quantas vezes aquele pool é sorteado. Um pool comrolls: 3sorteia três vezes a partir da mesma lista de entradas.weightem uma entrada é relativo dentro do seu pool. Os pesos não precisam somar nada; uma entrada com peso 10 contra outra com peso 90 aparece uma vez a cada dez.conditionsexistem em todos os níveis e significam coisas diferentes. Em um pool, elas controlam todo o sorteio. Em uma entrada, controlam aquela opção específica. Em uma função, controlam apenas a modificação.
Garantir um drop exige um pool próprio
Pesos não conseguem garantir nada, porque um pool escolhe exatamente uma entrada por sorteio. Uma tabela que precisa sempre dropar um mapa mais loot aleatório precisa de dois pools:
"pools": [
{ "rolls": 1, "entries": [ { "type": "minecraft:item", "name": "minecraft:filled_map" } ] },
{ "rolls": { "min": 2, "max": 4 }, "entries": [ … weighted list … ] }
]
O pool um tem uma única entrada, então sempre a produz. O pool dois sorteia de 2 a 4 vezes a partir da lista ponderada.
As funções que vale a pena conhecer
| Função | O que faz |
|---|---|
set_count | um número fixo ou um intervalo uniform |
enchant_randomly | encantamentos aleatórios, opcionalmente de uma lista |
enchant_with_levels | como uma Mesa de Encantamentos em N níveis — qualquer encantamento, a menos que options restrinja |
set_components | nome personalizado, lore, qualquer componente de dados |
enchanted_count_increase | bônus por nível de um encantamento (Saque); apenas em tabelas de entidades |
set_damage | durabilidade como fração, então 0.5 é metade gasta |
furnace_smelt | a forma fundida quando a criatura morre em Fogo |
enchant_with_levels e enchant_randomly não são intercambiáveis. A primeira imita uma Mesa de Encantamentos e respeita os custos de nível; a segunda escolhe de forma arbitrária e pode produzir combinações que o jogo nunca geraria.
Condições que as pessoas costumam usar
random_chance— uma probabilidade fixarandom_chance_with_enchanted_bonus— a chance moderna que leva Saque em contakilled_by_player— o motivo pelo qual seu drop raro nunca aparece quando a morte é por quedaentity_properties— verifica o tipo, o estado ou o equipamento da vítimamatch_tool— verifica a ferramenta usada, para tabelas de blocos
Testar sem reconstruir o mundo
/loot give @s loot my_pack:chests/treasure
joga a tabela direto no seu inventário. /loot spawn, /loot insert <pos> e /loot replace cobrem os outros posicionamentos. Isso é bem mais rápido do que colocar baús e recarregar, e é a única forma sensata de conferir distribuições de peso.
Monte tabelas com múltiplos pools, com as funções e condições presas no nível certo, no Construtor Avançado de Tabelas de Loot.