# Configuration file

bakedquad {
    # Classes where BakedQuad::new calls need to be redirected. As of 3.2, this should be done automatically, while the changes will show in the next launch - <default: [net.minecraft.client.renderer.block.model.FaceBakery]>
    S:classesThatCallBakedQuadCtor <
        com.rwtema.extrautils2.items.ItemSnowglobe
        buildcraft.lib.client.model.MutableQuad
        lumien.randomthings.client.models.blocks.ModelCubeAll
        com.elytradev.architecture.client.render.target.RenderTargetBaked
        org.cyclops.integrateddynamics.client.model.CableModelBase
        forestry.storage.models.ModelCrate
        codechicken.lib.util.VertexDataUtils
        net.minecraft.client.renderer.block.model.FaceBakery
        lumien.randomthings.client.models.blocks.ModelCubeOverlay
        appeng.client.render.model.AutoRotatingModel
        appeng.client.render.model.ColorApplicatorBakedModel
        thaumcraft.client.lib.obj.MeshModel
        com.rwtema.extrautils2.backend.model.Box
        com.rwtema.careerbees.ProxyClient$ModelBark
        li.cil.oc.client.renderer.block.SmartBlockModelBase$class
        li.cil.oc.client.renderer.block.SmartBlockModelBase$$anonfun$bakeQuads$1
        com.rwtema.extrautils2.utils.helpers.QuadHelper
        codechicken.lib.render.buffer.BakingVertexBuffer
        org.cyclops.cyclopscore.client.model.DynamicBaseModel
        com.rwtema.extrautils2.backend.model.PassthruModelItem$4$1
        dan200.computercraft.client.render.ModelTransformer$BakedQuadBuilder
        openblocks.client.renderer.item.devnull.DevNullItemOverride
        com.jaquadro.minecraft.chameleon.render.ChamRenderLL
     >

    # Classes that extend BakedQuad need to be handled separately. This should be done automatically, while the changes will show in the next launch - <default: []>
    S:classesThatExtendBakedQuad <
        
     >

    # Log classes that need their BakedQuad::new calls redirected - <default: true>
    B:logClassesThatCallBakedQuadCtor=true

    # Allows bucket models to re-use UnpackedBakedQuads - <default: true>
    B:reuseBucketQuads=true

    # Saves RAM by removing BakedQuad instance variables, redirecting BakedQuad creation to specific BakedQuad child classes. This will be forcefully turned off when Optifine is installed as it is incompatible - <default: true>
    B:squashBakedQuads=true
}


canonicalization {
    # Deduplicate ASMData related Strings - <default: true>
    B:asmDataStringCanonicalization=true

    # Deduplicate Java's FilePermission cache's names within SecureClassLoader - <default: true>
    B:filePermissionsCacheCanonicalization=true

    # Deduplicate LockCode when reading from NBT - <default: true>
    B:lockCodeCanonicalization=true

    # Deduplicate Model Conditions. Enable this if you do not have Foamfix installed - <default: false>
    B:modelConditionCanonicalization=false

    # Deduplicate String keys in NBTTagCompound - <default: true>
    B:nbtBackingMapStringCanonicalization=true

    # Deduplicate Strings in NBTTagString - <default: true>
    B:nbtTagStringBackingStringCanonicalization=true

    # Deduplicate package strings when Forge gathers them when mod candidates are loaded - <default: true>
    B:packageStringCanonicalization=true

    # Deduplicate ResourceLocation and ModelResourceLocation instances - <default: true>
    B:resourceLocationCanonicalization=true

    # Deduplicate TextureAtlasSprite's names - <default: true>
    B:spriteNameCanonicalization=true

    # EXPERIMENTAL: Deduplicate BakedQuad's Vertex Data array. If you see any artifacting in-game, turn this off and report it on github - <default: true>
    B:vertexDataCanonicalization=true
}


capability {
    # Delays ItemStack's capabilities from being initialized until they needed to be - <default: true>
    B:delayItemStackCapabilityInit=true

    # Fixes Astral Sorcery applying AmuletHolderCapability to large amount of ItemStacks when it isn't needed. This option will be ignored when Astral Sorcery isn't installed - <default: true>
    B:fixAmuletHolderCapability=true
}


datastructures {
    # Improve hashing performances of various objects - <default: true>
    B:efficientHashing=true

    # Clears and trims ModelManager data structures after models are loaded and baked - <default: true>
    B:moreModelManagerCleanup=true

    # Optimizing FurnaceRecipes. FastFurnace will see very little benefit when this option is turned on - <default: true>
    B:optimizeFurnaceRecipeStore=true

    # Optimize NBTTagCompound's backing map structure - <default: true>
    B:optimizeNBTTagCompoundBackingMap=true

    # Optimizes registries - <default: true>
    B:optimizeRegistries=true

    # EXPERIMENTAL: Strips ItemStack of some of its fields as it stores some near-useless references - <default: true>
    B:stripNearUselessItemStackFields=true
}


