Предикат с одним условием не имеет обёртки — это реальное изменение формы
Одно условие — это сам объект. Два и более условий оборачиваются в all_of или any_of. Плюс восемь типов условий и почему инвертирование — это обёртка, а не флаг.
Предикат датапака — это JSON-файл, описывающий условие, и его структура меняется в зависимости от количества условий. Это то, что сбивает с толку людей, которые копируют пример и расширяют его.
Одно — это не список из одного
| условия | форма вывода |
|---|---|
| 0 | {} |
| 1 | сам объект условия |
| 2+ | { "condition": "minecraft:all_of", "terms": [ … ] } |
Вокруг одного условия нет обёртки. Добавьте второе, и весь файл изменит форму — исходное условие станет первым элементом массива terms под новым корнем. Любой, кто читает или генерирует их, должен обрабатывать обе формы, и пример, построенный на одном условии, не покажет вам форму, которая понадобится, как только вы добавите другое.
any_of — это альтернативный комбинатор: все условия должны пройти, или любое из них.
Инвертирование — это тоже обёртка, а не флаг
Поля "invert": true нет. Отрицательное условие оборачивается:
{ "condition": "minecraft:inverted", "term": { …the original condition… } }
Обратите внимание на term, единственное число — inverted принимает ровно одно, тогда как all_of и any_of принимают массив terms. Два похожих ключа с разными формами, и инверсия применяется к каждому условию, поэтому предикат может свободно смешивать инвертированные и обычные условия внутри одного all_of.
Восемь типов условий
entity_properties random_chance
value_check random_chance_with_looting
weather_check time_check
location_check match_tool
random_chance_with_looting — это то, на чём стоит остановиться: он принимает базовый шанс и looting_multiplier, поэтому вероятность масштабируется с уровнем Добычи (Looting) убийцы. Это имеет смысл только там, где в контексте существует убийца — это условие для шанса выпадения, а не универсальный случайный шлюз. Обычный random_chance — это то, что нужно использовать везде в остальных случаях.
value_check сравнивает число с одним из трёх источников: уровнем зачарования, Везением (Luck) или пользовательским выражением, которое вы вручную редактируете в JSON после копирования.
Выборщики — это точно ванильные наборы
Стоит знать, когда вы проверяете, является ли ID биома или структуры реальным: выпадающие списки конструктора не являются тщательно отобранным образцом.
- 66 биомов — каждый биом в игре, ничего не пропущено и ничего не придумано
- 34 структуры — аналогично
- 18 тегов блоков и 15 предметов, которые являются рабочим подмножеством
Это было проверено по собственным данным реестра игры, а не предполагалось, поэтому, если ID отсутствует в списке биомов или структур, ID не существует. Для тегов блоков и предметов всё наоборот: отсутствие означает только то, что выборщик не перечисляет его, и ввод ID вручную вполне допустим.