▶️ ЗАБЕРИ СВОИ 8 ПОДАРКОВ 🎁 ПРИ СОЗДАНИИ СВОЕГО МАЙНКРАФТ СЕРВЕРА
Моды/KAllFix
KAllFix

KAllFix

Optimization and multithreading written by n1luik

5.1K
20

Overview

  • This project is used to fix and optimize issues caused by other mods, and it works on servers.
  • The project contains two main parts: k_all_fix and k_multi_threading, with features mainly controlled by JVM parameters.
  • No regular config file is provided; configuration is mainly done through startup parameters.
  • Client-side usage is supported from 1.0.4.0 onward (requires JVM parameter -DKMT_Client=true).
  • Under a multi-mod and single-threaded baseline environment, cause no issues is not guaranteed, but you could create an ISSUE on Github and the author will fix it quickly.
  • With some mod combinations, clients may still need to install this mod even if it has no visible effect.

Features and Use Cases

Optimizations

Fixes

Multithreading

Introduction

  • Multithreading supports includes block ticks, block entity ticks, entities, dimensions, player packet receiving (manual toggle, client-only), and player login (manual toggle), and also fixes some problematic single-threaded mods by applying multithreading.
  • Multithreading is enabled by default on the server side.
  • In multithreaded scenarios, thread-pool interception or limit-exceeded errors may appear, but they usually do not crash the server.
  • It is recommended to manually set -DKMT-threadMax=[CPU thread count]; otherwise world generation may be frozen. If freezes still occurs after setting it, increase the value higher.
  • Before 1.0.4.0, clients cannot use multithreading; from 1.0.4.0 onward, clients can enable it via -DKMT_Client=true.
  • After 1.0.3.3, ParaServerChunkProvider, TaskRun, and some chunk generation code depend more heavily on C2 compilation (the JVM will enter C2 automatically after running for a while).
  • In Windows Server 2022 Datacenter 21H2 20348.3091 (author's environment), rare thread scheduling anomalies may occur and causes abnormally high CPU usage; the solution is to restart the server.

Related JVM Parameters

  • -DKMT-threadMax=[number]
    • Sets thread-pool thread count.
  • -DKMT-callMax=[number]
    • Sets the default maximum number of threads that multithreaded tasks may use.
  • -DKMT-ThreadpoolKeepAliveTime=[milliseconds]
    • Sets how long idle threads are kept before recycling.
  • -DKMT_D=[any characters]
    • Disables multithreading.
  • -DKMT-OpenVanillaServerChunkCache=true
    • Forces the vanilla ServerChunkCache fix path (added in 1.0.5.3).

JVM Parameter Overview (all retained)

Basic and General

  • -DKAllFix_D=[any characters]
    • Disables KAllFix.
  • -DKMT_Client=true
    • Enables multithreading-related features on the client side (1.0.4.0+).
  • -DKAF-DisablePetrolpark=false

Connection and Timeout

  • -DKAF-ClientboundKeepAlivePacket_Max=[milliseconds]
    • Changes the timing requirement for ClientboundKeepAlivePacket (default 15 seconds; vanilla must be <30 seconds or the player is kicked for timeout).
  • -DKAF-ServerTimeout=[seconds]
    • Sets server connection timeout.
    • May be ineffective in some cases (both parameters are needed because Forge's forge.readTimeout only covers server packet-read timeout, not client/server network threads with players).
  • -Dforge.readTimeout=[seconds]
    • Forge packet-read timeout parameter (used together with the previous parameter).

Mixin / NBT / Auto Command

  • -DKAF-RemoveMixin:[class name]
    • Disables a specified mixin (k_multi_threading mixins can also be disabled).
  • -DKAF-NbtIoMixin_NotGZip=true
    • Adds try-catch to NBT IO for non-gzip scenarios (unsafe; requires commons-compress in the environment).
  • -DKMT-ChunkGeneratorMode2Start=[true,false]
    • Automatically runs: /SetterWorldConfig world setM2 %%KMT-ChunkGeneratorMode2Start%%.

Breeding Control

  • -DKAF-ChunkBreedingControlSize=[number]
    • Disables breeding when chunk entity count exceeds the given value; disabled if the parameter is missing / not a numeric array / empty.
  • -DKAF-ChunkBreedingControlSizeEnable=[true,false]
    • Internal cache switch for detection results; manual setting may be overridden by the program.

Optional Features

  • -DKMT-SafeUnloadChunk=true
    • Enables chunk unload in chunk-generation threads (recommended only for <1.0.4.2 when related freezes occur).
  • -DIndependencePlayer=true
    • Enables asynchronous player handling (likely provides little to no optimization).
  • -DFixBiolithBugMode2=true
    • Attempts to fix most Biolith compatibility issues (may introduce major bugs).
  • -DKAF-gtceu.MedicalConditionTrackerMixin=true
    • Disables radiation in GTM.
  • -DKAF-RemoveClientboundKeepAlivePacket=true
    • Disables vanilla ClientboundKeepAlivePacket (ping can no longer be calculated).
  • -DKAF-RemoveFlyingTest=true
    • Removes flight checks.
  • -DKAF-moonrise_fast_palette=true
    • Disable the fast_palette feature from Moonrise.
  • -DKAF-FixTFMGDestroy=true
    • Fixes compatibility between Destroy and Create (Creative Pump cannot properly connect to Create's pipes).
  • -DKAF-Fix_fabric-object-builder-api.jar=true
    • Fixes compatibility between Sinytra Connector's fabric-object-builder-api and forge-47.3.27.
  • -DKAF-FixAllPacket=true

Login Multithreading

  • -DKMT-LoginMultiThreading=true
    • Enables multithreaded login.
  • -DKMT-LoginMultiThreading.ConnectionLock=true
    • Waits for async execution completion at tick end (disabling may improve performance somewhat, but lowers login stability and may crash).
  • -DKMT-LoginMultiThreading.TaskSizeMax=[number]
    • Limits the number of concurrent login tasks (default 8).
  • Login multithreading may cause the server to receive ServerboundMovePlayerPacket early, leading to one error log.

Packet Optimization

  • -DKAF-packetOptimize=true
    • Optimizes some vanilla packets (must be enabled on both client and server).
  • -DKAF-packetOptimize.AttributesReOutputTime=[milliseconds]
    • Sets forced resend interval for attribute-related data (default 2 minutes).
  • -DKAF-packetOptimize.CompatibilityMode.ClientboundBlockEntityDataPacket=true
    • Uses more conservative compression for ClientboundBlockEntityDataPacket (impacts performance).
  • -DKAF-packetOptimize.CompatibilityMode.ClientboundSectionBlocksUpdatePacket=true
    • Uses more conservative compression for ClientboundSectionBlocksUpdatePacket.

Others

  • -DKAF-UnsafeCinderscapesFix1=true
    • Adjusts limits for the high-overhead enableAshFall function in Cinderscapes.
  • -DKAF-fix.asynchronous.ClientboundCustomQueryPacket=true
    • Makes handshake asynchronous, reducing the chance of being unable to join when too many mods are installed.
  • -DKAF-FixConfigAuto=true
    • Automatically changes some config options for compatibility.

Installation and Runtime Notes

  • From 1.0.3.18, it can run directly (installation feature is still kept).
  • Before 1.0.3.18, run the mod's installer first, or use:
    • java -jar k_multi_threading-xxx.jar -i [empty or install directory]
  • Installation only generates k_multi_threading-base.jar and k_multi_threading-asm.jar.
  • Some features may download dependencies (Zstd-jni 1.5.7-2); if download fails, place them manually in game_directory/lib.

Compatibility Notes

  • Using -DKAF-FixConfigAuto=true can automatically disable:
    • logOffthreadEntityAdd in Cupboard.
    • world.tick_scheduler and entity_by_type in Canary / Lithium (you must manually add mixin.world.tick_scheduler=false in config/canary.properties or config/lithium.properties; otherwise these mod will override the multithread fix for ClassInstanceMultiMap).
  • Cases where -DKAF-FixConfigAuto=true should not be used:
    • Possible conflict with mixin.perf.cache_upgraded_structures in ModernFix (disable via mixin.perf.cache_upgraded_structures=false in config/modernfix-mixins.properties).
    • With login multithreading enabled, ParCool (listed as Parkour on page) may require one death after player joining before working normally.
    • Ars Creo may rarely log Modifier is already applied on this attribute!, but will not crash.
    • NuclearCraft: Neoteric fission reactors may rarely calculate cooling incorrectly after server restart.

Commands

  • /debug_GetterClassFile [class name]

    • Exports final runtime class data to the game directory, with filename format timestamp_save.class.
  • /SetterWorldConfig [world, ClearErrorSize, RemoveRemoveErrorSize]

    • Settings from this command are not persistent.
    • ClearErrorSize: clears the recorded count of “errors that caused server crash risk”.
    • RemoveRemoveErrorSize: stops recording crash-risk counts and keeps intercepting.
    • Under world [dimension registry id], available options:
      • setM2 [true,false]: switches to another dimension implementation mode; higher priority than setMultiThreading, but may freeze the game.
      • setMultiThreading [number] (default 0): sets multithread parallel task count for this dimension; independent mode from setM2, and may also freeze the game.

Others

  • Because Minecraft and many mods are fundamentally designed around single-threaded behavior, complete fixes for all issues cannot be guaranteed.

Source Code Usage

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

Minecraft: Java Edition

1.20.x1.19.x

Платформы

Поддерживаемые окружения

Клиент и сервер

Детали

Лицензия:GPL-2.0-only
Опубликован:11 месяцев назад
Обновлён:1 месяц назад
Главная