▶️ ЗАБЕРИ СВОИ 8 ПОДАРКОВ 🎁 ПРИ СОЗДАНИИ СВОЕГО МАЙНКРАФТ СЕРВЕРА
Моды/Cerulean Fork
Cerulean Fork

Cerulean Fork

Cerulean Fork - серверный мод оптимизации достижений для Minecraft. Убирает лаги от InventoryChangeTrigger в сборках с сотнями ачивок, работает с Fabric, Forge, NeoForge и Quilt.

Оцените первым
17.4K
12

Cerulean Fork - это обновлённый форк мода Cerulean, который сам по себе был форком Icterine. Простыми словами: оригинальный автор год не трогал проект, и кто-то взял и портировал его на актуальные версии Minecraft под тем же именем, добавив пару полезных фишек. Скачать Cerulean Fork стоит, если у вас в сборке модов сотни достижений и вы устали от просадок TPS при каждом подборе предмета.

Зачем этот мод вообще нужен

Если коротко - он оптимизирует систему проверки достижений в Майнкрафт. Точнее, тот самый лагучий InventoryChangeTrigger, который в больших модпаках с кучей кастомных ачивок способен знатно просадить производительность сервера. Виной всему ванильная механика: при любом изменении стака в инвентаре игрока игра запускает проверку по всем зарегистрированным критериям достижений. И если у вас установлен условный BlazeandCave's Advancements Pack с 950+ ачивками - каждый чих в инвентаре превращается в мини-обсчёт всего этого списка.

Для любителей тяжёлых сборок модов вроде Simple Performance или Voxyris (где Cerulean Fork уже идёт как компонент) это буквально мастхэв. Для ванильного выживания без кастомных пакетов - почти незаметно, хотя хуже точно не станет.

Что нового в ветке Cerulean

Помимо порта на Minecraft 1.21.1 и выше, здесь появилась опция обрабатывать достижения не каждый тик, а раз в несколько. Такой же подход применяется в моде Achievements Optimizer (который, к слову, не работает с оригинальным Icterine). Сделано это аккуратно: первый подбор предмета игроком всегда обрабатывается корректно, так что достижения не будут зависать в ожидании, пока вы начнёте двигать предметы по инвентарю.

Возможности

  • Оптимизация срабатывания достижений при получении предметов
  • Возможна небольшая рассинхронизация с ванильным поведением, но на ванильные достижения это не влияет и в большинстве случаев не заденет другие моды и датапаки
  • Даже если что-то поедет - достижение всё равно получается, если бросить и снова поднять нужный предмет
  • Известных несовместимостей и багов на данный момент нет
  • Каждую инъекцию в ванильный код можно отключить в конфиге
  • Все изменения работают на стороне сервера

Практические результаты

Автор проводил живой тест на выделенном сервере с тремя активными игроками. Кастомная сборка на Forge, свыше 200 модов плюс BlazeandCave's Advancements Pack с 950+ ачивками. Замеры снимались через Spark в течение часа.

С Icterine вызов InventoryChangeTrigger выполняется почти в 2.5 раза быстрее (для версии 1.1.0). Доля времени тика, которую он занимал, упала с примерно 20% до 7.5%. Совсем другой разговор, правда? На больших онлайн-серверах с кучей игроков эта разница становится ещё заметнее - TPS перестаёт прыгать при каждом открытии сундука.

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

