promotional banner

Retromod

Retromod Is a Minecraft mod that allows you to play older mods on newer versions.
Back to Files

Retromod 1.3.1 (NeoForge 26.1.2)

File nameretromod-1.3.1+26.1.2.jar
Uploader
BownluxBownlux
Uploaded
Sep 18, 2026
Downloads
10
Size
5.3 MB
Mod Loaders
NeoForge
File ID
8914821
Type
R
Release
Supported game versions
  • 26.1.2

Curse Maven Snippet

NeoForge

implementation "curse.maven:retromod-1532616:8914821"

Learn more about Curse Maven

What's new

Patch release. Fixes the reason most Fabric mods could not be used on 26.x, plus two smaller gaps found after 1.3.0 shipped.

Fixed

  • Loads a Fabric mod that adds blocks or items on 26.x. 26.x refuses to construct a block until its registry id is stamped on its Properties. A NeoForge mod gets that from its deferred register, and Retromod has bridged it there since 1.2.0. Fabric has no deferred register: the mod calls Registry.register(registry, id, block) and builds the block inside the argument list, so nothing ran before the constructor and every such mod died at its own class init with NullPointerException: Block id not set. The id is still reachable, because arguments evaluate left to right, so it is stamped where it is produced and read back while the block is built. The same is done for items, which fail the same way one line later. A Properties held in a shared field is also stamped where it is passed to the constructor, since that one was never created inside a registration to begin with.
  • Translates GlassBlock to TransparentBlock. Only the 1.12.2 spelling had been repointed, so a mod naming the modern one still failed with NoClassDefFoundError.
  • Stops gaps reporting that it ignored --target, which it honours.
  • Loads NeoForge mods that build blocks from BlockBehaviour.Properties.of() on 26.x again. The Fabric FabricBlockSettings polyfill left a self-referencing alias on Properties.of() that replaced the registry id bridge, so the mod failed at registration with Block id not set. Only the in-game NeoForge path loads Fabric polyfills, so offline transforms were unaffected.
  • Repairs 1.21.1 NeoForge and Forge mods that use ItemInteractionResult. The class merged into InteractionResult at 1.21.2 and only the class name was repointed, so the first right click on such a block threw NoSuchFieldError: PASS_TO_DEFAULT_BLOCK_INTERACTION. The constants now resolve to their typed 1.21.2 fields, and sidedSuccess and consumesAction are bridged.
  • Keeps 1.21.1 block item names. A BlockItem used its block's description id until 1.21.2, so a mod whose lang file has only block. keys showed raw item. keys for every block item.
  • Converts pre-1.21.2 recipe ingredients such as {"item": "minecraft:stick"} to the string form. 26.2 skipped those recipes; 26.3 loads recipes with the registries, so one old recipe stopped the world from loading.
  • Renames the recipe_unlocked advancement condition recipe to recipes for 26.3.
  • Drops a recipe advancement that rewards a recipe from its own mod that the mod does not ship. Older versions ignored the dangling id; 26.3 refuses to load the world.
  • Bridges pre-1.21.2 updateShape and getOcclusionShape overrides to the new signatures. The old overrides still loaded but were never called, so blocks that connect to their neighbors stopped connecting.

Found by running mods rather than by a report. Other 1.21.2 signature changes are not bridged yet: neighborChanged now receives an Orientation instead of the neighbor position, and appendHoverText takes a TooltipDisplay and a Consumer, so those overrides still go uncalled. A Fabric mod can still fail for reasons this does not touch: a removed Fabric API class such as the old FuelRegistry is a rewritten API rather than a rename, ArmorMaterial became a record so a mod implementing it hits IncompatibleClassChangeError, and Feature became an interface at 26.3 so a worldgen mod extending it needs a port.

This mod has no additional files