Dropt — это мод для замены выпадения блоков, позволяющий задавать сложные условия выпадения и правила замены.
Правила Dropt можно задавать с использованием ZenScript, JSON или DroptAPI.
* * * * *
Особенности
Производительность:
- использует кэширование правил для каждого состояния блока для значительного повышения производительности
Сопоставление на основе:
- блока (метаданные, мета-шаблон, несколько значений метаданных) (белый/черный список)
- выпадающих предметов (метаданные, мета-шаблон, несколько значений метаданных, oredict) (белый/черный список)
- типа добывающего объекта (игрок, не игрок, любой)
- предмета в руке у добывающего объекта (метаданные, мета-шаблон) (белый/черный список)
- игровых стадий добывающего объекта (требуется мод gamestages)
- имени игрока-добывающего объекта
- биома (белый/черный список)
- измерения (белый/черный список)
- вертикального диапазона
Стратегии замены:
- добавить к существующему дропу
- заменить весь дроп
- заменить весь дроп, если выбранный предмет выпал
- заменить все сопоставленные выпавшие предметы (заменить предметы, заданные в условии)
- заменить все сопоставленные выпавшие предметы, если выбранный предмет выпал (заменить предметы, заданные в условии)
Стратегии выпадения:
- повтор (один и тот же дроп может быть выбран более одного раза)
- уникальный (дроп может быть выбран только один раз)
Количество выбираемых дропов на основе:
- фиксированного значения
- случайного значения в заданном диапазоне
- модификатора удачи (fortune)
Выбор дропа на основе:
- весового значения, модифицированного удачей (fortune)
- минимального уровня удачи (fortune)
- требования к шелковому касанию (требуется, исключено, любое)
Количество дропа на основе:
- фиксированного значения
- случайного значения в заданном диапазоне
- модификатора удачи (fortune)
Дроп:
- можно задать список дропа для каждого выпадения
- можно задавать дроп с мета-шаблоном
- можно задавать дроп как запись oredict
- можно задавать выпадение опыта (диапазон, модифицированный удачей)
- можно задавать дроп с данными NBT
Производительность
Dropt анализирует все строки при загрузке правил, чтобы сократить ненужный разбор и конкатенацию строк во время сопоставления. Во время сопоставления используется простое сравнение строк на эквивалентность. Для кэширования правил в списках используется простой линейный поиск, а приведенный ниже результат профилирования представляет собой наихудший сценарий, когда правило для сопоставления находится в конце списка из 100k+ правил.
- [INFO] Внедрено 103573 правил за 118 мс
- [INFO] Разобрано 103575 правил за 532 мс
- [INFO] Закешировано 1 правило из 103575 правил за 56 мс, blockState: minecraft:stone[variant=stone]
- [INFO] Поиск по 1 правилу выполнен за 1 мс
- [INFO] Модифицирован дроп за 0 мс
- [INFO] Поиск по 1 правилу выполнен за 1 мс
- [INFO] Модифицирован дроп за 0 мс
Чтобы воспроизвести профилирование на вашем компьютере, см. параметры конфигурации.
Команды
/dropt reload — перезагрузить конфигурацию во время выполнения
/dropt hand — скопировать строку предмета в руке для быстрой вставки в файл .json; также помогает с длинными тегами NBT
/dropt verbose — выводить в консоль местоположение ресурса и значение метаданных для всех сломанных блоков
Конфигурация
Dropt использует файлы конфигурации .json, размещенные в папке [instance]/config/dropt. Имена файлов не важны, если они имеют расширение .json, и вы можете иметь столько файлов, сколько хотите.
Логирование
Любые ошибки в синтаксисе .json сообщаются через лог Forge. При перезагрузке в игре ошибки будут отображаться в консоли чата.
Все ошибки также записываются в файл лога: [instance]/dropt.log.
Дополнительный отладочный вывод может быть включен для каждого правила и будет выгружен в файл лога. Более подробную информацию см. в документации.

