MC Toolkit

Руководства / Команды и данные

Предикат с одним условием не имеет обёртки, и это реальное изменение формы

Одно условие — это сам объект. Два и более — оборачиваются в 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 самостоятельно — нормально.

Конструктор предикатов и условий →

Другие руководства

Смотреть все →