events {
    # [EXPERIMENTAL]: Stops mass object creation when Forge is firing events, this can decrease Garbage Collection pressure - <default: false>
    B:makeEventsSingletons=false
}


forgefixes {
    # Fixes Forge's EntityEntry calling a slow Constructor::newInstance call every time an entity spawns, it is replaced with a fast Function::get generated from LambdaMetafactory#metafactory - <default: true>
    B:fasterEntitySpawnPreparation=true

    # Fixes Forge's mistake of annotating FillBucketEvent#getFilledBucket as @Nonnull when the contract isn't fulfilled nor checked. First discovered here: https://github.com/Divine-Journey-2/main/issues/295 - <default: true>
    B:fixFillBucketEventNullPointerException=true

    # Fixes a vanilla-forge code interaction bug leading to a possible ConcurrentModificationException/StackOverflowError crash. First discovered here: https://github.com/GregTechCE/GregTech/issues/1256 - <default: true>
    B:fixTileEntityOnLoadCME=true

    # EXPERIMENTAL: Forcibly remove Forge's FMLSecurityManager that adds very very slight overheads in calls that requires permission checks - <default: false>
    B:removeForgeSecurityManager=false
}


furnace {
    # When optimizeFurnaceRecipeStore is true, experience is determined by who registers the entry first, this is also the fallback option if all three options aren't true - <default: true>
    B:furnaceExperienceFCFS=true

    # When optimizeFurnaceRecipeStore is true, experience is determined by whichever entry gives the most experience - <default: false>
    B:furnaceExperienceMost=false

    # When optimizeFurnaceRecipeStore is true, experience is determined the vanilla way, this method is the most inefficient and random - <default: false>
    B:furnaceExperienceVanilla=false
}


launchwrapper {
    # Invalidate and clean cache entries when the game finishes loading (onto the main screen). Loading into the first world may take longer. This option wouldn't do anything if 'cleanupLaunchClassLoaderLate' is 'true' - <default: false>
    B:cleanCachesOnGameLoad=false

    # Cleanup some redundant data structures in LaunchClassLoader at the earliest point possible (when LoliASM is loaded). Helpful for those that don't have enough RAM to load into the game. This can induce slowdowns while loading the game in exchange for more available RAM - <default: false>
    B:cleanupLaunchClassLoaderEarly=false

    # Cleanup some redundant data structures in LaunchClassLoader at the latest point possible (when the game reaches the Main Screen). This is for those that have enough RAM to load the game and do not want any slowdowns while loading. Note: if 'cleanupLaunchClassLoaderEarly' is 'true', this option will be ignored - <default: true>
    B:cleanupLaunchClassLoaderLate=true

    # Disable the unusused Package Manifest map. This option coincides with Foamfix's 'removePackageManifestMap' option - <default: true>
    B:disablePackageManifestMap=true

    # Disabling caching of classes. This will induce major slowdowns to game/world loads in exchange for more available RAM - <default: false>
    B:noClassCache=false

    # Disabling caching of resources (Class Bytes). This will induce slowdowns to game/world loads in exchange for more available RAM - <default: false>
    B:noResourceCache=false

    # Weaken the caching of classes. This allows the GC to free up more space when the caches are no longer needed. If 'noClassCache' is 'true', this option will be ignored - <default: true>
    B:weakClassCache=true

    # Weaken the caching of resources (Class Bytes). This allows the GC to free up more space when the caches are no longer needed. If 'noResourceCache' is 'true', this option will be ignored. This option coincides with Foamfix's 'weakenResourceCache' option - <default: true>
    B:weakResourceCache=true
}


misc {
    # [W.I.P] - EXPERIMENTAL: Yet another attempt at caching classes between loads - <default: false>
    B:classCaching=false

    # Copy image after screenshotting to clipboard - <default: false>
    B:copyScreenshotToClipboard=false

    # Optimizes FluidRegistry::enableUniversalBucket check - <default: true>
    B:quickerEnableUniversalBucketCheck=true

    # For some reason Mojang decided to cache int buffers and arrays after a screenshot is taken, this makes sure they're never cached - <default: true>
    B:releaseScreenshotCache=true

    # Strips the boring instanced Random object from SoundEventAccessors and uses ThreadLocalRandom instead - <default: true>
    B:stripInstancedRandomFromSoundEventAccessor=true
}


