Cerulean Fork
Мод для оптимизации достижений, обновлённый форк Icterine / Cerulean с добавленными функциями
- Загрузчики
- FabricNeoForgeForgeQuilt
- Скачиваний на Modrinth
- 17,7 тыс.
- Подписчиков на Modrinth
- 12
- версии
- 42
- Обновлён
- 15 сентября 202615 сент.
- Опубликован
- в 2026
Коротко о моде
Ставится только на сервер; игрокам ставить не нужно
Это форк Cerulan, который на самом деле является форком Icterine. Оригинальный мейнтейнер не обновлял его год, так что я обновил его до современных версий как форк Cerulean под тем же названием.
Cerulean — это мод, который оптимизирует систему проверки достижений в Minecraft, а именно лагающий InventoryChangeTrigger, который может вызывать серьёзные лаги в модпаках с большим количеством модовых достижений. Cerulean — это форк Icterine, обновлённый до 1.21.1 пользователем Txni с дополнительными функциями.
Помимо обновления до 1.21.1, Cerulean добавляет опцию обрабатывать достижения только раз в несколько тиков — это стратегия, используемая такими модами, как Achievements Optimizer (который не работает с оригинальным Icterine). Эта опция реализована так, что первое получение предмета каждым игроком всегда обрабатывается для достижений — это предотвращает случаи, когда достижения зависают, пока вы не начнёте двигать предметы туда-сюда.
Краткое описание из оригинального мода:
- Оптимизирует срабатывание достижений за получение предметов;
- Может нарушить паритет с ваниллой, но не влияет на ванильные достижения и не должен влиять на подавляющее большинство модов/датапаков;
- Даже если на что-то повлияет, достижение всё равно можно получить, просто выбросив и подобрав один из требуемых предметов;
- На данный момент известных несовместимостей или проблем нет;
- Любую инъекцию в ванильный код можно отключить в конфиге.
- Все изменения серверные.
Результаты
Живой тест проводился на выделенном сервере с 3 активными игроками онлайн, на кастомном 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.
Используй фильтр на странице версий, чтобы выбрать нужный файл.
Если тебе нужен порт на любую другую версию, пожалуйста, открой issue или спроси на сервере Discord.
Частые вопросы
Как установить Cerulean Fork?
Установите Fabric под свою версию Minecraft, скачайте Cerulean Fork под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть Cerulean Fork?
У Cerulean Fork есть сборки для Minecraft 1.21.4–26.3.
Нужен ли Cerulean Fork на сервере?
Ставится только на сервер; игрокам ставить не нужно