Bloody Bits Fix: стабильная кровь на Forge 1.20.1 без вылетов клиента
Если вы собираете сборку с атмосферными боевыми эффектами, мод Bloody Bits от CravenCraft добавляет визуальные брызги крови и делает сражения «сочнее». Но на версии 1.3.3 для Forge 1.20.1 у части игроков всплывала неприятная история: клиент мог резко закрыться с ошибкой Ticking entity и NullPointerException в методе BloodSprayEntity#setClientBloodColor. Небольшой патч Bloody Bits Fix как раз и существует, чтобы убрать этот узкий, но раздражающий момент совместимости и держать игру в рабочем состоянии даже при плотных боях.
Почему это случалось и что ломало клиент
Проблема была не в «железе» и не в настройках графики, а в логике клиентской части эффектов. Внутри мода используется карта CLIENT_SIDE_BLOOD_SPRAYS, куда складываются данные о брызгах на стороне клиента. Когда активность частиц становилась очень высокой, лимит по числу одновременных брызг мог «переполнять» ожидания кода: в исходной реализации при переполнении сценария вызывался map.get(0), а дальше обращение шло к записи, которой по факту не было. Ровно отсюда и вылет: ticking entity на клиенте — это классический симптом, когда сущность обновляется каждый тик, а внутри обновления происходит обращение к null.
На практике это особенно заметно там, где много источников урона и частиц одновременно: большие орды мобов, массовые сражения, активные зоны с постоянными попаданиями. Чем сильнее «кровавая» активность, тем выше шанс наткнуться на крайний случай, который штатный код не обрабатывал безопасно.
Что меняет Bloody Bits Fix
Патч не «переписывает» весь мод и не меняет стиль эффектов целиком — он точечно чинит опасное место через Mixin overwrite метода, который отвечал за цвет крови на клиенте. Это важно: вы получаете совместимость там, где исходная версия могла рухнуть, при этом подход остаётся близким к исходной архитектуре Forge-мода.
- Синхронизация состояния брызг после респавна: корректнее согласуются параметры, включая длительность «жизни» эффекта, чтобы клиент не оставался с рассинхронизированными данными.
- Корректное поведение при достижении лимита: когда число брызг доходит до значения из
CommonConfig.maxSpatters(), патч удаляет самую старую запись, а не пытается работать с фиксированным ключом0, который мог быть пустым. - Безопасное завершение перед удалением: перед удалением вызывается
discard(), что уменьшает риск «висячих» сущностей и странных состояний в тиках. - Устранение NPE: сценарии с NullPointerException в этом месте убираются полностью в рамках описанной логики.
Если вы уже привыкли собирать модпаки вручную и постоянно крутите список модов ради одного патча, иногда проще перейти на рабочий процесс «всё в одном месте». В том числе отдельные точечные дополнения вроде этого проще подключить, когда инструмент ставит зависимости предсказуемо: этот мод можно легко установить через лаунчер foxygame.net — удобный, гибкий и современный лаунчер для Minecraft, где можно скачать моды прямо из меню, не расползаясь по десятку вкладок браузера.
Совместимость, установка и порядок файлов
Патч не заменяет Bloody Bits, он дополняет его. Зависимость одна и очевидная: нужен сам Bloody Bits (CravenCraft) нужной версии 1.3.3 под Forge 1.20.1. Дальше всё по классике папки модов:
- Убедитесь, что у вас стоит подходящая версия Minecraft и корректный Forge для 1.20.1.
- Поставьте основной мод Bloody Bits 1.3.3.
- Добавьте файл патча bloodybitsfix-1.0.1.jar в папку
modsрядом с остальными jar-модулями сборки. - Если краш повторялся на старом сейве, после обновления имеет смысл сначала проверить бой в тестовом мире — так быстрее отделяете «проблему мода» от других конфликтов в модпаке.
Важный нюанс по ощущениям от геймплея: по задумке патча поведение длительности жизни брызг остаётся согласованным с оригинальной реализацией Bloody Bits — меняется не «художественная часть», а устойчивость клиента.
Как проверить, что фикс реально помог
Тест лучше делать там, где раньше вы гарантированно «ловили» вылет:
- Создайте ситуацию с большим количеством боёв и интенсивными брызгами — например, орда мобов и активные удары по множеству целей.
- Последите за стабильностью: клиент должен перестать падать на Ticking entity в сценарии тяжёлой кровавой активности.
- Проверьте ограничение по числу эффектов: суммарное количество брызг должно стабилизироваться около лимита
maxSpatters, заданного в конфиге Bloody Bits.
Если FPS проседает не из-за вылетов, а из-за нагрузки визуала, это отдельная ручка настроек: можно снизить maxSpatters в конфигурации Bloody Bits и получить более лёгкую картинку без отказа от атмосферы.
Вывод
Bloody Bits Fix — это не «ещё один контентный мод», а аккуратный совместимостный штрих для Bloody Bits 1.3.3 на Forge 1.20.1: он убирает клиентский краш на тике сущности, связанный с небезопасной работой карты брызг, и делает поведение при переполнении лимита предсказуемым. Если вы хотите кровавые эффекты в сборке, но не хотите платить за них вылетами во время массовых сражений, такой патч обычно окупается одной вечерней сессией без разочарования — особенно в модпаках, где бои затягиваются и частицы не отключаются «по кнопке».