Icterine
icterine · 4110762 загрузок · GPL-3.0-or-later
клиент: unsupported · сервер: required (заявлено автором мода)
Оптимизация улучшений (в частности, InventoryChangeTrigger)
Описание
Резюме
- Оптимизирован запуск достижений для получения предметов;
- Может нарушить паритет с ванильной версией, но не влияет на достижения ванильной версии и не должен влиять на подавляющее большинство модов/пакетов данных;
- Даже если это на что-то влияет, продвижение все равно можно получить, просто бросив и подняв один из необходимых предметов;
- На данный момент не известно о каких-либо несовместимостях или проблемах;
- Любое внедрение в ванильный код можно отключить в файле конфигурации.
- Все изменения происходят на стороне сервера.
Результаты
Живое тестирование проводилось на выделенном сервере с тремя активными игроками онлайн, с использованием специального пакета модов Forge с более чем 200 модами и BlazeandCave's Advancements Pack, который добавляет более 950 улучшений. Статистика собрана с помощью Spark за один час.
При использовании Icterine InventoryChangeTrigger выполняется почти в 2,5 раза быстрее (начиная с версии 1.1.0), затрачивая около 7,5 % времени тика вместо 20 %.
Сравнение статистики для Icterine 1.0.0 (быстрее примерно в 2 раза):

Как работает ванильный InventoryChangeTrigger
Когда игра обнаруживает, что стек в инвентаре игрока изменился, она вызывает для этого InventoryChangeTrigger. Это включает в себя сбор предметов, сброс предметов, сброс целых стопок, перемещение предметов в вашем инвентаре.
- Также, когда вы открываете контейнер (сундук, печь и т.п.), игра думает, что все слоты в вашем инвентаре изменились, и вызывает триггер для всех них, включая пустые слоты.
InventoryChangeTrigger считает пустые, непустые и полностью заполненные слоты в вашем инвентаре. Эта информация может использоваться в триггерах продвижения , но не используется в ванили.
InventoryChangeTrigger превышает зарегистрированные критерии продвижения.
Если критерий имеет требования к количеству слотов и они не соответствуют значениям из шага 2, или если критерий не содержит требований к элементам, критерий пропускается.
Если критерий имеет только одно требование к элементу, измененный стек проверяется на соответствие этому требованию.
Если критерий требует несколько предметов (например, «Накрой меня обломками» требует наличия полного комплекта незеритовой брони), каждая стопка предметов в инвентаре проверяется на соответствие каждому требованию (но выполненные требования удаляются и больше не проверяются).
Сопоставление предметов, особенно по тегам, очень сложное. Но игра сначала проверяет, соответствует ли тип предмета игрока указанному в требованию, и только затем проверяет другие параметры, такие как количество, зачарования и другие данные NBT.
Как работает оптимизация Icterine
- На шаге 1 не вызывайте InventoryChangeTrigger, когда вы сбрасываете стопки или перемещаете их из инвентаря (например, в сундук). Это контролируется параметром
ignore_triggers_for_emptied_stacksв файле конфигурации. - Аналогично, не вызывайте InventoryChangeTrigger, если изменение стека было вызвано уменьшением стека, но не его опустошением (например, игрок уронил один предмет из полного стека). Управляется
ignore_triggers_for_decreased_stacks. - А также не вызывать InventoryChangeTrigger, если размер стека увеличился, но не превысил порогового значения для какого-либо продвижения. Например, размер стека грязи увеличился с 52 до 53, но нет возможности получить 53 грязи в вашем модпаке. Управляется
optimize_triggers_for_increased_stacks. - Измените способ проверки игры на наличие измененных элементов, когда игрок открывает экран контейнера, чтобы она не считала весь стек измененным в ту секунду, когда вы что-либо открываете. Управляется
initialize_inventory_last_slots. - На шаге 6 сначала проверьте, соответствует ли измененный слот каким-либо требованиям, и только потом проверяйте другую стопку в инвентаре. Управляется
optimize_multiple_predicate_trigger. - На шаге 7 сначала сравните количество стеков, чтобы избежать ненужного совпадения тегов. Также используйте предыдущий счетчик стека, чтобы избежать еще большего ненужного сопоставления. Управляется
check_count_before_item_predicate_match.
Планируются дальнейшие оптимизации.
Поддерживаемые версии
Icterine v1.2.0 работает с Minecraft Fabric/Quilt с 1.18.2 по 1.19.4 и Forge с 1.18.2 по 1.19.2 (forge moment).
Icterine v1.3.0 имеет те же функции, что и v1.2.0, и работает с Fabric/Quilt 1.20–1.20.4, Forge 1.19.3–1.20.4 и NeoForge 1.20.1–1.20.4.
Используйте фильтр на странице версии, чтобы выбрать правильный файл.
Если вам нужен порт на любую другую версию, откройте проблему или спросите на сервере Discord.
Версии (15)
| Версия | Minecraft | Загрузчики | Файл |
|---|---|---|---|
1.3.0 |
1.20.3, 1.20.4 | neoforge | скачать |
1.3.0 |
1.20.2 | neoforge | скачать |
1.3.0 |
1.20.3, 1.20.4 | fabric, quilt | скачать |
1.3.0 |
1.20.2 | fabric, quilt | скачать |
1.3.0 |
1.20, 1.20.1 | fabric, quilt | скачать |
1.3.0 |
1.20.3, 1.20.4 | forge | скачать |
1.3.0 |
1.20.2 | forge | скачать |
1.3.0 |
1.20, 1.20.1 | forge, neoforge | скачать |
1.3.0 |
1.19.3, 1.19.4 | forge | скачать |
1.2.0 |
1.18.2, 1.19, 1.19.1, 1.19.2 | forge | скачать |
1.2.0 |
1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4 | fabric, quilt | скачать |
1.1.0 |
1.19.2 | forge | скачать |
1.1.0 |
1.19.2 | fabric, quilt | скачать |
1.0.0 |
1.19.2 | forge | скачать |
1.0.0 |
1.19.2 | fabric, quilt | скачать |