Руководства / Команды и данные
Предикат с одним условием не имеет обёртки, и это реальное изменение формы
Одно условие — это сам объект. Два и более — оборачиваются в 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
int_value_check random_chance_with_enchanted_bonus
weather_check time_check
location_check match_tool
В игре двадцать типов условий; это восемь, которые охватывает выбор в конструкторе. Два из них сменили название, но конструктор по-прежнему записывает старые id — random_chance_with_looting и value_check — которые текущие версии отклоняют, так что переименуйте эти два в выводе.
random_chance_with_enchanted_bonus — тот, на котором стоит задержаться: он принимает шанс без зачарования и enchanted_chance, масштабируемый по уровню зачарования (Добыча, в собственных таблицах ваниллы), поэтому вероятность зависит от того, что держит убийца. Это делает его осмысленным только там, где в контексте есть убийца — это условие скорости выпадения, а не универсальный случайный шлюз. Обычный random_chance — то, к чему стоит обращаться во всех остальных случаях.
int_value_check (и float_value_check) проверяют, попадает ли число в диапазон. Проверка значения в конструкторе предлагает источник в виде уровня зачарования или пользовательское выражение, которое вы вручную вписываете в JSON после копирования.
Выпадающие списки — это ровно ванильные наборы
Стоит знать, когда проверяете, реален ли id биома или структуры: выпадающие списки конструктора — не отобранная вручную выборка.
- 66 биомов — все биомы вплоть до 26.2;
dappled_forestиз 26.3 отсутствует, так что вписывайте его вручную - 34 структуры — аналогично, вплоть до 26.2; 18 структур
abandoned_camp_*, добавленных в 26.3, в списке нет - 18 тегов блоков и 15 предметов, которые являются рабочим подмножеством
Это было проверено по собственным данным реестра игры, а не предположено, так что если id отсутствует в списке биомов или структур и не является одним из добавлений 26.3, значит, этого id не существует. С тегами блоков и предметами всё наоборот: отсутствие означает лишь то, что выбор в конструкторе его не перечисляет, и вписать id самостоятельно — нормально.