promotional bannermobile promotional banner

Retromod

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

Retromod 1.4.0-snapshot.3.1 (NeoForge 26.3)

File nameretromod-1.4.0-snapshot.3.1-26.3.jar
Uploader
BownluxBownlux
Uploaded
Oct 31, 2026
Downloads
17
Size
8.5 MB
Mod Loaders
NeoForge
File ID
9379587
Type
B
Beta
Supported game versions
  • 26.3

Curse Maven Snippet

NeoForge

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

Learn more about Curse Maven

What's new

Third 1.4.0 snapshot. Refreshes the older mapping data that Forge SRG and Fabric intermediary translation depend on, checked against the game jars each name has to match.

Added

  • Translates old Forge mods' SRG names on Forge 1.20, 1.20.2, 1.20.3, and 1.20.4. Those hosts run SRG names like Forge 1.20.1 but number some members differently, so each has its own table, shipped as the changes to the 1.20.1 table. Before, Retromod registered no SRG names on them at all.
  • Names 4,604 more Forge SRG ids exactly: func_ and field_ ids that only 1.14.4 to 1.16.4 had, and m_ and f_ ids that 1.17, 1.18, 1.19, 1.19.3, and 1.20.2 added and later dropped.
  • Adds class moves for 65 classes from 1.21.2 to 1.21.11 that 26.1 moved to another package, for Fabric, Forge, and NeoForge mods alike.
  • Adds 158 Fabric intermediary ids the table lacked, each checked against the 26.1.2, 26.2, and 26.3 jars.
  • Follows classes and tag constants that 26.2 and 26.3 renamed without changing their members: the HUD's heart and contextual info enums, dripstone thickness, the last Enderman goal, a structure placement enum, the client clock and underwater sound classes, loot condition types, and eight tags such as BlockTags.CONCRETE_POWDERS.
  • Moves a resource pack's trim palettes to the folder 26.3 reads.
  • Renames the vanilla tags that 26.1, 26.2, and 26.3 renamed, in mod code and mod data alike: tag constants such as BlockTags.MUSHROOM_GROW_BLOCK and ItemTags.DYEABLE, #minecraft: references and tag fields in data files and functions, and a mod's additions to an old tag, which are copied to the new name. 26.1 dyes armor through one crafting_dye recipe per item, so Retromod writes that recipe for each item a mod lists in #minecraft:dyeable.
  • Keeps a 1.20.2 to 26.2 advancement trigger working on 26.3, which replaced ContextAwarePredicate with a holder of one loot condition. The predicate type, its codec, matches, validate, create, and EntityPredicate.ADVANCEMENT_CODEC read and test that condition.
  • Follows twelve NeoForge 1.21.1 classes that later NeoForge releases moved to another package, such as ModelData, StackCopySlot, and AddAttributeTooltipsEvent, on hosts that moved them.
  • Follows NeoForge 1.21.1 members that later releases renamed or retyped: PacketDistributor.sendToServer, which moved to ClientPacketDistributor, the key event methods 26.3 renamed, a fall event's distance, an explosion event's explosion, and a tag update event's registries and cause.
  • Keeps NeoForge 1.21.1's LootModifier shape on 26.2, which added a priority, and 26.3, which replaced the condition array with one condition. A global loot modifier built from a condition array, with its codec started from the old codecStart, still registers and reads the conditions its host's data carries.
  • Keeps ModList.get(), LoadingModList.get(), FMLLoader.getLoadingModList(), and the calls made on them working on Forge 26.2, which made both mod lists static, and follows ModLoadingContext.getActiveContainer() to getContainer().
  • Runs Forge 1.20.1 tick listeners on Forge 26.2, which fires a Pre and a Post event for each tick. An old listener runs for both, and its phase, side, level, player, getServer(), and haveTime() reads answer from the event it got.
  • Runs Forge 1.20.1 SimpleChannel networking on Forge 26.x through channels Forge builds itself. Each old channel opens an optional Forge channel under its id, each message keeps its id, encoder, decoder, and handler, and the old sends, replies, and NetworkEvent.Context calls reach Forge's. The old NetworkRegistry.ChannelBuilder and acceptMissingOr work on Forge 26.x and NeoForge alike.
  • Hooks a mod bus listener that a Forge 1.20.1 mod adds with a lambda onto EventBus 7 on Forge 26.2, where mod bus events have no static bus.
  • Writes the root pack.mcmeta that Forge 26.x needs into a translated mod jar that has none. Forge reported such a jar as broken resources and skipped its assets and data, and that loading warning shut down every game event, so server start, login, and loot modifier listeners never ran.
  • Renames the registry keys that 26.3 gave to other registries, such as Registries.CONFIGURED_CARVER, which is now Registries.CARVER, in one pass per class, so a reused name never points at the wrong registry.
  • Serves the old Fabric API strippable, flattenable, tillable, and composting registries on 26.3, which removed them, through Fabric API's block transformers and item components, and the pre-1.21.2 FuelRegistry on every 26.x host. The HoeItem helpers old mods pass to the tilling registry work again too. This is part of the loader API runtime, which is on in snapshots.
  • Redirects a static method reference whose parameters widen to Object, such as HoeItem::onlyIfAirAbove sent to a Retromod helper. Such a reference used to keep pointing at the removed method and fail to link.
  • Serves the old Fabric API TradeOfferHelper on 26.x, where villager and wandering trader trades are data. Retromod writes the trades a mod registers into a data pack in the world folder once the server has started.
  • Serves the old Fabric API brewing registries on 26.x: through Fabric API's builder on 26.1 and 26.2, and as minecraft:brewing recipes in a world data pack on 26.3.
  • Keeps the per-state copper constants, such as Blocks.EXPOSED_COPPER, the 1.21.9 copper records, and the dyed harness items working on 26.2 and newer, which folded them into collections.
  • Reads the SoundEvents constants that 26.3 turned into holders as plain sound events for older mods.
  • Builds an old MerchantOffer from item stacks on 1.20.5 and newer, which take item costs.
  • Runs a 1.20.1 mod's recipes on 1.20.5 to 1.21.1: serializers that read JSON and buffers, recipe classes that read containers and registry access, RecipeManager lookups that pass a container or expect recipes instead of holders, and the removed Ingredient, item stack JSON, and FriendlyByteBuf item helpers.
  • Runs advancement triggers that a mod built before 1.20.2 reads from JSON, with their entity and item predicates, on hosts that read triggers with codecs.
  • Runs Gson loot function and loot condition serializers that a mod built before 1.20.5 registers, on hosts that take codecs.
  • Rebases a 1.21.1 mod's Explosion subclass onto a server explosion on 1.21.2 and newer, where Explosion is an interface. explode() still lists the blocks it will break, and finalizeExplosion breaks and drops them.
  • Rebuilds the armor material registry that 1.21.2 removed under Retromod's own id, so 1.21.1 armor materials still register and build armor on 26.x.
  • Answers 1.21.1 recipe lookups on 1.21.2 and newer: RecipeManager queries by type or id, a recipe's ingredients, result, experience, and cooking time, and Ingredient.getItems.
  • Bridges NeoForge 1.21.1 item, fluid, and energy capabilities on NeoForge 1.21.11 to 26.2, which moved them to resource handlers. An old handler registers under both capabilities, and an old lookup falls back to a new handler.
  • Rebuilds NeoForge's item, fluid, and energy handler APIs, which 26.3 removed, inside each translated jar that uses them: IItemHandler, ItemStackHandler and the item wrappers, IFluidHandler, FluidTank and the fluid item templates, FluidUtil's container helpers, IEnergyStorage, EnergyStorage, and the old capabilities, which work beside the current ones as they do on 26.2.
  • Keeps the 1.21.1 save methods of ItemStackHandler, FluidTank, and EnergyStorage on NeoForge 1.21.6 to 26.2, which save through ValueIO, in the format 1.21.1 wrote. A handler subclass's own override of those methods still runs.
  • Rebuilds PotionBrewing, which 26.3 replaced with minecraft:brewing recipes, from those recipes, so a mod reading server.potionBrewing() sees the same potion and container mixes. This applies to Fabric, Forge, and NeoForge mods alike.
  • Reads a block state written with the old Name and Properties keys in a mod's own data files on 26.3, which reads id and properties.
  • Keeps the removed block type registry, AddServerReloadListenersEvent.getRegistryAccess(), armor components from an old armor material, and old recipe result reads working on NeoForge 26.3.
  • Renames old game rule constants and bridges game rule reads on NeoForge and Forge 1.21.11, which reworked game rules before 26.1, and follows SimpleCraftingRecipeSerializer to its 1.21.11 name, CustomRecipe.Serializer. On NeoForge 1.21.11 it also follows the old reload listener events to their new names.
  • Bridges more members that 1.21.2 to 26.x removed: tool rules built from a tag or a block list, tier-only tool constructors, BlockEntityType.Builder, data attachments serialized with a Codec, lootFrom, NeoForge's stack-aware crafting remainders, Level.getProfiler, Level.getGameRules with typed rule reads, and reads of the Level.isClientSide and Level.random fields.
  • Gives a block or item its registration id when the mod builds its properties before the registration, as mods often do for a torch and its wall torch.
  • Serves a NeoForge 1.21.1 HUD layer through NeoForge's GuiLayer on 1.21.6 and newer.
  • Maps Forge 1.20.1 biome modifiers, their phases and builders, ServerLifecycleHooks, and StrictNBTIngredient to NeoForge's own, and converts biome and structure modifier serializers to the MapCodecs NeoForge reads. On NeoForge 26.3, which added a registry access to BiomeModifier.modify, an old modifier's three-argument modify still runs.
  • Shows Retromod's logo in the NeoForge 26.2 and newer mod list, and updates the German translation, both contributed by ttaute (#376).
  • Updates ASM, the bytecode library behind every transform, from 9.10.1 to 9.11.1, SLF4J from 2.0.18 to 2.0.20, the compile-only Guava to 33.7.2, the compiler plugin to 3.16.0, the exec plugin to 3.6.4, and the build-helper plugin to 3.6.2. The supported Java and Minecraft ranges are unchanged.

