# Configuration file

##########################################################################################################
# 00_modules
#--------------------------------------------------------------------------------------------------------#
# Toggles for all FalseTweaks modules
##########################################################################################################

00_modules {
    # Suppresses logspam coming from optifine's shader system. Makes shaderpack reloads faster.
    # [default: true]
    B:optifineLogSpamFixes=true

    # Dropped and held items are re-rendered every frame, generating a lot of
    # unnecessary CPU load because of the very inefficient way the rendering is done.
    # With this enabled, FalseTweaks will cache pre-rendered versions of items into RenderLists
    # (same things that chunks use) to minimize the amount of work done by the cpu for every single item.
    # FPS impact: Decent improvement with lots of items on ground
    # [default: true]
    B:itemRenderLists=true

    # Improves the performance of the minecraft sky mesh.
    # Also fixes the weird white lines that some OptiFine shaderpacks get with huge render distances.
    # FPS impact: Negligible gain
    # [default: true]
    B:skyMeshOptimization=true

    # Beacons also have an optimization using renderlists. If you spot any issues related to beacons,
    # you can toggle said optimization here.
    # FPS impact: Tiny improvement near beacons
    # [default: true]
    B:beaconOptimization=true

    # Enables multi-threaded chunk updating.
    # Not compatible with quad triangulation (automatically disables it if you turn this on)
    # Force-enables BSP_SORTING.
    # COMPATIBLE WITH OPTIFINE AND SHADERS
    # FPS impact: Significant FPS and world rendering speed gains. Even higher with Neodymium installed.
    # [default: true]
    B:threadedChunkUpdates=false

    # Enable/Disable texture optimizations. This includes:
    # - Multithreaded animated textures
    # - Faster texture atlas packing during startup
    # FPS impact: Reduced stuttering in heavily modded packs
    # [default: true]
    B:textureOptimizations=true

    # Wraps block renderer code and tile entity renderer code in extra opengl state guards.
    # [default: true]
    B:renderingSafety=true

    # Fixes an occasional crash that happens when trying to render a GUI block overlay (more common with optifine shaders enabled.)
    # FPS impact: Zero
    # [default: true]
    B:overlayCrashFix=true

    # Improves the mipmap system of minecraft with 2 things:
    # 1. Every tiny texture is upscaled to at least 16x16 to allow for 4 mipmap levels, even if a mod has a texture smaller than 16x16.
    # 2. Replaces the mipmap generation with a multithreaded system, which scales with the number of cores in your system.
    # FPS impact: none, but resource pack reload times (and startup time) are cut down by a lot
    # [default: true]
    B:mipmapFix=true

    # Enable an optimized, BSP-tree based vertex sorting algorithm for transparent blocks.
    # Force-enables TRIANGULATOR.
    # FPS impact: A little bit less stuttering when moving around with a lot of stained glass-like blocks around
    # [default: true]
    B:bspSorting=true

    # Fixes layering issues with particles always rendering behind water.
    # [default: true]
    B:particleTransparencyFix=true

    # Enables the Triangulator module. This also includes the ambient occlusion and smooth lighting fix,along with the block crack fix. Also provides the VertexAPI used by the BSP sorter and the threading system.
    # If you want to use those fixes without having triangulated meshes, set the ENABLE_QUAD_TRIANGULATION
    # property to false in the triangulator category.
    # FPS impact: Tiny performance decrease, but smooth lighting will look way better.
    # [default: true]
    B:triangulator=true

    # Enable/Disable item voxelization. This fixes a huge amount of item render issues, but is still
    # an experimental feature.
    # Also includes the 3D rails.
    # [default: true]
    B:voxelizer=true

    # OptiFine-style dynamic lights, but works without OptiFine
    # Force-enables CHUNK_CACHE.
    # Implicitly enabled when OptiFine is installed for compatibility.
    # See the dynamiclights config entry for more configs.
    # [default: true]
    B:dynamicLights=true

    # Gets rid of that obnoxious burst of minecart sounds when joining a world.
    # [default: true]
    B:minecartEarBlastFix=true

    # Replaces the minecraft profiler with fully custom logic (used in the Shift+F3 pie chart)
    # Also check the profiler config category!
    # FPS impact: Slightly faster profiler
    # [default: false]
    B:advancedProfiler=true

    # 3D block breaking particles
    # [default: false]
    B:cubicParticles=false

    # Optimizes the way forge scans the classpath during launch.
    # Not compatible with some badly-written mods.
    # FPS impact: None, but makes startup a bit faster
    # [default: false]
    B:startupOptimizations=false

    # Disables the Realms button on the main menu.
    # [default: true]
    B:noRealmsOnMenu=true

    # Makes translucent geometry of chunks render slightly closer to the camera. (experimental)
    # This reduces Z-Fighting on blocks which have overlapping opaque and translucent geometry,
    # at the cost of far away geometry sometimes rendering on top of opaque geometry. (>100~ blocks)
    # Don't turn this on unless you absolutely need it.
    # FPS impact: Unknown
    # [default: false]
    B:translucentBlockLayersFix=false

    # Replaces the renderer chunk cache with a more efficient version.
    # FPS impact: Faster chunk rendering
    # [default: true]
    B:fasterChunkCache=true

    # Transparent tile entities (beacons, for instance) might render behind other tile entities that are
    # actually BEHIND the transparent part. Sorting the tile entities before rendering fixes this bug.
    # FPS impact: Slight decrease
    # [default: false]
    B:tileEntityTransparencyFix=false
}


