Icterine для Minecraft: ускорение триггеров достижений

Icterine для Minecraft: ускоряем триггеры достижений без лишней нагрузки на сервер Если вы держите модовый сервер с сотнями достижений, вы наверняка замечали, как «мелочи» вроде проверки инвентаря начинают съедать тики. Мод Icterine как раз про это: он оптимизирует срабатывание InventoryChangeTri...

Скачать Icterine fabric для Minecraft 1.20.5-Snapshot, 1.20.2, 1.20.1, 1.19.3, 1.19-Snapshot

Оригинальное название: Icterine fabric

Версии Minecraft: 1.19.3, 1.20.1, 1.20.2, 1.20.5-Snapshot, 1.19-Snapshot

Загрузчик: Fabric, Forge, NeoForge

ФайлВерсияЗагрузчикРазмер
Icterine-fabric-1.2.0.jar1.19.3Fabric40 КБСкачать
Icterine-fabric-1.20.0-1-1.3.0.jar1.20.1Fabric39 КБСкачать
Icterine-fabric-1.20.2-1.3.0.jar1.20.2Fabric38 КБСкачать
Icterine-fabric-1.20.3-4-1.3.0.jar1.20.5-SnapshotFabric38 КБСкачать
Icterine-forge-1.2.0.jar1.19-SnapshotForge39 КБСкачать
Icterine-forge-1.19.3-4-1.3.0.jar1.19.3Forge38 КБСкачать
Icterine-forge-1.20.2-1.3.0.jar1.20.2Forge38 КБСкачать
Icterine-forge-1.20.4-1.3.0.jar1.20.5-SnapshotForge38 КБСкачать
Icterine-forge-1.20.0-1-1.3.0.jar1.20.1NeoForge38 КБСкачать
Icterine-neoforge-1.20.2-1.3.0.jar1.20.2NeoForge37 КБСкачать
Icterine-neoforge-1.20.3-4-1.3.0.jar1.20.5-SnapshotNeoForge37 КБСкачать

Icterine для Minecraft: ускоряем триггеры достижений без лишней нагрузки на сервер

Если вы держите модовый сервер с сотнями достижений, вы наверняка замечали, как «мелочи» вроде проверки инвентаря начинают съедать тики. Мод Icterine как раз про это: он оптимизирует срабатывание InventoryChangeTrigger — механики, которая реагирует на изменения стаков в инвентаре игрока и связывает их с прогрессом в advancements. В статье разберём, зачем это нужно, как работает ваниль и что именно меняет Icterine, плюс на каких версиях и лоадерах мод доступен.

Зачем вообще оптимизировать InventoryChangeTrigger

В Minecraft достижения часто завязаны на получение предметов, крафт, биомы и десятки других условий. Когда стак в инвентаре меняется, игра может вызывать триггер для этой ячейки — и это происходит не только при подборе блока с земли. Срабатывания возможны при выбрасывании, перекладывании предметов, работе с контейнерами и других рутинных действиях. На крупных сборках с тяжёлыми датапаками и модами количество критериев растёт, и каждая лишняя проверка превращается в заметную нагрузку на серверный тик.

Как это устроено в ваниле (коротко и по делу)

Чтобы понять ценность Icterine, полезно увидеть «цепочку» ванильной логики:

  • Игра замечает изменение стака и вызывает InventoryChangeTrigger для затронутой ячейки.
  • Триггер считает пустые, непустые и полностью заполненные слоты — данные могут использоваться критериями, хотя в ваниле это не всегда задействовано.
  • Дальше перебираются зарегистрированные критерии достижений: если по слотам не сходится или нет требований к предметам, критерий пропускается.
  • Если требование одно — проверяется изменённый стак. Если требований несколько (как у наборов брони), игра может гонять сопоставление по многим стакам.
  • Сопоставление с тегами и NBT — самое тяжёлое; ваниль старается сначала сравнить тип предмета, а уже потом считать количество, зачарования и прочие данные.