Чтобы понимать, что вообще оптимизируется, разберём ванильную логику по шагам:

  1. Когда игра видит, что стак в инвентаре игрока изменился, она вызывает InventoryChangeTrigger. Это включает подбор предметов, выбрасывание, выбрасывание целых стаков, перемещение вещей внутри инвентаря.
    1. Ещё нюанс: при открытии контейнера (сундук, печь и т.д.) игра считает, что все слоты инвентаря изменились, и вызывает триггер для каждого из них, включая пустые.
  2. InventoryChangeTrigger подсчитывает пустые, непустые и полностью заполненные слоты в инвентаре. Эта информация могла бы использоваться в триггерах достижений, но в ваниле не применяется.
  3. Триггер проходит по всем зарегистрированным критериям достижений.
  4. Если у критерия есть требования к количеству слотов и они не совпадают со значениями из шага 2, или если у критерия нет требований к предметам, критерий пропускается.
  5. Если у критерия только одно требование к предмету, изменённый стак проверяется на соответствие этому требованию.
  6. Если требований несколько (например, "Засыпь меня обломками" требует полный сет незеритовой брони), каждый стак в инвентаре проверяется против каждого требования (но выполненные требования удаляются из списка и больше не проверяются).
  7. Сопоставление предметов, особенно по тегу, крайне тяжёлое. Но игра сначала проверяет, совпадает ли тип предмета игрока с типом из требования, и только потом смотрит остальные параметры вроде количества, зачарований и прочих NBT-данных.

Как оптимизирует Icterine (и Cerulean Fork)

  1. На шаге 1 не вызываем InventoryChangeTrigger, когда вы выбрасываете стаки или переносите их из инвентаря (например, в сундук). Управляется параметром ignore_triggers_for_emptied_stacks в конфиге.
  2. Аналогично не вызываем, если изменение стака было вызвано уменьшением количества, но не полным опустошением (например, игрок выбросил один предмет из полного стака). Отвечает за это ignore_triggers_for_decreased_stacks.
  3. Не вызываем триггер, если размер стака увеличился, но не пересёк порог ни для одного достижения. Пример: стак земли вырос с 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.

Совет: если вы запускаете сборку модов на слабом сервере, начните с включённых по умолчанию оптимизаций и смотрите на TPS через Spark. Большинство настроек в конфиге трогать не приходится - они и так работают из коробки.

Важный нюанс: проект лицензирован под GPL-3.0-or-later, работает в одиночной игре и на сервере. То есть ставить его нужно и на клиент (в одиночке), и на сервер. Все изменения - серверные, так что игрокам на мультиплеере отдельно ничего скачивать не нужно.

Поддерживаемые версии

Исходный 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.

Актуальная ветка Cerulean Fork поддерживает Minecraft Java 1.21.4 - 1.21.11, а также снапшоты 26.1.x, 26.2 и 26.3. Доступен под Fabric, Forge, NeoForge и Quilt. Последний опубликованный релиз - 1.0.1 для Minecraft 26.2 на Fabric и Quilt, ему требуется Fabric API. Changelog автор не указал, так что встречайте по факту.

Если нужен порт на другую версию - используйте фильтр версий, чтобы выбрать подходящий файл.

Совместимость

Проект плотно связан с экосистемой оптимизации достижений: его прямо сравнивают с Icterine, оригинальным Cerulean и Achievements Optimizer. Несовместимостей с другими популярными модами на данный момент не выявлено, но всегда стоит проверять конфиг после крупных обновлений сборки - особенно если вы обновляете Minecraft через несколько версий сразу.

Если вы собираете сервер под друзей или публичный проект с большим модпаком - Cerulean Fork по факту бесплатный прирост производительности без изменения геймплея. Скачайте мод Cerulean Fork, поставьте его на сервер и клиент, и забудьте про просадки при подборе лута.

Партнёрский материал

Как поиграть с друзьями с модом Cerulean Fork?

Мод Cerulean Fork куда интереснее в компании: поднимите сервер Майнкрафт с уже установленным модом, позовите друзей и играйте по своим правилам. Хостинг Майнкрафт для мода Cerulean Fork будет готов за пару минут - BungeeHost сделает всё за вас.

Часто задаваемые вопросы

Совместимость

Minecraft: Java Edition

26.3.x26.2.x26.1.x1.21.x

Платформы

Поддерживаемые окружения

Сервер

Зависимости

Ссылки

Создатели

Детали

Лицензия:
Опубликован:6 месяцев назад
Обновлён:1 месяц назад
Главная