# Configuration file

client {
    # Clears caches on world unload a bit faster than usual. Prevents temporary memory leaks. More effective in Anarchy. [default: true]
    B:clearCachesOnWorldUnload=true

    # Clears the baked models generated in the first pass *before* entering the second pass, instead of *after*. While this doesn't reduce memory usage in-game, it does reduce it noticeably during loading. [default: true]
    B:clearDuplicateModelRegistry=true

    # Deduplicates IModels too. Takes a few seconds more, but shaves off another bit of RAM. [default: true]
    B:deduplicateModelBakers=true

    # Deduplicates baked models. The original feature. [default: true]
    B:deduplicateModels=true

    # The maximum amount of levels of recursion for the deduplication process. Smaller values will deduplicate less data, but make the process run faster. [default: 9, range: 1-2147483647]
    I:deduplicateModelsMaxRecursion=9

    # Disables texture animations. [default: false]
    B:disableTextureAnimations=false

    # Initialize the options.txt and forge.cfg files with rendering performance-friendly defaults if not present. [default: true]
    B:initOptions=true

    # Makes vanilla creative tab search use JEI's lookups - saves a lot of RAM *and* gives you fancy JEI features! [default: true]
    B:jeiCreativeSearch=true

    # Remove unnecessary data from a pointlessly cached ModelLoader instance. [default: true]
    B:modelLoaderCleanup=true

    # Wipes the IModel cache after baking is finished. Saves a lot of RAM, as most IModels will not be reloaded. [default: true]
    B:wipeModelCache=true
}


coremod {
    # Stops certain non-Minecraft-related libraries from being ASM transformed. You shouldn't be transforming those anyway. [default: true]
    B:blacklistLibraryTransformers=true

    # Make 3D forms of items be rendered dynamically and cached when necessary. [default: true]
    B:dynamicItemModels=true

    # Optimizes ItemStack.isEmpty by removing a map lookup. Initially found by Aikar (Paper/0181). [default: true]
    B:fasterAirItemLookup=true

    # Speeds up entity lookup by optimizing ClassInheritanceMultiMap.getByClass. [default: true]
    B:fasterEntityLookup=true

    # Speeds up the hopper's calculations. [default: true]
    B:fasterHopper=true

    # Optimizes blockstate property equals and hashCode methods. [default: true]
    B:fasterPropertyComparisons=true

    # Fixes the server not removing unloaded entities/tile entities if no chunkloaders are active. Thanks to CreativeMD for finding this! [default: true]
    B:fixWorldEntityCleanup=true

    # Disables all coremod functionality. [default: false]
    B:forceDisable=false

    # The amount of ticks per player presence check for mob spawners. Set to 1 to disable the patch and match vanilla behaviour. [default: 10, range: 1-200]
    I:mobSpawnerCheckSpeed=10

    # Optimizes BlockPos mutable/immutable getters to run on the same variables, letting them be inlined and thus theoretically increasing performance. [default: true]
    B:optimizedBlockPos=true

    # Fix a bug in chunk serialization leading to crashes. Originally found and fixed by Aaron1011 of Sponge. [default: true]
    B:patchChunkSerialization=true

    # Replaces the default BlockState/ExtendedBlockState implementations with a far more memory-efficient variant. [default: true]
    B:smallPropertyStorage=true
}


debug {
    # Should FoamFix count and list baked models during deduplication, per mod? [default: false]
    B:countListBakedModels=false
}


experimental {
    # Optimizes the backing map for EntityDataManager, saving memory *and* CPU time! May cause issues, however - please test and report back! [default: false]
    B:fasterEntityDataManager=false
    B:parallelModelBaking=false

    # Unpacks all baked quads. Increases RAM usage, but might speed some things up. [default: false]
    B:unpackBakedQuads=false
}


general {
    # Enable deduplication of redundant objects in memory. [default: true]
    B:deduplicate=true
    B:patchChunkSerialization=true
}


ghostbuster {
    # Checks if worlds do not unload after a specified amount of time, and notifies the user if that is the case. [default: true]
    B:checkNonUnloadedWorldClients=true

    # The amount of time FoamFix should wait for a world to be deemed non-unloaded. [default: 60, range: 10-3600]
    I:checkNonUnloadedWorldTimeout=60

    # Wrap ChunkProviderServers to be able to provide the /ghostbuster command for debugging ghost chunkloads. [default: false]
    B:enableDebuggingWrapper=false

    # For FoamFix debugging/development purposes only. [default: false]
    B:nonUnloadedWorldsForceGCOnCheck=false

    # Should beds be prevented from ghost chunkloading? [default: true]
    B:patchBeds=true

    # Should the /ghostbuster debugger show neighbor updates? [default: false]
    B:wrapperShowsNeighborUpdates=false
}


launchwrapper {
    # Remove Launchwrapper package manifest map (which is not used anyway). [default: true]
    B:removePackageManifestMap=true

    # Weaken LaunchWrapper's byte[] resource cache to make it cleanuppable by the GC. Safe. [default: true]
    B:weakenResourceCache=true
}


textures {
    # If false, disables any patches from this category. [default: true]
    B:enable=true

    # Controls the faster animation path. 0 - disable, 2 - force enable, 1 (default) - enable on devices which have been shown to benefit from it. [default: 1, range: 0-2]
    I:fasterAnimation=1

    # The maximum amount of frames an animation can have for it to be cached. If you have a lot of VRAM, set higher. [default: 256, range: 0-2147483647]
    I:maxAnimationFramesForCache=256

    # Set to a number to disable animation updates past that mip level. -1 means update all. Higher numbers update more levels. To disable animation updates altogether, use the option for it. [default: -1, range: -1-4]
    I:maxAnimationMipLevel=-1
}


tweaks {
    # Prevent redstone from causing light updates by removing its light level. [default: false]
    B:disableRedstoneLight=false

    # Do not delay lighting updates over other types of updates. [default: false]
    B:immediateLightingUpdates=false
}