##########################################################################################################
# dynamic_lights
#--------------------------------------------------------------------------------------------------------#
# Dynamic hand and entity lights
##########################################################################################################

dynamic_lights {
    # Should items/blocks held by the player emit light?
    # [default: true]
    B:handLight=true

    # Set this to false if you want to make dynamic lights diamond-shaped, like block lights.
    # [default: true]
    B:circular=true

    # Enable/disable dynamic lights without restarting the game
    # [default: Fast, possible values: [Fast, Fancy, Disabled]]
    S:state=Fast
}


##########################################################################################################
# item_render_lists
#--------------------------------------------------------------------------------------------------------#
# Options for the item rendering optimizations
##########################################################################################################

item_render_lists {
    # The total amount of renderlists FalseTweaks may allocate for optimized item rendering.
    # When the limit is exceeded, the render list that was used the longest time ago gets released.
    # Bigger buffer sizes use more VRAM, but also get a higher average performance.
    # 256 should be good enough for most modded games, and going above 1024 is not recommended unless
    # you have a lot of VRAM.
    # FPS impact: zero when tuned right
    # [range: 64 ~ 2147483647, default: 256]
    I:maxBufferSize=256
}


##########################################################################################################
# occlusion
#--------------------------------------------------------------------------------------------------------#
# Improved chunk rendering scheduler. Also look at the threading category.
##########################################################################################################

occlusion {
    # The amount of chunks renderers to update PER SECOND. This is a MAXIMUM limit, not a minimum.
    # Every chunk has 32 chunk renderers (16 subchunks, each has 2 render passes)
    # [range: 10 ~ 10000, default: 200]
    I:chunkUpdatesPerSecond=200

    # Changes the maximum render distance.
    # NOTE: things might get extremely laggy above 32 without serverside performance mods!
    # [range: 16 ~ 64, default: 32]
    I:renderDistance=32

    # Makes sure that the clipping helper is only initialized once per frame.
    # Saves a bunch of opengl data retrieval calls and some matrix math, but might lead of weird/broken
    # culling behaviour, so this is disabled by default.
    # DO NOT REPORT BUGS IF YOU TURNED THIS ON!
    # [default: false]
    B:aggressiveClippingHelperOptimizations=false

    # The occlusion caller uses a dynamic allocation for renderlists.
    # You can set this to any value above zero, but setting it too high will eat a bit more VRAM. 4096 is
    # a decent safe point.
    # FPS impact: zero when tuned right
    # [range: 0 ~ 2147483647, default: 4096]
    I:cacheSizeTarget=4096

    # Similar to OptiFine's "Dynamic Updates" feature, where chunks load faster when you don't move the player at all.
    # [default: false]
    B:dynamicChunkUpdates=true
}


##########################################################################################################
# optifine_log_spam_fixes
#--------------------------------------------------------------------------------------------------------#
# Options to reduce the amount of logspam by OptiFine
##########################################################################################################

optifine_log_spam_fixes {
    # Suppresses "Expression already defined: ..." and "Custom uniform/variable: ..." logs.
    # [default: true]
    B:customUniforms=true

    # Suppresses "Block not found for name: ..." warnings.
    # [default: true]
    B:blockNotFound=true

    # Suppresses "Invalid block metadata: ..." and "Invalid block ID mapping: ..." warnings.
    # [default: true]
    B:invalidId=true

    # Suppresses "Ambiguous shader option: ..." warnings.
    # [default: true]
    B:ambiguousShaderOption=true
}


