No Null Processors: фикс краша при предгенерации мира

No Null Processors: как победить таинственный вылет при предгенерации мира Вы когда-нибудь запускали предгенератор чанков на сервере или в одиночной игре, чтобы заранее прогреть мир, и внезапно получали краш с загадочной ошибкой NullPointerException? Если да, то вы столкнулись с одним из самых не...

Скачать no null processors fabric для Minecraft 1.18.1, 1.18, 1.17.1

Оригинальное название: no null processors fabric

Версии Minecraft: 1.17.1, 1.18, 1.18.1

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

ФайлВерсияЗагрузчикРазмер
no_null_processors_fabric-1.0.0+1.17.1.jar1.17.1Fabric13 КБСкачать
no_null_processors_fabric-2.0.2+1.18.1.jar1.18Fabric13 КБСкачать
no_null_processors_fabric-2.0.0+1.18.jar1.18.1Fabric13 КБСкачать
no_null_processors_fabric-2.0.1+1.18.1.jar1.18.1Fabric13 КБСкачать
no_null_processors_forge-2.0.1+1.18.jar1.18.1Forge11 КБСкачать
no_null_processors_forge-2.0.2+1.18.1.jar1.18.1Forge11 КБСкачать
no_null_processors_forge-2.0.3+1.18.1.jar1.18.1Forge11 КБСкачать

No Null Processors: как победить таинственный вылет при предгенерации мира

Вы когда-нибудь запускали предгенератор чанков на сервере или в одиночной игре, чтобы заранее прогреть мир, и внезапно получали краш с загадочной ошибкой NullPointerException? Если да, то вы столкнулись с одним из самых неуловимых багов Minecraft версий 1.17–1.18.1. Мод No Null Processors создан именно для того, чтобы навсегда закрыть эту проблему и сделать предгенерацию стабильной.

Как выглядит ошибка и почему она возникает

Типичный стектрейс, который преследует игроков и администраторов, содержит строки вроде:

  • java.lang.NullPointerException: Cannot invoke "net.minecraft.structure.processor.StructureProcessorList.getList()" because the return value of "java.util.function.Supplier.get()" is null
  • Упоминание SinglePoolElement.createPlacementData и SinglePoolElement.generate

Ошибка возникает при загрузке большого количества чанков, особенно когда в мире используются структуры с процессорными листами, заданными через датапаки или моды. Суть бага кроется в том, как Minecraft регистрирует и перезаписывает процессоры во время генерации мира.

В нормальной логике игры реестр процессорных листов заполняется один раз при старте мира. Однако при чтении структуры из чанка (когда чанк уже сгенерирован и сохраняет информацию о выбранных элементах пула) код ошибочно пытается заново зарегистрировать тот же процессорный лист в реестре. Эта операция замены «самого себя на самого себя» не потокобезопасна. Поскольку Minecraft генерирует чанки в несколько потоков, возникает редкая коллизия: два потока одновременно читают и пишут в одну и ту же ячейку реестра. В результате один из потоков может получить null вместо ожидаемого процессора, что и приводит к крашу.

Почему баг так сложно отловить

Проблема проявляется только при стечении трёх обстоятельств:

  • Наличие модов или датапаков, добавляющих структуры с кастомными процессорами.
  • Использование инструментов массовой предгенерации чанков (Chunk Pregenerator, Chunky и аналоги).
  • Загрузка большого объёма территории, при которой многопоточная генерация начинает активно конкурировать за реестр.

В обычной игре, когда чанки подгружаются постепенно по мере перемещения игрока, шанс столкнуться с этой гонкой потоков минимален. Но стоит запустить предгенератор — и краш становится почти гарантированным на крупных картах. Интересно, что в версии 1.16.5 подобного поведения не наблюдалось, баг появился именно в 1.17 и дожил до 1.18.1 включительно. Разработчики Mojang исправили его только в 1.18.2, поэтому для всех, кто остаётся на более ранних сборках, No Null Processors остаётся критически важным дополнением.

Как мод решает проблему

Автор мода применил элегантный подход: кеширование RegistryOps для каждого процессорного листа. Вместо того чтобы позволять игре каждый раз заново обращаться к реестру и потенциально вызывать перезапись, мод сохраняет уже полученный экземпляр и повторно использует его. Таким образом, операция записи в реестр выполняется ровно один раз, и многопоточные коллизии становятся невозможны. По сути, это обходной путь, который не меняет механику игры, а лишь исправляет опасную гонку данных.

Когда я впервые настраивал сервер для друзей и столкнулся с этой ошибкой, то потратил несколько часов на поиск причины. Оказалось, что многие моды, добавляющие данжи и деревни, неявно провоцируют этот баг. Установить No Null Processors можно вручную, скопировав jar-файл в папку mods, но гораздо удобнее воспользоваться лаунчером foxygame.net — удобным, гибким и современным лаунчером для Minecraft, где можно скачать моды прямо из меню. Это экономит время и исключает путаницу с версиями, особенно если вы часто переключаетесь между Fabric и Forge.

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

  • Поддерживаются версии Minecraft 1.17.0, 1.17.1, 1.18.0 и 1.18.1.
  • Для 1.18.2 и новее мод не требуется — разработчики исправили баг на уровне ванильного кода.
  • Работает как на Forge, так и на Fabric (ссылки на скачивание обычно лежат в описании мода).
  • Не конфликтует с другими оптимизационными модами вроде Lithium, Starlight или FerriteCore.
  • Не добавляет новых блоков или предметов — это чисто технический патч.

Когда стоит обязательно установить No Null Processors

Если вы планируете использовать предгенерацию мира на сервере с модами, добавляющими структуры (например, Repurposed Structures, YUNG’s Better Strongholds, Dungeon Crawl), этот мод должен быть в списке обязательных. Даже если вы не применяете предгенератор, но замечали случайные краши при исследовании новых территорий в версиях 1.17–1.18.1, установка патча может полностью решить проблему. Отзывы сообщества подтверждают, что после добавления No Null Processors генерация мира проходит без единого вылета.

Заключение

No Null Processors — это маленький, но невероятно полезный инструмент для всех, кто застрял на версиях Minecraft между 1.17 и 1.18.1 и ценит стабильность. Он устраняет редкий, но крайне неприятный баг, связанный с гонкой потоков в реестре процессорных листов. Благодаря простому механизму кеширования мод делает предгенерацию чанков безопасной, позволяя наслаждаться огромными мирами без внезапных крашей. Если вы активно пользуетесь модами на структуры и предгенераторами, обязательно добавьте этот патч в свою сборку — и забудьте о NullPointerException навсегда.