Capability Fix

Capability Fix

116 Downloads

This mod improves one key part of lags in 1.20.1 Forge/NeoForge: Capability fetching on entities. The implementation used on 1.20.1 searches across all capability providers to find one capability on one entity. This is extremely inefficient when there are many mods adding capability providers.

The approach this mod takes is to have a whitelist of capabilities to be cached. It stores a cache of capabilities on every entity. Capabilities that are whitelisted will be cached when it's fetched the first time and later it will not go through the list of capability providers but fetched from the cache directly.

This method is safe only for capabilities that is available on entities since its first fetch and never removed or re-attached later. One example would be Curios API's capability. Thus, this mod is whitelist-based by default. You can take the risk and make it apply to all capabilities on entities via config, or manually add all capabilities to the whitelist in config. By default, only Curios API's capability is in the whitelist.

You are recommended to use this mod only when you confirmed with spark that capability fetch on entity costs at least 4% of server mspt. This mod fully deployed would reduce capability fetching cost by 75%, tested on a modpack which original capability fetching cost is 8% of server mspt.

The correct way to use this mod is:

  • After the game runs a while, run /capabilityfix gather_others. It will tell you how many times each capability is fetched.
  • Open your latest.log and find that chat message. Copy the capability ID into your config capabilityfix-common.toml.
  • Run /capabilityfix reload_config ingame to apply the whitelist.
  • Test functionalities related to that capability to see if it would cause any bug. If it does, remove it from the whitelist.