##########################################################################################################
# profiler
#--------------------------------------------------------------------------------------------------------#
# Improved Shift+F3 profiler
##########################################################################################################

profiler {
    # Enable this to dump the profiler data to a file when the F3 profiler is closed.
    # [default: false]
    B:dumpOnClose=false
}


##########################################################################################################
# rendering_safety
#--------------------------------------------------------------------------------------------------------#
# OpenGL state leak and crash protections
##########################################################################################################

rendering_safety {
    # Enable safety wrapper for items.
    # [default: true]
    B:item=true

    # Enable safety wrapper for inventory blocks.
    # [default: true]
    B:block=true

    # Enable safety wrapper for tile entities.
    # Buggy, don't use.
    # [default: false]
    B:tileEntity=false
}


##########################################################################################################
# threading
#--------------------------------------------------------------------------------------------------------#
# Multithreaded rendering settings. Also look at the occlusion category.
##########################################################################################################

threading {
    # Enables some extra debug info for error stacktraces.
    # EXPENSIVE! Only turn this on for debugging purposes!
    # FPS Impact: significant slowdown
    # [default: false]
    B:extraDebugInfo=false

    # Classes added here will be automatically patched to use the threaded Tessellator.
    # FalseTweaks also includes an internal hardcoded list of patched classes.
    # Use * at the end of a line for a wildcard match (useful for targeting whole packages!)
    # This patch covers most edge cases, however some implementations will still require manual patches.
    # [max length: 2147483647]
    # [max string length: 65535, default: []]
    S:tessellatorReplacementTargets <
     >

    # Patches every class with the thread safe tessellator code. Overrides TESSELLATOR_USE_REPLACEMENT_TARGETS
    # [default: true]
    B:tessellatorReplaceEverything=true

    # The number of threads to use for chunk building.
    # 1   - Recommended
    # 2-8 - For higher-end systems, with diminishing results
    # [range: 1 ~ 8, default: 1]
    I:threads=1

    # ISimpleBlockRenderingHandler classes added here will be treated as thread-safe.
    # In many cases, these classes should also be included in TESSELLATOR_USE_REPLACEMENT_TARGETS.
    # Syntax: classname:constructor
    # Examples:
    # Implicitly thread-safe (stateless):                                                 com.example.ExampleRenderer:safe
    # Default constructor (aka: new ExampleRenderer()):                                   com.example.ExampleRenderer:default!
    # Custom constructor supplied by a utility mod (creates a new instance every call):   com.example.ExampleRenderer:com.mymod.ThreadTools!createExampleRenderer
    # Custom threadlocal managed by a utility mod (returns the same instance per thread): com.example.ExampleRenderer:com.mymod.ThreadTools?threadExampleRenderer
    # All of these MUST be zero argument methods!
    # [max length: 2147483647]
    # [max string length: 65535, default: []]
    S:threadSafeBlockRenderers <
     >

    # This enabled even deeper integration with Neodymium.
    # Needs a game restart to change.
    # Only effective if Neodymium is installed.
    # WARNING: This is known to make blocks like MicroBlocks, ProjectRed wires, and Mekanism pipes flicker!
    # It might also break other mods' custom block renderers.
    # ONLY ENABLE IF YOU KNOW WHAT YOU'RE DOING, AND TURN THIS OFF BEFORE REPORTING ANY BUGS!
    # FPS Impact: Huge increase
    # [default: false]
    B:experimentalNeodymiumThreading=false

    # Disables the logging of block rendering handler registrations.
    # [default: true]
    B:logBlockRendererErrors=true

    # Speeds up the threading of block bounds, try turning this off if you get compatibility issues.
    # [default: true]
    B:fastThreadedBlockBounds=true

    # Disable this to use a slower, but more accurate thread safety check in the tessellator.
    # [default: true]
    B:fastChecks=true
}


##########################################################################################################
# translucent_block_layers_fix
#--------------------------------------------------------------------------------------------------------#
# Options for the translucent block layer fixes
##########################################################################################################

translucent_block_layers_fix {
    # The "epsilon" value used when shifting translucent block geometry closer to the camera.
    # Values too low will cause near blocks to suffer from Z-Fighting,
    # values too high will cause translucent geometry to leak through far away blocks.
    # Advanced setting.
    # FPS impact: Unknown
    # [range: 0.0 ~ 0.1, default: 0.001]
    D:epsilon=0.001

    # Runtime toggle for enabling the matrix transforms.
    # This does not affect the mixin loading, use the toggle in the modules section for that.
    # [default: true]
    B:enabled=true
}