Отдельный «сюрприз» — открытие сундука, печи или другого контейнера: игра может воспринимать массовое «изменение» слотов инвентаря и дергать триггеры шире, чем кажется игроку.

Что именно оптимизирует Icterine

Icterine не «ломает» саму систему достижений целиком: изменения серверные, а гибкость даёт конфиг — почти каждую вставку в ванильный код можно отключить. По смыслу мод убирает заведомо бессмысленные вызовы и удешевляет самые дорогие проверки.

Например, можно не вызывать триггер при опустошении стака или переносе предметов из инвентаря в контейнер (параметр ignore_triggers_for_emptied_stacks), а также при уменьшении стака без полного опустошения — когда выкинули один предмет из полного стака (ignore_triggers_for_decreased_stacks). Есть оптимизация для ситуаций, когда стак вырос, но это не пересекает пороги ни одного advancement в вашем модпаке (optimize_triggers_for_increased_stacks). Для экранов контейнеров мод меняет инициализацию «последних» слотов, чтобы открытие сундука не выглядело как волна изменений по всему инвентарю (initialize_inventory_last_slots).

Когда критериев с несколькими предметами много, Icterine сначала смотрит, подходит ли изменённый слот под требования, и только потом разгребает остальной инвентарь (optimize_multiple_predicate_trigger). А в тяжёлом этапе сопоставления с тегами мод может сравнивать количество раньше, используя и предыдущее значение счётчика, чтобы не гонять лишние проверки (check_count_before_item_predicate_match).

Производительность: цифры с реального теста

Авторы приводят замер на выделенном сервере с тремя активными игроками, кастомным Forge-модпаком на 200+ модов и паком BlazeandCave's Advancements (более 950 достижений). Статистику собирали через Spark в течение часа: с Icterine (версия 1.1.0) InventoryChangeTrigger выполнялся примерно в 2,5 раза быстрее, занимая около 7,5% времени тика вместо 20%. Для сравнения, в 1.0.0 прирост был около двукратным — то есть апдейты мода действительно двигают метрику в правильную сторону.

Совместимость, паритет и «что если что-то поедет»

Мод заявлен как оптимизация триггеров получения предметов: теоретически это может отличаться от ванильного поведения в редких краевых случаях, но ванильные достижения и большинство модов/датапаков не должны пострадать. Если вдруг что-то ведёт себя странно, обычно достижение всё равно можно «дожать» классическим трюком: выбросить нужный предмет и подобрать снова — это снова запускает цепочку проверок. На момент описания известных несовместимостей не отмечено, а любой спорный кусок логики можно отключить в конфиге.

Если вы собираете тяжёлую сборку и хотите меньше возни с ручной установкой зависимостей, имеет смысл поставить моды через удобный лаунчер: этот мод можно легко установить через лаунчер foxygame.net — гибкий и современный лаунчер для Minecraft, где моды можно скачать прямо из меню, без лишних переходов по сайтам.

Версии и лоадеры: куда ставить Icterine

Ориентиры по файлам такие: Icterine v1.2.0 — Fabric/Quilt для Minecraft 1.18.2–1.19.4 и Forge для 1.18.2–1.19.2. Icterine v1.3.0 сохраняет функциональность 1.2.0 и расширяет охват: Fabric/Quilt 1.20–1.20.4, Forge 1.19.3–1.20.4 и NeoForge 1.20.1–1.20.4. На странице Files удобно отфильтровать нужную версию игры и лоадер; если порта под ваш релиз нет, обычно просят завести issue или написать в Discord-сервер проекта.

Вывод

Icterine — практичный серверный мод для тех, кто упирается в стоимость advancements на больших модпаках: меньше лишних триггеров, дешевле сопоставление предикатов, наглядные профиты в Spark и при этом настраиваемость через конфиг. Если у вас сотни достижений, активные игроки и чувствительный к тикам мир, такой апгрейд механики инвентаря часто окупается стабильнее, чем очередной «магический» оптимизатор без понятной причины нагрузки.