modsmith Войти Войти Рус / Eng

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 раза):

Statistics

Как работает ванильный InventoryChangeTrigger

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

    1. Также, когда вы открываете контейнер (сундук, печь и т.п.), игра думает, что все слоты в вашем инвентаре изменились, и вызывает триггер для всех них, включая пустые слоты.
  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 (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 скачать

Страница на Modrinth →