
Create-Aeronautics: Compatibility + Bug fixes
Мод-патч для Sable, который чинит краши сервера, зависания при сохранении, баги освещения и совместимость с Create, Aeronautics и другими модами. Всё настраивается через конфиг.
Create-Aeronautics: Compatibility + Bug fixes - мод для Майнкрафт, который чинит Sable. Да, именно так. Sable - это крутой мод, добавляющий физику блокам, но его гибридная архитектура на Rust + Java оставляет желать лучшего в плане стабильности. Этот патч закрывает дыры, из-за которых сервер может зависнуть, крашнуться или вообще отказаться запускаться.
Актуальная версия - 1.7.14 для Minecraft 1.21.1 на NeoForge. Работает и на сервере, и на клиенте. Обязательная зависимость - сам Sable, без него мод бессмыслен.
Что это такое и зачем нужно
Sable делает блоки физическими объектами. Звучит круто, играется круто, но под капотом творится ад. Rust-нативный код делает синхронные операции ввода-вывода прямо в главном потоке, Java-часть почти не проверяет возвращаемые значения, а panic в Rust убивает весь JVM-процесс без какой-либо обработки ошибок. В результате один большой физический объект может заморозить сервер на минуту, а бамбук, растущий рядом с физической структурой, просто крашит всё.
Этот мод - набор фиксов, которые закрывают самые критичные дыры. Всё включено по умолчанию, но каждый фикс можно отключить через конфиг, если он вдруг мешает. Фиксы, зависящие от других модов, автоматически отключаются, если этих модов нет.
Основные фиксы ядра Sable
Вот что мод чинит в самом Sable:
| Фикс | Что делает |
|---|---|
async-save | Перенаправляет сохранение SubLevel в асинхронный поток ввода-вывода. Без этого большие физические структуры замораживают сервер при сохранении. |
panic-guard | Добавляет проверки перед вызовом Rust-кода. Иначе panic на стороне Rust убивает весь Java-процесс. |
write-flush | Сбрасывает данные на диск перед обновлением заголовка файла хранилища. Предотвращает порчу данных при краше. |
corrupted-cleanup | Чистит повреждённые указатели SubLevel в holding chunk, чтобы не было повторяющихся ошибок загрузки. |
plot-holder-guard | Безопасно пропускает обновления блоков, если holder для plot chunk не существует. Раньше это крашило сервер. |
sublevel-entity-guard | Предотвращает зависание сервера при итерации по аномальным AABB в SubLevelInclusiveLevelEntityGetter. Одна летучая мышь могла заблокировать сервер на 60+ секунд. |
command-block-sublevel-fix | Запрещает ставить командные блоки на физические структуры. Ванилла запрещает только прямое включение физики на командном блоке, но можно было сначала поставить блок, потом включить физику. |
player-position-guard | Возвращает игрока в границы мира, если физика SubLevel выбросила его за пределы. Лимит по Y расширен до +1000 блоков. |
light-engine-bounds-guard | Предотвращает краш светового движка, когда секции SubLevel выходят за пределы высоты мира. |
physics-ticket-guard | Предотвращает повреждение внутреннего состояния DistanceManager из-за PhysicsChunkTicketManager. |
sublevel-volume-limit | Ограничивает максимальное количество блоков в одной физической структуре (8192, примерно 16x16x32). Иначе Rapier крашится от слишком больших коллизий. |
constraint-self-fix | Подавляет ошибки самоограничения в физическом пайплайне Sable. Работает с Sable 1.x и 2.x. |
sublevel-load-log-spam-fix | Ограничивает спам ошибок "Couldn't find sub-level" - одна запись в лог на chunk+index каждые 60 секунд. |
udp-invalid-packet-guard | Тихо отбрасывает UDP-пакеты с невалидным ID (например, старый server list ping с ID 254), чтобы не спамились ошибки в лог. |
entity-lookup-remove-guard | Перехватывает EntityLookup.remove в PersistentEntitySectionManager.stopTracking, ловит ArrayIndexOutOfBoundsException и предотвращает краш всего тика. |
Это только верхушка айсберга. Полный список фиксов можно посмотреть командой /fucksable в игре.
Фиксы совместимости с другими модами
Sable конфликтует с кучей популярных модов. Вот что чинит этот патч:
| Фикс | Зависимость | Что делает |
|---|---|---|
carryon-compat | CarryOn | Чинит телепортацию игрока в неправильное измерение и краш при установке на физический sub-level. |
typewriter-server-fix | Simulated | Чинит краш пишущей машинки на выделенном сервере. В серверном коде была ссылка на клиентский класс Screen. |
aeronautics-server-fix | Aeronautics | Чинит краш SteamVentBlockEntity на сервере. Опять ссылка на клиентский класс, на этот раз Minecraft.getInstance(). |
aeronautics-slime-bearfix | Aeronautics | Чинит прилипание слаймовых блоков к подшипникам, из-за которого они отделялись и клипались сквозь блоки. Отключено по умолчанию - многие постройки используют этот баг. |
physics-staff-drag-clipfix | Simulated | Чинит клипание физических структур сквозь блоки и вылет за границы мира при быстром перетаскивании физическим посохом. |
copycats-lift-compat | Sable, Copycats | Предотвращает краш сервера, когда блоки Copycats без свойства facing вызывают sable$getNormal. |
ctt-concurrent-fix | Create ThreadedTrains | Чинит проблему конкурентности между CTT и Create. CTT выносит тик поездов в рабочие потоки, но не всё возвращает в главный поток, из-за чего портится AVL-дерево в EntitySectionStorage. |
ctt-log-spam-fix | Create ThreadedTrains | Подавляет спам предупреждений от CTT при ошибках расчёта поездов. |
ctt-posttick-timeout-guard | Create ThreadedTrains | Предотвращает краш Watchdog, когда CTT postTick блокирует главный поток. Теперь таймаут 10 секунд. |
create-trackgraph-null-guard | Create | Предотвращает краш сервера, когда навигация поездов Create ищет с null TrackNode. |
create-train-detach-nulledge-guard | Create | Предотвращает краш при TrackGraph.removeNode с null TravellingPoint.edge. |
frogport-extract-limit | Create | Предотвращает зависание сервера, когда FrogportBlockEntity пытается вытащить предметы из инвентаря с более чем 256 слотами. |
effortless-particle-fix | Effortless, Sable | Чинит краш клиента при взаимодействии Effortless с физическими структурами Sable. |
vista-camera-chunk-fix | Vista, Sable | Чинит несовместимость загрузки чанков камерой Vista с физическими структурами Sable. Раньше это роняло TPS до нуля. |
sable-scalablelux-incompat-bypass | Sable | Обходит объявление несовместимости Sable со ScalableLux в neoforge.mods.toml. Отключено по умолчанию - нужно для scalablelux-compat. |
scalablelux-compat | ScalableLux, Sable | Чинит полное отключение освещения в SubLevel при установленном ScalableLux. Зависит от sable-scalablelux-incompat-bypass. |
block-destroy-coordinate-guard | Sable | Предотвращает краш сервера, когда модовые предметы вызывают разрушение блоков на координатах Integer.MIN_VALUE/MAX_VALUE. |
Команды для управления
Все фиксы можно включать и выключать прямо в игре:
| Команда | Что делает |
|---|---|
/fucksable | Показывает статус всех фиксов |
/fucksable <фикс> on/off | Включает или выключает конкретный фикс |
/fucksable all on/off | Включает или выключает все фиксы разом |
/fucksable default | Сбрасывает все фиксы на настройки по умолчанию |
/fucksable <фикс> reset | Сбрасывает параметры конкретного фикса на дефолт |
Поддержка языков
Мод поддерживает кастомные языковые пакеты. Все сообщения (ответы команд, логи и т.д.) можно переопределить через языковые файлы.
Переключить язык можно командой:
/fucksablelang <имя_файла>
Языковые файлы лежат в config/fucksable/lang/. По умолчанию есть zh.yml (китайский) и en.yml (английский). Можно скопировать любой из них, перевести значения (ключи не трогать) и переключиться на свой язык.
Текста в моде немного, всего пара десятков строк. Переключение языка работает мгновенно, перезапуск сервера не нужен. Если YAML невалидный, мод автоматически откатится на английский.
Почему всё в одном моде
Можно было бы сделать отдельный мод на каждый фикс, но это боль. Искать патчи, ставить их по одному, разбираться с конфликтами - никому это не нужно. Тут всё в одном месте: один мод, одна установка, все фиксы работают сразу. Каждый фикс протестирован на реальном сервере, а не в теории. Конфиг позволяет отключить то, что не нужно.
Про стабильность версий
Если версия помечена как Alpha (например, v1.0.0-alpha.1), значит в ней есть известные проблемы, но она не была удалена. Alpha-версии могут содержать недоделанные функции, риски краша или проблемы с производительностью. Они для раннего тестирования и сбора фидбека.
Но есть нюанс: Alpha включает и Beta-версии, и некоторые Beta на самом деле стабильнее некоторых Alpha. Номер версии - это просто метка, не показатель качества.
Для продакшена выбирайте проверенные версии. Если что-то сломалось в Alpha/Beta - ну, это тестовая версия, не удивляйтесь.
Проверка обновлений
Мод умеет проверять обновления через GitHub Releases API. По умолчанию выключено, можно включить в конфиге. При старте проверит наличие новой версии и напишет в лог.
Лицензия
MIT License. Код открыт, можно смотреть, форкать, отправлять PR.
Стоит ли ставить
Если вы используете Sable на сервере - обязательно. Без этого патча сервер будет падать от каждого чиха. Бамбук рядом с физической структурой? Краш. Игрок вышел за границу мира? Краш. Попытались сохранить большую структуру? Зависание на минуту.
С этим модом большинство этих проблем просто исчезает. Некоторые фиксы отключены по умолчанию (например, фикс слаймовых блоков и подшипников), потому что многие постройки полагаются на эти баги. Но их можно включить, если нужно.
Скачать Create-Aeronautics: Compatibility + Bug fixes имеет смысл всем, кто играет с Sable. Это не просто патч, это необходимость для стабильной работы сервера.
Как поиграть с друзьями с модом Create-Aeronautics: Compatibility + Bug fixes?
Мод Create-Aeronautics: Compatibility + Bug fixes куда интереснее в компании: поднимите сервер Майнкрафт с уже установленным модом, позовите друзей и играйте по своим правилам. Хостинг Майнкрафт для мода Create-Aeronautics: Compatibility + Bug fixes будет готов за пару минут - BungeeHost сделает всё за вас.
