Icterine avatar

Icterine [1.20.5] [1.19.4] [1.18.2]

Оптимизация InventoryChangeTrigger

Основные сведения

  • Оптимизирует активацию достижений при получении предметов;
  • Может нарушить полное соответствие с ванильной версией, но не затрагивает ванильные достижения и не должен влиять на подавляющее большинство модов/датапаков;
  • Даже в случае влияния, достижение останется доступным для получения путем сбрасывания и подбирания одного из требуемых предметов;
  • На данный момент неизвестны несовместимости или проблемы;
  • Каждая инъекция в ванильный код может быть отключена в файле конфигурации.
  • Все изменения реализованы на стороне сервера.

Результаты

Тестирование в реальных условиях на выделенном сервере с 3 активными игроками, использующем пользовательский сборку Forge с более чем 200 модами и BlazeandCave's Advancements Pack, добавляющим более 950 достижений. Данные собраны с помощью Spark в течение одного часа.

С Icterine, InventoryChangeTrigger выполняется почти в 2.5 раза быстрее (начиная с версии 1.1.0), затрачивая около 7.5% времени тика вместо 20%.

Принцип работы ванильного InventoryChangeTrigger

1. При обнаружении изменения стека в инвентаре игрока, вызывается InventoryChangeTrigger для этого стека. Это включает подбирание предметов, их сбрасывание, сбрасывание целых стеков, перемещение предметов в инвентаре.

  • При открытии контейнера (сундук, печь и т.д.), игра считает, что все слоты инвентаря изменились, и вызывает триггер для всех слотов, включая пустые.

2. InventoryChangeTrigger подсчитывает пустые, непустые и полностью заполненные слоты в инвентаре. Эта информация может использоваться в условиях достижений, но не используется в ванильной игре.

3. InventoryChangeTrigger перебирает зарегистрированные критерии достижений.

4. Если у критерия есть требования к количеству слотов, и они не совпадают со значениями из шага 2, или если у критерия нет требований к предметам, критерий пропускается.

5. Если критерий имеет только одно требование к предмету, измененный стек проверяется на соответствие этому требованию.

6. Если критерий имеет несколько требований к предметам (например, "Покрой меня обломками" требует полного комплекта незеритовой брони), каждый предмет в инвентаре проверяется на соответствие каждому требованию (но выполненным требованиям повторная проверка не проводится).

7. Сопоставление предметов, особенно по тегам, очень ресурсоемко. Однако игра сначала проверяет, совпадает ли тип предмета игрока с типом из требования, и только затем проверяет другие параметры: количество, зачарования и другие NBT-данные.

Принцип работы оптимизаций Icterine

1. На шаге 1: не вызывать InventoryChangeTrigger при сбрасывании стеков или перемещении их из инвентаря (например, в сундук). Управляется параметром конфига ignore_triggers_for_emptied_stacks.

2. Аналогично: не вызывать InventoryChangeTrigger, если изменение стека вызвано уменьшением его размера без опустошения (например, игрок сбросил один предмет из полного стека). Управляется ignore_triggers_for_decreased_stacks.

3. Также не вызывать InventoryChangeTrigger, если размер стека увеличился, но не превысил порог для какого-либо достижения. Например, размер стека земли увеличился с 52 до 53, но в сборке нет достижения за получение 53 земли. Управляется optimize_triggers_for_increased_stacks.

4. Изменить проверку измененных предметов при открытии контейнера, чтобы игра не считала все стеки измененными в момент открытия. Управляется initialize_inventory_last_slots.

5. На шаге 6: сначала проверить, соответствует ли измененный слот какому-либо требованию, и только затем проверять остальные стеки в инвентаре. Управляется optimize_multiple_predicate_trigger.

6. На шаге 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.

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.

Используйте фильтр на странице Файлы для выбора нужной версии.

Скачать Icterine

 
Тип Скачать Версия Загрузчик Обновлено Размер
ReleaseIcterine 1.3.0 NeoForge 1.20.21.20.2NeoForge15 февраля 202436,8 КБ
BetaIcterine 1.3.0 Fabric 1.20.3 - 1.20.41.20.3+2 Fabric15 февраля 202438,4 КБ
ReleaseIcterine 1.3.0 Forge 1.20.3 - 1.20.41.20.3+2 Forge15 февраля 202438,4 КБ
ReleaseIcterine 1.3.0 NeoForge 1.20.3 - 1.20.41.20.3+2 NeoForge15 февраля 202436,9 КБ
BetaIcterine 1.2.0 Fabric 1.18.2 - 1.19.41.18.2+5 Fabric15 февраля 202439,6 КБ
ReleaseIcterine 1.2.0 Forge 1.18.2 - 1.19.21.18.2+3 Forge15 февраля 202438,9 КБ
ReleaseIcterine 1.3.0 Forge 1.19.3 - 1.19.41.19.3+1 Forge15 февраля 202438 КБ
BetaIcterine 1.3.0 Fabric 1.20 - 1.20.11.20+1 Fabric15 февраля 202438,7 КБ
ReleaseIcterine 1.3.0 Forge 1.20 - 1.20.11.20+1 NeoForge15 февраля 202437,9 КБ
BetaIcterine 1.3.0 Fabric 1.20.21.20.2Fabric15 февраля 202438,4 КБ
Пожалуйста авторизуйтесь, чтобы оставить свой комментарий.