modfixes {
    # When Better with Mods is installed, optimize Blasting Oil related events. The original implementation harms server performance at any given moment. This option will be ignored when Better with Mods isn't installed - <default: true>
    B:bwmBlastingOilOptimization=true

    # EXPERIMENTAL: When ChickenASM (Library of CodeChickenLib and co.) is installed, ClassHierarchyManager can cache a lot of Strings and seem to be unused in any transformation purposes. This clears ClassHierarchyManager of those redundant strings. This option will be ignored when ChickenASM isn't installed - <default: true>
    B:cleanupChickenASMClassHierarchyManager=true

    # When Extra Utilities 2 is installed, disable the crafter's rendering of the item being crafted, this can reduce lag, ignores fixXU2CrafterCrash config option - <default: false>
    B:disableXU2CrafterRendering=false

    # When Immersive Engineering is installed, sometimes it or it's addons can induce an ArrayIndexOutOfBoundsException in BlockIEBase#getPushReaction. This option will be ignored when IE isn't installed - <default: true>
    B:fixBlockIEBaseArrayIndexOutOfBoundsException=true

    # When TerraFirmaCraft is installed, fix the falling block's false starting position  - <default: true>
    B:fixTFCFallingBlockFalseStartingTEPos=true

    # When Extra Utilities 2 is installed, fix and optimize mechanical crafter's rendering - <default: true>
    B:fixXU2CrafterCrash=true

    # When Just Enough Items is installed, it deduplicates strings in the generated generalized suffix trees' edge labels. This option will be ignored when Just Enough Items isn't installed - <default: true>
    B:labelCanonicalization=true

    # Optimizes Astral Sorcery's Resplendent Prism related functions. This option will be ignored when Astral Sorcery isn't installed - <default: true>
    B:optimizeAmuletRelatedFunctions=true

    # When Electroblob's Wizardry is installed, optimize the search for arcane locked tile entities to render - <default: true>
    B:optimizeArcaneLockRendering=true

    # When QMD is installed, optimize its BeamRenderer. The original implementation harms client performance heavily (takes ~5% of each tick time). This option will be ignored when QMD isn't installed - <default: true>
    B:optimizeQMDBeamRenderer=true

    # When EvilCraft Compat + EnderIO is installed, repair the compatibility module - <default: true>
    B:repairEvilCraftEIOCompat=true

    # When CraftTweaker is installed, large modpacks tend to stall in the last stage of loading, when CraftTweaker inexplicably recalculates search trees. This option will be ignored when CraftTweaker isn't installed - <default: true>
    B:skipCraftTweakerRecalculatingSearchTrees=true
}


remapper {
    # Optimizing Forge's Remapper for not storing redundant entries - <default: true>
    B:optimizeFMLRemapper=true
}


rendering {
    # Optimizes some rendering features, not game-breaking; however, negligible at times - <default: true>
    B:optimizeSomeRendering=true

    # Strip unnecessary locals in RenderHelper::enableStandardItemLighting, no idea why it's there - <default: true>
    B:stripUnnecessaryLocalsInRenderHelper=true
}


spark {
    # Allow LoliASM's Spark profiling to include all threads that are present - <default: true>
    B:includeAllThreadsWhenProfiling=true

    # When Spark is installed, profile the loading of FMLConstructionEvent stage - <default: false>
    B:sparkProfileConstructionStage=false

    # When Spark is installed, profile the loading of coremods, but only those that load after LoliASM - <default: false>
    B:sparkProfileCoreModLoading=false

    # When Spark is installed, profile the loading of the game in its entirety - <default: false>
    B:sparkProfileEntireGameLoad=false

    # When Spark is installed, profile the loading of the world in its entirety - <default: false>
    B:sparkProfileEntireWorldLoad=false

    # When Spark is installed, profile the loading of FMLModIdMappingEvent stage, this is the last event fired before the game is finalized - <default: false>
    B:sparkProfileFinalizingStage=false

    # When Spark is installed, profile the loading of FMLInitializationEvent stage - <default: false>
    B:sparkProfileInitializationStage=false

    # When Spark is installed, profile the loading of FMLLoadCompleteEvent stage - <default: false>
    B:sparkProfileLoadCompleteStage=false

    # When Spark is installed, profile the loading of FMLPostInitializationEvent stage - <default: false>
    B:sparkProfilePostInitializationStage=false

    # When Spark is installed, profile the loading of FMLPreInitializationEvent stage - <default: false>
    B:sparkProfilePreInitializationStage=false

    # When Spark is installed, profile the loading of FMLServerAboutToStartEvent stage - <default: false>
    B:sparkProfileWorldAboutToStartStage=false

    # When Spark is installed, profile the loading of FMLServerStartedEvent stage - <default: false>
    B:sparkProfileWorldStartedStage=false

    # When Spark is installed, profile the loading of FMLServerStartingEvent stage - <default: false>
    B:sparkProfileWorldStartingStage=false

    # When Spark is installed, summarize the heap space (/spark heapsummary) when the game finishes loading - <default: false>
    B:sparkSummarizeHeapSpaceAfterGameLoads=false

    # When Spark is installed, summarize the heap space (/spark heapsummary) when the world finishes loading - <default: false>
    B:sparkSummarizeHeapSpaceAfterWorldLoads=false
}


textures {
    # Releases TextureAtlasSprite's framesTextureData. Won't touch custom TextureAtlasSprite implementations - <default: true>
    B:releaseSpriteFramesCache=true
}


