Skip to content

Configuration

github-actions[bot] edited this page Nov 8, 2026 · 26 revisions

Configuration

Back to Home.

Settings live in config/legacyconnector.properties, written with defaults and comments on first start.

In game they can be edited from Mods -> Legacy Connector -> Config: a toggle or text box per setting, the file's comment as the tooltip. Done writes the file; most settings (and everything marked "read by the loader at startup") apply after a restart. Legacy mods' own key bindings are listed in Options -> Controls -> Key Binds under their category,. Buttons that legacy mods add to the game's own screens (Options, Video Settings, Controls, Sounds, Pause, Main Menu) through GuiScreenEvent.InitGuiEvent become real widgets of those screens: the handler sees the screen's own buttons as GuiButtons (it can place its button beside "Mods", move or remove vanilla ones), a button that lands on a vanilla one is moved to the nearest free spot, and a click runs ActionPerformedEvent (1.7.10 and 1.12.2; 1.6.4 and older follow 1.7.10). Legacy mods with a config GUI (guiFactory) get the Config button in the mod list.

Key Default Effect
mods.skip empty Comma separated legacy mod ids to leave out entirely; a jar is skipped when all of its mods are listed (it is reported as switched off in logs/legacyconnector-report.txt). Read by the loader at startup
mods.alias.<id> none Treat a legacy dependency on <id> as satisfied by another id (load ordering and the generated mod metadata), one line per id, e.g. mods.alias.oldname = newname for a renamed mod or a library provided under another id
bridges.<name>.enabled true Library bridges (baubles, waila, nei, cofhEnergy, patchouli): false loads the legacy library itself instead of replacing it with its modern equivalent (see Bridges). bridges.patchouli.enabled covers the 1.12.2 Patchouli API and the conversion of legacy mods' books for the modern Patchouli (details). Read by the loader at startup
oreBackgrounds.enabled true Replace the old stone/netherrack/end stone behind legacy ore textures
oreBackgrounds.stone, .netherrack, .endStone stone, netherrack, end_stone Vanilla block texture used instead (e.g. deepslate, tuff), or legacy to keep the old rock
modernizeTextures true Replace old vanilla art inside legacy mod textures with the modern vanilla textures: exact copies of old block, item and GUI textures of Beta 1.7.3, 1.4.7, 1.5.2, 1.6.4, 1.7.10 and 1.12.2, and old backgrounds (smooth stone, cobblestone, planks, bricks, ...) mods painted their art on (recognised from fingerprints, the mod's own art stays)
textures.modernLeaves true Rebuild legacy leaf textures that recolour the old vanilla oak/spruce/jungle leaves (most mod trees) from the modern vanilla leaves, in the mod's colours; fast (opaque) variants too. Berries, flowers and fruit the mod drew stay; hand-drawn and animated leaves are left alone (see Rendering, "Modern leaves")
deepLayer.enabled true Spread legacy ores down to the bottom of the world: generators run a second time shifted below y=0, and the ores of the band both runs cover are split between them, so the total stays the original mod's (as one placed feature per generator, <modid>:legacy_worldgen_deep/<generator class>; false generates none, see World generation)
deepLayer.excludeGenerators empty Comma separated generator class prefixes that must not run below y=0 (their deep feature is not generated)
blocks.flattenSubtypes true Legacy block subtypes become blocks of their own, as in the 1.13 flattening: the item mod:name_3 places and names the block mod:name_3, so modern mods that use an item's block (display stands, framed and copycat blocks) get the right subtype. false: one block per legacy block as before; the subtype blocks stay registered and their blocks in saved worlds turn back into the base block when the chunk loads (see Bridges)
structures.locatable true What legacy world generators build in place (shrines, towers, huts) is recorded as a modern structure start where it is built, so /locate structure <mod>:legacy/<name> finds it in chunks that have generated (see World generation); false records nothing
villagers.jobSites (empty) Job site blocks for the villager professions of 1.7.10 mods, <profession id>=<block id>,... (for example 86=minecraft:ender_chest). 1.7.10 professions declare no block, so a modded villager has none by default (it keeps its profession through its experience but does not work at a job site). The block must not be another profession's job site
villages.legacyBuildings true Legacy mods' village buildings join the vanilla village house pools (with their 1.7.10 share); false leaves villages vanilla
compat.rocketnautics.plasmaEveryTicks 4 Rocketnautics (Create Aeronautics) rebuilds its star plasma sky texture every tick even with its custom sky off (about 11% of frame time); it is rebuilt every N ticks instead. 1 restores the original
legacyBiomeFrequency 1.0 Scales how much land legacy mod biomes (Thaumcraft's Magical Forest...) take in the overworld: the weight of their TerraBlender region and their share of the vanilla biome they replace. 1.0 is about their 1.7.10 share, 0.5 half, 0 none in new chunks
perf.lazyPackMetadata true The generated legacy data and asset packs build no content when the game opens them only to read their metadata (once per pack scan; every scan built all files). See Performance
perf.biomeJarCache true The vanilla biome templates and biome tags that legacy biomes are generated from are read from the game's jars once per session, not on every data pack build. See Performance
perf.asyncBiomeSample true The "Biome sample around spawn" log line (1089 biome lookups after the server started) is computed in the background, not on the server thread the joining player waits for
compat.auroras.irisPackCheck true Auroras (not a legacy mod) draws its auroras after the terrain, without a depth test, whenever Iris's enableShaders option is on, even when no shader pack is in use: they covered the terrain (the green/purple band in the End). With this on it asks Iris whether a pack is really in use, so without one the auroras are drawn in the sky as intended
render.irisCompat true While an Iris shader pack is in use, legacy rendering adapts to it: sky renderers, particles and additive glows draw with the shaders Iris has programs for (sky, particles, beacon beam) instead of the entity ones, overlays, lines and glows are left out of the shadow pass and particles spawned by renderers there are dropped. Without a pack nothing changes. See Rendering
events.skip empty Comma separated legacy event handlers that are not registered, as full.ClassName#method or full.ClassName#* (to find which legacy handler draws or does something unwanted)

| energy.fePerEu | 4 | FE per IC2 EU for IC2 sinks, sources and electric items exposed as NeoForge energy | | energy.fePerMj | 10 | FE per BuildCraft MJ for BuildCraft power receptors (BuildCraft's own 1 MJ = 10 RF) | | energy.fePerEu.in, energy.fePerEu.out | energy.fePerEu | Per direction rate for IC2 EU: .in = FE received by a legacy tile or item (modern cables and generators powering legacy machines), .out = FE extracted from one (legacy generators feeding modern cables). 0 turns that direction off. Stored/capacity readouts keep using energy.fePerEu | | energy.fePerMj.in, energy.fePerMj.out | energy.fePerMj | The same per direction rates for BuildCraft MJ (BuildCraft tiles are receive only, so .out has nothing to switch today) | | perf.staticTileEntities | true | Legacy tile entities that never ticked in their version (1.7.10: canUpdate() false or no updateEntity(); 1.12.2: not ITickable; or crashed while ticking) get no modern ticker | | perf.blockLookupCache | true | The legacy block of a modern block and the 1.7.10 metadata of a vanilla state are kept on the block and the state (no lock per legacy block read) | | perf.itemLookupCache | true | The 1.7.10 item of a vanilla or modern-mod item is kept on the item (no map lookup per legacy stack view) | | perf.worldViewCache | true | The 1.7.10 world view of a level is kept on the level (no synchronized map lookup per legacy callback) | | perf.entityViewCache | true | The 1.7.10 view of an entity is kept on the entity (no weak map lookup per legacy event or callback) | | perf.reuseBlockPos | true | 1.7.10 getBlock/getBlockMetadata read with one mutable position per thread instead of a new BlockPos per call | | perf.hookOverrideCache | true | "Does this legacy entity class override hook X" is answered per class without building a key or lambda per call |

The perf.* switches are read once at startup; each turns one tick optimization off if it ever misbehaves. They are all on by default because each keeps 1.7.10/1.12.2 behaviour; see Performance.

Memory switches (perf.*, see Performance); each can be turned off on its own:

Key Default Effect
perf.releaseUnloadedLevels true Legacy views of a level (World, GameRules, MapStorage, chunk tickets, entity and tile views) are released when it unloads, those of a server (MinecraftServer, Scoreboard, 1.12 GameRules) when it has stopped
perf.sweepRemovedPlayers true Views of players removed for good (the old player object after a death and respawn, a player that logged out) are swept, after two sweeps in a row
perf.sweepDeadViews true Views of closed connections (1.7.10 NetworkManager), of legacy inventories whose block entity was removed or unloaded, and 1.12.2 views of the game's block entities are swept
perf.weakStackViews1122 false 1.12.2 item stack views without capabilities are held weakly, so a stack nobody holds is collected with its view
experimental.forge1201 true Forge 1.20.1 mods (jars with mods.toml) are remapped in place and loaded as NeoForge mods. Alpha: some mods work, most still have unresolved references (see the estimate); on by default (nothing happens unless a Forge 1.20.1 jar is installed); set to false and such jars are left alone
experimental.forge1201.softlink true Soft link for Forge 1.20.1 mods: a reference to a Minecraft 1.21.1 or NeoForge class, method or field that does not exist (removed or changed since 1.20.1) no longer keeps the mod from loading. It becomes a stand-in: a call throws an UnsupportedOperationException naming the symbol when (and only when) it runs, a field read gives the default value, an unavailable class used as a supertype is dropped. Every stand-in is listed in the translation report as Soft link: ...; such a mod is "loads" at best, never "works". Symbols that resolve are never touched. false restores the strict behaviour (see the estimate)
experimental.sideBySideLibraries true Side-by-side libraries (Bridges): a legacy library that clashes with a native NeoForge 1.21.1 jar of the same mod id whose API cannot be bridged (Citadel) or with another legacy version's copy (CodeChickenLib 1.7.10 and 1.12.2) is loaded as an isolated unit instead of being skipped: own mod id (citadel_l1201), packages relocated in the library and its dependents of the same version, own mixin config names. experimental.forge1201.sideBySideLibraries is an alias. false skips such copies as before
experimental.sideBySideLibraries.include / .exclude empty Per-library override, comma separated mod ids: include also isolates a library that would be bridged to the native build, exclude never isolates it (it is then bridged or skipped with a report line)
legacy.autoSortMods true Legacy mods (jars and zips of Minecraft 1.4.7, 1.5.2, 1.6.4, 1.7.10, 1.12.2, Beta 1.7.3 and Forge 1.20.1) found directly in mods/ are moved into the folder named after their Minecraft version (mods/1.7.10/, mods/1.12.2/, mods/b1.7.3/, ...) on launch, so the mods folder stays clean and bug reports show which version a mod is for. A mod whose folder already holds a file of that name, or that cannot be moved, is loaded from where it is. Set to false to leave them in mods/
perf.releaseLoaderData true The loader drops its translation tables (legacy hierarchy, methods, fields, MCP names, library class infos) after mod discovery (read by the loader at startup)
perf.cullLegacyParticles true Legacy particles drawn by the built-in particle classes are skipped outside the view (pixel-identical)
perf.cullModParticles false The same for particles mods draw themselves (a beam reaching into the view from outside could vanish)
perf.particleSetting true 1.7.10's particleSetting follows the vanilla particle option, so mods spawn fewer particles on Decreased/Minimal as in 1.7.10
perf.shareBlockModels true Metadata values of a legacy block with identical generated models share one model file and one baked model
perf.shareItemModels true Legacy items with identical generated item models keep one baked model (off by itself with ModernFix)
perf.packSpill true Generated pack files move from the heap to one scratch file under .legacyconnector/pack-spill once read
perf.cacheTextureLocations true A legacy mod texture location remembers the modern location it binds

See Performance for what each perf.* switch saves.

Ores (full blocks whose name has ore as a word) get a hidden <name>_deepslate twin automatically: the same legacy block (drops, hardness, behaviour) with its stone background replaced by deepslate. Where a generator places an ore into deepslate (the deep layer, and the deepslate band just above y=0) the twin is placed instead. Ores with tile entities are not duplicated. The ore texture of the normal block can also sit on a deepslate background (oreBackgrounds.stone=deepslate).

Clone this wiki locally