##########################################################################################################
# triangulator
#--------------------------------------------------------------------------------------------------------#
# Miscellaneous renderer tweaks
##########################################################################################################

triangulator {
    # Used to toggle the namesake feature of this mod: quad triangulation.
    # If you turn this off, the triangulation will not execute, but you will still have the AO and the
    # smooth lighting fixes.
    # Triangulation fixes an issue with incorrectly-aligned quads causing a minor visual bug, however,
    # on weaker systems, it may noticeably decrease render performance (integrated graphics).
    # By sacrificing a bit of visual quality, you might get back a few extra FPS depending on your system.
    # FPS impact: System-dependent. Intel iGPUs struggle when this is enabled.
    # [default: false]
    B:quadTriangulation=false

    # Try setting this to true if the game crashes with a mixin conflict inside RenderBlocks.
    # FPS impact: Minor decrease
    # [default: false]
    B:renderHookCompatMode=false

    # The "epsilon" value for the block crack fix inside chunks. Set this a bit higher if you can
    # still see light leaking between solid blocks in dark areas.
    # Advanced setting.
    # FPS impact: None
    # [range: 0.0 ~ 0.005, default: 5.0E-4]
    D:blockCrackFixEpsilon=5.0E-4

    # Block corners and edges between chunks might have "cracks" in them. This option fixes it.
    # FPS impact: None
    # [default: true]
    B:fixBlockCrack=true

    # Disable the calibration chat prompt
    # [default: false]
    B:hideCalibrationPrompt=false

    # Block classes that have bugs when rendering with the crack fix can be put here to avoid manipulating them
    # .
    # [default: ["net.minecraft.block.BlockCauldron", "net.minecraft.block.BlockStairs"]]
    S:blockCrackFixBlacklist <
        net.minecraft.block.BlockCauldron
        net.minecraft.block.BlockStairs
     >
}


##########################################################################################################
# voxelizer
#--------------------------------------------------------------------------------------------------------#
# Options for the FalseTweaks 3D item renderer framework
##########################################################################################################

voxelizer {
    # Item textures to disable voxelization for. Used to fix issues with certain items.
    # This is a PREFIX check, so you can also just specify a mod ID, and all items from it will skip getting voxelized.
    # Needs a game restart to apply changes (cached for performance).
    # Syntax: modid:texturename
    # [default: ["avaritia:infinity"]]
    S:exclusionList <
        avaritia:infinity
     >

    # If set to true, the mesh compiler will print out detailed information when textures are compiled
    # into meshes.
    # [default: false]
    B:debugMeshCompilation=false

    # Classes to disable voxelization for. Used to fix issues with certain items.
    # This is an instanceof check, so superclasses are also checked.
    # Needs a game restart to apply changes (cached for performance).
    # [default: ["cofh.lib.render.IFluidOverlayItem"]]
    S:classExclusionList <
        cofh.lib.render.IFluidOverlayItem
     >

    # Extremely verbose debug logging. This will spam your log.
    # Only useful on resource pack reloads.
    # [default: false]
    B:verboseLog=false

    # The merging strategy preset to use for the voxelized mesh optimization.
    # Set this higher if you have a strong cpu and weak gpu, and set this lower if you have a weak cpu and strong gpu.
    # FPS impact: Depends on setup.
    # [default: Best_2, possible values: [Unoptimized_0, Fast_1, Best_2]]
    S:optimizationStrategy=Best_2

    # Makes rails 3-dimensional. Doesn't require game restart.
    # FPS impact: basically none
    # [default: true]
    B:rails3D=true

    # The thickness of the 3D rails. Doesn't require game restart. 1 is vanilla thickness.
    # FPS impact: basically none
    # [range: -1.7976931348623157E308 ~ 1.7976931348623157E308, default: 1.0]
    D:railThickness=1.0

    # You can use this property to fix any incorrectly detected overlays.
    # Syntax: texture_name=layer, where layer is the multiplier.
    # The default behaviour is that if the texture name ends with _overlay, its layer is set to 1,
    # This can be used to override that.
    # For reference: layer 0 is regular rendering, layer 1 is on top layer 0, layer 2 is on top of layer 1, etc.
    # Also supports negatives, but going below -1 is undefined behaviour. (-1 is used for the liquid inside potions by default)
    # [default: ["potion_overlay=-1"]]
    S:forcedLayers <
        potion_overlay=-1
     >
}


