KAllFix
Оптимизация и многопоточность от n1luik
- Загрузчики
- NeoForgeForge
- Скачиваний на Modrinth
- 16,8 тыс.
- Подписчиков на Modrinth
- 28
- версий
- 65
- Обновлён
- 13 сентября 202613 сент.
- Опубликован
- в 2025
Коротко о моде
Работает и в игре, и на сервере — ставьте, где нужен
Обзор
- Этот проект исправляет и оптимизирует проблемы, вызванные другими модами, и работает на серверах.
- Проект состоит из двух основных частей:
k_all_fixиk_multi_threading, функции в основном управляются JVM-параметрами. - Обычный конфиг-файл не предоставляется; настройка выполняется в основном через параметры запуска.
- Поддержка клиентской стороны появилась начиная с
1.0.4.0(требуется JVM-параметр-DKMT_Client=true). - В среде с множеством модов и однопоточной базовой конфигурацией отсутствие проблем не гарантируется, но вы можете создать ISSUE на Github, и автор быстро его исправит.
- При некоторых комбинациях модов клиентам всё равно может потребоваться установить этот мод, даже если видимого эффекта нет.
Возможности и сценарии использования
Оптимизации
- Оптимизирует производительность Upgraded Additional Trims.
- Оптимизирует накладные расходы, связанные с проверкой даты первоапрельской шутки, в Atmospheric.
- Оптимизирует производительность Upgraded Core.
- Оптимизирует производительность ИИ курятника в [Let's Do] Farm & Charm.
- Оптимизирует производительность Event Wrapper
Оптимизирует производительность Create:FluidLogistic
-DKAF-fluidlogistics.DisabledDynamicUp=true, чтобы отключить обновление старого id; если этого не сделать, может замедлиться производительность.
- Оптимизирует игровые вычисления AE2
- Оптимизирует производительность ItemStack.issameItemsameTags
- Оптимизирует производительность PPMO2
- Удаляет бесполезный код Apotheosis и Create:Connected
Исправления
- Исправляет проблемы производительности, связанные с количеством сущностей, в L_Ender's Cataclysm при использовании на серверах с MineColonies.
- Исправляет чрезмерную отправку недействительных пакетов в [Let's Do] Farm & Charm.
- Исправляет проблемы совместимости между Biolith и некоторыми модами генерации мира от MCreator (например, Terramity).
- Исправляет проблемы совместимости между Gregicality Rocketry и Canary, но проблемы с хитбоксами всё ещё могут возникать на границах космических станций.
- Исправляет проблему, из-за которой Petrolpark's Library 1.4.2 не работает в некоторых Java-средах; это исправление можно отключить с помощью
-DKAF-DisablePetrolpark=false. - Исправляет/оптимизирует проблемы производительности, связанные с магнитными полями, в Alex's Caves.
- Исправляет проблемы производительности mixin в Create: Diesel Generators.
- Исправляет падения сервера в старых версиях Destroy, вызванные сбоями подключения к базе данных.
Многопоточность
Введение
- Поддержка многопоточности включает тики блоков, тики блок-сущностей, сущностей, измерений, приём пакетов игроками (ручное переключение, только клиент) и вход игроков (ручное переключение), а также исправляет некоторые проблемные однопоточные моды путём применения многопоточности.
- Многопоточность включена по умолчанию на стороне сервера.
- В многопоточных сценариях могут появляться ошибки перехвата пула потоков или превышения лимита, но обычно это не приводит к падению сервера.
- Рекомендуется вручную задать
-DKMT-threadMax=[количество потоков CPU]; иначе генерация мира может зависнуть. Если зависания всё ещё происходят после установки, увеличьте значение. - До
1.0.4.0клиенты не могут использовать многопоточность; начиная с1.0.4.0клиенты могут включить её через-DKMT_Client=true. - После
1.0.3.3ParaServerChunkProvider,TaskRunи часть кода генерации чанков сильнее зависят от C2-компиляции (JVM автоматически перейдёт в C2 после некоторого времени работы). - В Windows Server 2022 Datacenter 21H2 20348.3091 (среда автора) могут возникать редкие аномалии планирования потоков, вызывающие аномально высокую загрузку CPU; решение — перезапустить сервер.
Связанные параметры JVM
-DKMT-threadMax=[number]- Задаёт количество потоков в пуле потоков.
-DKMT-callMax=[number]- Задаёт максимальное число потоков по умолчанию, которое могут использовать многопоточные задачи.
-DKMT-ThreadpoolKeepAliveTime=[milliseconds]- Задаёт, как долго простаивающие потоки остаются в живых перед переработкой.
-DKMT_D=[any characters]- Отключает многопоточность.
-DKMT-OpenVanillaServerChunkCache=true- Принудительно включает ванильный путь исправления
ServerChunkCache(добавлено в 1.0.5.3).
- Принудительно включает ванильный путь исправления
Обзор параметров JVM (все сохранены)
Базовые и общие
-DKAllFix_D=[any characters]- Отключает KAllFix.
-DKMT_Client=true- Включает функции, связанные с многопоточностью, на стороне клиента (1.0.4.0+).
-DKAF-DisablePetrolpark=false- Отключает исправление, связанное с Petrolpark's Library 1.4.2.
Соединение и тайм-ауты
-DKAF-ClientboundKeepAlivePacket_Max=[milliseconds]- Меняет требование по времени для
ClientboundKeepAlivePacket(по умолчанию 15 секунд; в ванили должно быть <30 секунд, иначе игрока кикает по тайм-ауту).
- Меняет требование по времени для
-DKAF-ServerTimeout=[seconds]- Задаёт тайм-аут соединения с сервером.
- В некоторых случаях может не работать (нужны оба параметра, так как Forge'вский
forge.readTimeoutпокрывает только тайм-аут чтения пакетов на сервере, но не сетевые потоки клиента/сервера с игроками).
-Dforge.readTimeout=[seconds]- Параметр тайм-аута чтения пакетов Forge (используется вместе с предыдущим параметром).
Mixin / NBT / авто-команды
-DKAF-RemoveMixin:[class name]- Отключает указанный mixin (также можно отключить mixin'ы
k_multi_threading).
- Отключает указанный mixin (также можно отключить mixin'ы
-DKAF-NbtIoMixin_NotGZip=true- Добавляет try-catch в NBT IO для случаев без gzip (небезопасно; требует commons-compress в окружении).
-DKMT-ChunkGeneratorMode2Start=[true,false]- Автоматически выполняет:
/SetterWorldConfig world setM2 %%KMT-ChunkGeneratorMode2Start%%.
- Автоматически выполняет:
Контроль размножения
-DKAF-ChunkBreedingControlSize=[number]- Отключает размножение, когда количество сущностей в чанке превышает заданное значение; отключено, если параметр отсутствует / не является числовым массивом / пуст.
-DKAF-ChunkBreedingControlSizeEnable=[true,false]- Внутренний кэш-переключатель для результатов обнаружения; ручная настройка может быть перезаписана программой.
Дополнительные функции
-DKMT-SafeUnloadChunk=true- Включает выгрузку чанков в потоках генерации чанков (рекомендуется только для
<1.0.4.2при возникновении связанных фризов).
- Включает выгрузку чанков в потоках генерации чанков (рекомендуется только для
-DIndependencePlayer=true- Включает асинхронную обработку игроков (скорее всего, даёт мало оптимизации или не даёт её вовсе).
-DFixBiolithBugMode2=true- Пытается исправить большинство проблем совместимости с Biolith (может внести серьёзные баги).
-DKAF-gtceu.MedicalConditionTrackerMixin=true- Отключает радиацию в GTM.
-DKAF-RemoveClientboundKeepAlivePacket=true- Отключает ванильный
ClientboundKeepAlivePacket(pingбольше не рассчитывается).
- Отключает ванильный
-DKAF-RemoveFlyingTest=true- Убирает проверки на полёт.
-DKAF-moonrise_fast_palette=true- Отключает функцию
fast_paletteиз Moonrise.
- Отключает функцию
-DKAF-FixTFMGDestroy=true-DKAF-Fix_fabric-object-builder-api.jar=true- Исправляет совместимость между
fabric-object-builder-apiиз Sinytra Connector иforge-47.3.27.
- Исправляет совместимость между
-DKAF-FixAllPacket=true- Исправляет сетевые пакеты (должно быть включено и на клиенте, и на сервере); связанные моды: Mekanism Explosives, Create, The Abyss II.
-DKAF-ChunkAwareBlockCollisionSweeperFast=true- Использует приближённый алгоритм для замены ChunkAwareBlockCollisionSweeper из Lithium
Многопоточный вход
-DKMT-LoginMultiThreading=true- Включает многопоточный вход.
-DKMT-LoginMultiThreading.ConnectionLock=true- Ожидает завершения асинхронного выполнения в конце тика (отключение может немного повысить производительность, но снижает стабильность входа и может привести к крашу).
-DKMT-LoginMultiThreading.TaskSizeMax=[число]- Ограничивает количество одновременных задач входа (по умолчанию 8).
- Многопоточный вход может привести к тому, что сервер получит
ServerboundMovePlayerPacketраньше времени, что вызовет одну ошибку в логе.
Оптимизация пакетов
-DKAF-packetOptimize=true- Оптимизирует некоторые ванильные пакеты (должно быть включено и на клиенте, и на сервере).
-DKAF-packetOptimize.AttributesReOutputTime=[миллисекунды]- Задаёт интервал принудительной повторной отправки данных, связанных с атрибутами (по умолчанию 2 минуты).
-DKAF-packetOptimize.CompatibilityMode.ClientboundBlockEntityDataPacket=true- Использует более консервативное сжатие для
ClientboundBlockEntityDataPacket(влияет на производительность).
- Использует более консервативное сжатие для
-DKAF-packetOptimize.CompatibilityMode.ClientboundSectionBlocksUpdatePacket=true- Использует более консервативное сжатие для
ClientboundSectionBlocksUpdatePacket.
- Использует более консервативное сжатие для
Прочее
-DKAF-UnsafeCinderscapesFix1=true- Корректирует лимиты для ресурсоёмкой функции
enableAshFallв Cinderscapes.
- Корректирует лимиты для ресурсоёмкой функции
-DKAF-fix.asynchronous.ClientboundCustomQueryPacket=true- Делает рукопожатие асинхронным, снижая вероятность невозможности подключиться при большом количестве установленных модов.
-DKAF-FixConfigAuto=true- Автоматически меняет некоторые параметры конфигов для совместимости.
Установка и заметки по запуску
- Начиная с
1.0.3.18мод можно запускать напрямую (функция установки всё ещё сохранена). До
1.0.3.18сначала запустите установщик мода или используйте:java -jar k_multi_threading-xxx.jar -i [пустой или каталог установки]
- Установка создаёт только
k_multi_threading-base.jarиk_multi_threading-asm.jar. - Некоторые функции могут скачивать зависимости (
Zstd-jni 1.5.7-2); если скачивание не удалось, поместите их вручную вgame_directory/lib.
Заметки о совместимости
Использование
-DKAF-FixConfigAuto=trueпозволяет автоматически отключить:Случаи, когда
-DKAF-FixConfigAuto=trueиспользовать не следует:- Возможен конфликт с
mixin.perf.cache_upgraded_structuresв ModernFix (отключите черезmixin.perf.cache_upgraded_structures=falseвconfig/modernfix-mixins.properties). - При включённом многопоточном входе ParCool (на странице указан как Parkour) может потребовать одной смерти после входа игрока, прежде чем заработает нормально.
- Ars Creo может изредка писать в лог
Modifier is already applied on this attribute!, но не крашится. - Реакторы деления NuclearCraft: Neoteric могут изредка неправильно рассчитывать охлаждение после перезапуска сервера.
- Возможен конфликт с
Команды
/debug_GetterClassFile [имя класса]- Экспортирует итоговые данные класса времени выполнения в каталог игры, формат имени файла —
timestamp_save.class.
- Экспортирует итоговые данные класса времени выполнения в каталог игры, формат имени файла —
/SetterWorldConfig [world, ClearErrorSize, RemoveRemoveErrorSize]- Настройки этой команды не сохраняются.
ClearErrorSize: очищает записанное количество «ошибок, вызвавших риск краша сервера».RemoveRemoveErrorSize: прекращает запись счётчиков риска краша и продолжает перехват.- В
world [id реестра измерения]доступны опции: setM2 [true,false]: переключает на другой режим реализации измерения; приоритет выше, чем уsetMultiThreading, но может заморозить игру.setMultiThreading [число](по умолчанию0): задаёт количество многопоточных параллельных задач для этого измерения; независимый отsetM2режим, также может заморозить игру.
Прочее
- Поскольку Minecraft и многие моды изначально рассчитаны на однопоточную работу, гарантировать полное исправление всех проблем невозможно.
Использование исходного кода
moonrise_fast_paletteиспользует исходный код из Moonrise.- Исправления совместимости для Gregicality Rocketry и Canary используют исходный код из Canary.
Частые вопросы
Как установить KAllFix?
Установите NeoForge под свою версию Minecraft, скачайте KAllFix под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть KAllFix?
У KAllFix есть сборки для Minecraft 1.19.2, 1.20.1, 1.21–1.21.1.
Нужен ли KAllFix на сервере?
Работает и в игре, и на сервере — ставьте, где нужен