Retromod 1.3.0-snapshot.7 (NeoForge 1.21.9)
Curse Maven Snippet
What's new
Seventh snapshot of the 1.3.0 line.
Fixed
- Refmap-only target changes can now repair parameter-capturing Mixin handlers. Some Fabric mixins keep a Yarn source name in their annotation and rely on the refmap to locate the intermediary target. Snapshot.6 could update that refmap target, but the later class pass could not connect the source selector to the proven current method, so a handler that captured the old parameters stayed incompatible. The refmap pass now carries a uniquely proven target parameter addition into the matching class repair. Retromod inserts the unused parameters into the handler while leaving its source selector intact for Mixin to resolve through the refmap. Ambiguous targets,
remap = false, unsafe parameter annotations, staticness mismatches, and owner mismatches are left unchanged. The shared repair context reaches runtime transforms, the CLI, normal and full AOT, and mixins in nested jars. - MixinExtras value modifiers can now keep complete target-argument captures after a safe signature change. A
@ModifyReturnValueor@ModifyExpressionValuehandler may receive the intercepted value followed by every argument from its enclosing target. Snapshot.6 could update the selector when that target gained parameters, but left the handler with the old capture list, so Mixin still rejected it. Retromod now inserts each uniquely proven new target parameter after the leading value, for both direct selectors and targets related through a refmap. Value-only handlers keep their descriptor. Partial or extra captures, return-type changes, ambiguous layouts,remap = false, unsafe parameter annotations, and staticness mismatches remain untouched. Tested with direct and refmap-linked repairs, a two-slot parameter insertion, value-only handlers, and byte-for-byte refusal of partial captures (AutomaticMixinTranslatorTest). - Fabric runtime transforms now reach jars inside bundled libraries. A Fabric mod can bundle a library that carries another jar under
META-INF/jars/orMETA-INF/jarjar/. The runtime path previously stopped after the first library, leaving deeper classes and compatibility resources in their old namespace. It now applies the nested class, mixin, refmap, access-widener, and generated-helper passes recursively through four levels below the outer mod. Generated helpers use the complete archive chain as their stable key, so identical child filenames cannot collide. Tested with a second-level class remap, official refmap and access-widener output, and full-chain helper relocation (FabricNestedJarRecursionTest). - CLI verification now checks the exact Minecraft jar supplied for the transform.
--verifypreviously looked only at classes visible to the standalone CLI process. That produced false missing-class reports for valid 26.2 classes such asEntityTypes, even when the same command had indexed them through--mc-jar. Class, method, field, and constructor checks now use that target index when available, while loader runs keep their live-classpath fallback. Covered by a standalone-classpath regression (TransformVerifierTest) and a verified 1.20.1 to 26.2 test-mod transform. - Verification now finds stale Minecraft links inside recursively bundled libraries. With an exact target index, Retromod checks each game-owned class, method descriptor, field descriptor, and constructor descriptor in nested jars through the same recursion limit as the transform. Other nested third-party references remain intentionally ignored because bundled libraries commonly contain optional integrations that are absent at runtime. Tested with a stale target reference two jars deep and an absent optional dependency (
TransformVerifierTest). - Exact CLI reports no longer list Minecraft's separate runtime libraries as missing client classes. DataFixerUpper packages such as
com.mojang.serializationlive beside the client jar rather than inside it, while SLF4J and Gson keep their original runtime packages even though the executable CLI relocates its private copies. The verifier now separates those libraries from the game-ownedcom.mojangnamespaces and builds relocation-sensitive allow-list prefixes at runtime. Revamped Phantoms and the Fabric test mod now produce compact reports with those false positives removed. - Legacy screen super-key calls now construct the 26.x input event correctly. A transformed
super.keyPressed(key, scanCode, modifiers)still called the removed primitive overload, so the class could load but failed as soon as that path executed. Retromod now adapts the exactScreen.keyPressed(int, int, int)call site by constructingKeyEventand preservesINVOKESPECIALdispatch to the direct superclass. It does not rename old mod overrides or enable the broad bridge generator. Covered by an executable transform regression that checks all three values, plus the 1.20.1 Fabric test mod transformed against the real 26.2 client jar. - Fabric mixins declared through
mixin.<modid>.jsonare repaired at runtime. The config discovery pass accepted several common names but missed this singular-prefix form. Classes listed only there received the ordinary bytecode remap while their annotation selectors stayed intermediary, causing mixin application to fail on 26.x. The discovery regression and Fabric test mod now use this exact naming shape, matching Revamped Phantoms. - Remapped Fabric class hierarchies keep precise stack-map frames. Frame rebuilding could read a mod class from its original jar but then follow the intermediary superclass name after the class itself had already moved to the official namespace. A branch joining that mod class with one of its Minecraft ancestors therefore widened to
Object, and the JVM rejected a later typed call withVerifyError: Bad type on operand stack. Hierarchy parents read from source bytes now pass through the active class remapper, then continue through the exact target-jar index when the host classes are outside the standalone transform classpath. Covered by an executable frame regression and the reported Revamped PhantomsShockwavetransform. - Revamped Phantoms now crosses the remaining 26.x entity API links found by exact verification. The 26.1 compatibility layer now rebuilds
EntityType.Builder.build(String), entity-type tag checks, combined damage calls, phantom target conditions, predicate selectors, nearby-entity queries, and camera orientation from APIs present on both 26.1 and 26.2. Server-only queries are guarded instead of casting a client level. Focused bytecode tests cover every redirected descriptor, and the Fabric test mod exercises the old target-predicate and entity-type tag calls. - Legacy entity renderers can reach the 26.x render-state contract without a linkage crash. A tightly scoped adapter supplies the missing base
EntityRenderStatefactory and removes only the obsolete directsuper.render(...)call from concrete renderers compiled for the old six-argument API. It leaves modern, indirect, abstract, Minecraft-owned, and unknown buffer shapes unchanged. This is load-safety staging, not a visual port: old custom geometry is not connected to the modern submit pipeline and may remain invisible. Covered by an executable class-loading regression. - CLI refmaps whose filenames also contain
mixinstay on the refmap path. Names such asmixins.modid.refmap.jsonpreviously matched the broad mixin-config check first, so the class pass could use the prepared repair while the emitted resource kept its old selector. Refmaps are now routed before configs in outer mods and nested libraries. Both paths have regressions. - AutoClicky reaches a stable 26.2 client startup (#180). The remaining client calls now follow the 26.x system-message, interaction, creative inventory, swing, rendering, tooltip, keyboard, and mouse APIs. Legacy screen and widget overrides receive hierarchy-checked bridges, and the retired Fabric API dependency id is updated in runtime, CLI, and AOT metadata paths. The exact AutoClicky 1.2.1 jar verifies without unresolved references on 26.1.2 and 26.2. A live 26.2 client completed mod initialization, resource reload, renderer setup, sound startup, and atlas creation. Its settings controls and automated actions still need gameplay testing.
- Double Hotbar's HUD mixin follows the complete 26.x hotbar move (#181). Retromod now recognizes the exact seven-handler mixin shape, renames its extraction selectors and slot shadow, and moves the target from
GuitoHudon 26.2 without applying a global class redirect. Its old inventory swap call now usesContainerInput.SWAPandhandleContainerInput. The exact 1.3.4 jar transforms cleanly for 26.1.2 and 26.2, and a 26.2 client survived stable startup without a mixin failure. This replaces the snapshot.4 limitation that said the second hotbar required a manual port. - ENGRAM no longer keeps stale inherited world calls or a half-active screenshot mixin on Fabric 1.21.11 (#179). Exact method redirects may opt into hierarchy-aware matching when the jar or host index proves that a mod-owned call owner inherits the renamed Minecraft member. This repairs all ten subclass-owned entity world calls in the reported jar without guessing for unrelated owners. ENGRAM's paired screenshot mixins are disabled together only on the verified 1.21.11 target, so the optional screenshot path is inert instead of failing after its delayed task starts. The exact jar reached a live title screen through sound and atlas startup with no accessor failure.
- An old Fabric API in the input folder no longer becomes a second installed API (#186). Fabric pre-launch identifies the top-level API by metadata. When a target-native Fabric API is already loaded, Retromod archives the staged old jar byte-for-byte and creates no transformed output. If the host API is missing, it keeps the source in place and prints an actionable message. Both input roots share the guard, and the Fabric test mod asserts that exactly one API provider is loaded.
- Forge 1.20.6 and newer receive Mojang member names instead of target SRG names (#204). Forge changed its runtime namespace before 26.x, so transforming CoFH Core for Forge 1.21.1 with a 1.20.1 target-SRG table left its reported mixin shadow unresolved. Runtime, CLI, and AOT mapping setup now select official names from 1.20.6 onward. Exact CoFH bytecode reaches the live
LivingEntity.getUseItemmethod, and Forge 1.21.1 starts past the reported mixin failure. - Legacy Forge 1.20.1 channels can construct on Forge 1.20.6 through 1.21.x (#204). A per-mod helper adapts the removed nested channel builder, string protocol supplier, version predicates, event channel, payload event, and context access to that Forge networking surface. Missing, vanilla, and advertised-version predicate inputs retain their legacy meaning. The exact CoFH Core jar proceeds past its removed channel-builder failure on a real Forge 1.21.1 server. Forge 26.x removed event-object registration again, so this bridge stays disabled there until it has a separate listener adapter.
- Forge distribution markers stay in the Forge namespace. Annotation migration previously moved
DistandOnlyInto NeoForge even when the target loader was Forge. The migration is now loader-gated, with a regression proving that a Forge target retains its live classes. - Legacy class-only AccessTransformer entries are accepted by current NeoForge (#221). Some old Forge jars wrote a class target with a trailing descriptor semicolon. Retromod removes it only from class-only lines and preserves valid semicolons inside member descriptors. Runtime, CLI, AOT, metadata-only, and nested-jar paths share the normalization. NeoForge's current parser accepted all 69 entries from the exact transformed Mana and Artifice jar.
- Management Wanted's reported companion tick listeners are concrete on NeoForge 26.1.2 (#207). Old Forge
ServerTickEventandPlayerTickEventlisteners now target the currentPostevents while preserving theirENDphase checks. The companion audit also moves legacy FML side and mod-info types, uses the embedded spawn-egg bridge, removes Forge's incompatible loader-version floor during metadata promotion, and erases the deleted return type from discarded Forge 47 message registrations. Exact transformed copies of More Decor 2.7 and Management Wanted Fixes 1.0.3 contain those repaired shapes. - Forge and NeoForge users are directed through the pre-scan input path. The installation and troubleshooting pages now explain that an incompatible version range can be rejected during loader discovery before Retromod's entry point exists. Old jars should start in
retromod-input/or be prepared with the CLI; in-place transformation remains available only when the loader already accepts the source metadata. - Dedicated Forge servers are no longer mistaken for clients. Current Forge server jars contain client class resources, so the old presence check returned the wrong side even during a
forge_serverlaunch. Environment detection now asks Fabric, Forge, or NeoForge for its selected side before using class resources as a fallback. The probe still does not define or initialize Minecraft classes.
Known limitations
- CoFH Core and Thermal still need an enchantment-system port on Forge 1.21.1 (#204). The exact jar now passes the reported mixin namespace error and the removed networking builder. Its next construction failure reads the deleted static enchantment registry, and its own enchantment classes subclass the old
Enchantmenttype. Minecraft 1.21 made enchantments final, data-driven values, so replacing one field would only move the crash into object construction. Retromod leaves this structural change for a real data and behavior port. - The reported Medieval Origins bundle still needs a corrected dependency set (#186). The duplicate Fabric API path is fixed, but Medieval Origins Revival 7.0.4-pre.2 requires Origins 1.13.0-pre.2, Spell Engine, and Icarus up to 4.6.4. The submitted bundle used Origins pre.3 and omitted the other two dependencies. Keep the issue open until that corrected bundle receives an in-game run.
- Management Wanted still needs a complete NeoForge 26.1.2 launch (#207). The reported abstract-event failure and several following link failures are fixed, but the companion jars use deeper Forge capability, menu, client-extension, and networking behavior. The current legacy network wrapper records packet registrations without fully restoring packet delivery. Keep the issue open until the original three-jar bundle is tested in game.
This mod has no additional files