Fixed

  • Removes 751 Fabric intermediary entries that gave a lambda the name of another member sharing its obfuscated name. A mixin aimed at one of those lambdas could land on the wrong method.
  • Corrects 67 class and 43 member names that no 26.x host has, such as BakedModel to BlockStateModel and block entity renderers' render to submit.
  • Replaces 258 approximate 1.12.2 SRG names with the exact name of the same id, such as causeFallDamage for the old fall.
  • Registers three 1.21.11 client class moves on 26.1.x hosts, where only 26.2 and newer had them, although released 26.1 already used the new paths.
  • Gets 1.20.1 Forge mods with machine recipes, custom advancements, and custom world generation through startup on NeoForge 1.21.1. Retromod now also bridges enchantments registered through Architectury, chunk generators and biome sources that give a plain codec, ModConfig.getConfigData, access transformers written with SRG names, point of interest types that claim block states vanilla already owns, item names read from toString, registrations made after the registries froze, Properties.copy of a waterlogged block, the old stack size field of Item.Properties, button, sign, pressure plate, and torch constructors that took their type later, and camera mixins that move by doubles. Fossils and Archaeology (#372) starts on a NeoForge 1.21.1 server.
  • Runs Forge 1.19.4's CreativeModeTabEvent on Forge 1.20 and newer: a tab registered through the old event becomes a tab registry entry in the same place, the contents event keeps its members, and the old CreativeModeTabs constants read the registered tabs. Old ServerPlayer.setLevel calls and the old void damage type reach their 1.20 names, including on Forge hosts that run SRG names. Super Mario Mania (#364) starts on a Forge 1.20.1 server.
  • Reads a mod's Minecraft version from Build-On-Minecraft in its manifest. TerraBlender 1.21.1 declares only an open NeoForge range, and Retromod translated it as a 1.20.4 mod in place of the native jar.
  • Gets ProjectE (#366), a NeoForge 1.21.1 mod, through startup on NeoForge 26.2 and 26.3 servers, with its EMC values loaded and its nova explosions breaking blocks.
  • Keeps the fuzzy field match from swapping one registry or registry key constant for another. It sent Registries.BLOCK_TYPE to the block registry on 26.3, where a mod's block types then collided with its blocks.
  • Stops a DeferredRegister subclass that overrides register and calls super from looping until the stack overflowed on NeoForge 1.20.5 to 1.21.11.
  • Starts Retromod on NeoForge 1.20.5 and 1.20.6. Every NeoForge 20.5 build and the first 13 builds of 20.6 run FML 3.0.18, which still loads the older mod locator, so Retromod never started there and FML reported it as a mod with no classes. The jars for those two versions now carry both locators (#375).
  • Opens Retromod's entry in the NeoForge 1.20.2 and 1.20.3 mod list without crashing. Those mod lists read the logo path as one segment and rejected its slash with Illegal segment, so the logo now sits at the jar root (#375).
  • Keeps an entity's own eye height when its class overrides getEyeHeight(Pose), which 1.20.5 made final and moved into the entity's dimensions. Such a class failed to load with IncompatibleClassChangeError. The override now sets the eye height of the dimensions the host reads, on Fabric, Forge, and NeoForge alike (#377).
  • Applies a 26.1 class move on NeoForge and Forge 26.2 and newer when 26.2 moved the class again, as it did the advancement trigger classes. Retromod skipped such a move because the host lacks the 26.1 name, so a NeoForge 1.21.1 mod's custom trigger failed to load there.
  • Gives the stand-in classes Retromod embeds the last name in a chain of class moves, as a mod's own classes get. A stand-in written with a 1.20.1 name stopped at the first move.
  • Leaves a static call as written when a redirect expects a receiver. A newer mod calls the static method that replaced an instance one under the same name, and the redirect left the stack one value short.
  • Frames a branch that joins a mod class with a Minecraft class correctly in the offline CLI, from the --mc-jar index or the installed game it finds. The CLI typed such a value as Object, and the class failed verification, as ProjectE's Arcana ring did.
  • Keeps an advancement trigger built before 1.20.2 working on 26.x, for every loader. 26.1 and 26.2 moved its base class, so the trigger lost the codec Retromod gives it, and the first advancement that used it stopped the world from loading with AbstractMethodError.
  • Adapts an old recipe serializer that a Forge mod registers through DeferredRegister on Forge 26.2 and newer, as NeoForge already did. The registry held the mod's own object, and reading its recipes stopped the world from loading with ClassCastException.
  • Falls back to the vanilla rarity of the same color when a mod calls Rarity.create on Forge 26.x, which removed it, and says so in the log. The mod stopped at construction with NoSuchMethodError.
  • Renames the attribute operations ADDITION, MULTIPLY_BASE, and MULTIPLY_TOTAL on Forge 1.20.5 and newer. Only NeoForge had the rename, so an old attribute modifier failed with NoSuchFieldError on Forge.
  • Reopens the vanilla registries on Forge 26.x for a registration a mod makes after they froze, as on NeoForge, and renames vanilla tags in Forge mods on 26.1 and newer, which the Forge chain skipped.
  • Writes EventBus 7 bridge failures on Forge 26.2 to the game log. They went to standard error, which launchers such as Prism do not keep.

A Forge 1.20.1 mod that opens a network channel with SimpleChannel still stops on Forge 1.20.2 to 1.20.4, which replaced that API. On Forge 26.2, old mods still fail on cancellable events (setCanceled), capabilities attached through AttachCapabilitiesEvent, and render events, which EventBus 7 replaced, and a tick listener added with addListener instead of @SubscribeEvent is not split. Rarity.create cannot add a rarity on Forge 26.x, where Rarity is a plain enum. The Forge 26.x bridges were run on a Forge 26.2 client; Forge 26.3 was not launched in testing. NeoForge client APIs that 26.x rebuilt, such as RenderLevelStageEvent stages, model geometry loaders, color handler events, and shader registration, still fail. The offline CLI follows an inherited method to the class that declares it on Forge 1.20 to 1.20.4 only when --mc-jar names the SRG-named jar the Forge installer writes. SRG ids that only 1.13.2 or 1.14.3 had cannot be named exactly, because Mojang published no mappings for those versions. 26.3 removed Fabric API's decorated pot pattern registry, and old mods that use it still fail there. Old trades, and old brewing on 26.3, apply from the second start of a world, because the host reads them before the first start writes them. The 1.20.1 recipe bridge covers 1.20.5 to 1.21.1. 1.20.2 to 1.20.4 read serializers in another shape, and 1.21.2 rebuilt recipes around placement and display data, so an old recipe class still fails on those hosts, including 26.x. On 26.x its recipes stay unloaded and the world still loads. A recipe read through the bridge carries a generated id until the mod looks it up, because a serializer no longer receives the file's id, and a 1.20.1 serializer cannot write recipes back to JSON. Screens a Forge 1.19.4 mod draws with a PoseStack still fail when opened on 1.20 and newer, which draw with GuiGraphics, and a block's material compared with anything other than Material.AIR still fails, because 1.20 removed materials. An old compost chance takes the nearest of vanilla's five tiers, from 30 to 100 percent. A tilling rule with the mod's own check or action is not served on 26.3, because block transformers store only block states, and an item dropped while tilling is not dropped. Compost and fuel set on an item tag do nothing on 26.3, and a modded fuel burns as long in a blast furnace or smoker as in a furnace. An item a mod lists as optional in #minecraft:dyeable gets no dye recipe, because the item may not exist and a recipe naming a missing item stops a 26.3 world from loading. An advancement that a pre-1.21 mod ships in its advancements/ folder and that uses the mod's own trigger stays out of 26.3, because Retromod cannot show the trigger reads it, and one advancement that fails to load stops a 26.3 world. Data that names a tag 26.3 removed with no successor, such as #minecraft:brewing_fuel or the carver replaceable tags, still names nothing there. The rebuilt NeoForge handler APIs are copied into each translated jar, so two old mods that hand handlers to each other outside capabilities see different classes; a shared copy would fix that. FluidUtil's helpers that pick up and place fluids in the world are not rebuilt. NeoForge's old brewing recipe API (IBrewingRecipe and its registration event) is not rebuilt, and the rebuilt table's getRecipes() is empty. A client connected to a remote server sees an empty brewing table, because 26.3 keeps recipes on the server. The static PotionBrewing methods from before 1.20.5 are not bridged. A NeoForge 1.21.1 mod that builds blocks or items before registering them, or serializes data attachments with a Codec, still stops on NeoForge 1.21.2 to 1.21.11, because those bridges register from 26.1; ProjectE stops there. ProjectE's player layer and render types use client rendering classes that 26.x rebuilt, so its client still fails. An old explosion's detonate event lists no blocks, because Retromod keeps them for finalizeExplosion, so a claim mod cannot protect blocks from it. Explosion subclasses are not bridged on Fabric 1.21.2 to 1.21.11 hosts, which run intermediary names. Old game rule reads are not bridged on Fabric 1.21.11. Retromod on NeoForge 1.20.5 and 1.20.6 was checked against FML 3.0.18's loader API but not launched in testing. On 1.21.5 and newer MobSpawnSettingsBuilder.getSpawner returns a weighted list builder, so an old biome modifier that edits spawns through it still fails. A 1.21.x Fabric mod that builds a SingleItemRecipe.Serializer, which 26.1 removed, still fails on 26.x, as MrCrayfish's Furniture Mod: Refurbished does (#374).

This mod has no additional files