Repository navigation
Releases
Retrofit 0.6.2-Beta
0.6.2-beta - ManaMetal, combat and major-report fixes (2026-10-30)
-
Use the host world's real spawn point for legacy code. ManaMetal builds its newcomer village
near the player and its original spawn-point tile sends the player to the tutorial. -
Publish player world-join events outside the mirror-map monitor, avoiding a deadlock when a
join handler builds terrain while the renderer needs a player mirror. -
Forward cancellable block-break and item-pickup events, including changed XP, remaining drops,
consumed currency, and inventory changes. ManaMetal mining fatigue and profession wallets use
their original handlers. -
Apply motion changed by client packet/tick handlers. A fall-distance-only update no longer
overwrites current movement, restoring ManaMetal dash movement. -
Preserve original damage-source identity through player damage callbacks. Absolute kill damage
reaches the modern kill path, allowing ManaMetal's death button to finish the downed state. -
Separate lightmap texture state from the main font/atlas. Correct class-menu text, scale item
count overlays with their icons, and offer legacy custom tooltips for modern mod items too. -
Render zero-count GUI icons and their original count labels using drawing-only copies. This
restores ManaMetal's unused permanent-consumable icons without adding items to inventories. -
Suppress the separate modern hunger overlay while ManaMetal owns the health HUD.
-
Forward player attack/hurt events for modern living targets. Honor ManaMetal's own weapon
eligibility result before allowing an ordinary host attack or legacy item use. -
Deliver legacy item swing callbacks, restoring AoA greatblade and scythe attacks.
-
Synchronize client health before and after legacy animation updates. Clear stale death state
for living bosses; explicitly synchronize genuine legacy dying state so real death sequences
still animate and remove the creature. -
Keep world-generation fixes in the world-class generator so regeneration preserves custom
biome providers, shared storage, server chunk providers, and out-of-region height handling. -
Retain server collision shapes when the 1.7.10 client-only selection-box method is absent.
-
Add isolated ManaMetal, AoA, dimension-spawn, Queen/Chaos Persists, and HUD regression checks.
-
Preserve large native boss/minion health with a per-creature attribute instance, retaining
modifier order, saved modifiers, network identity and modern creatures' existing health bounds. -
Merge code-registered FML translations into the original client language tables, restoring
OreSpawn boss names in native HUDs as well as modern item/entity names. -
Tick unregistered native throwable projectiles on their original side, restoring Thunder Staff
damage and particle trails. Preserve original client block-only impact behavior. -
Submit complete model vertices with reused transform scratch space. Reference checks preserve
vertex attributes; a fixed-camera 64-Mantis sample reduced render CPU from 5.35 to 4.07 ms/frame.
This is not a claim to fix the unknown reporter pack's FPS collapse or stacked boss bars. -
Release host-world, player, entity, spawner and tile cache entries after original world-unload
callbacks, avoiding retained departed client worlds without inventing creature death events. -
Provide neutral keyboard/mouse shims on headless servers when LWJGL 2 is absent, including the
original NONE key name used by More Health Enhanced's common login handler. -
Add actual client egg clicks before death and after two kill/respawn cycles. Supplied Titans 0.45
passes; its Templar retains the original 650 HP rather than receiving an invented stat increase. -
Keep unresolved pack-specific Mantis performance and Titans egg reports explicit in the
follow-up record; tests do not establish compatibility with unknown modpack versions. -
Evaluate compatibility hardening against actual 1.20.1 behavior. Harden captured
texture buffers, clip invalid subimages safely, clear incomplete pixels, and reuse same-size
pixel arrays without changing valid texture formats or caller buffer cursors. -
Add opt-in heap/NIO/GC diagnostics and longer Mantis profiling. The measured scene did not
demonstrate runaway direct-buffer memory; no automatic forced-GC watchdog is enabled. -
Verify recipe packet round trips before rejecting the 1.21-specific broad recipe-deletion guard.
Keep the special native crafting recipe and other mods' recipes intact. -
Preserve native coordinates and rotation written before dimension transfer. ManaMetal's tutorial
now lands inside its built academy; add actual-position and floor assertions beyond dimension entry. -
Document a multi-version simulation/shim architecture and test its class-loader boundary
without claiming a second-version backend.
0.6.1-beta.2 CrazyCraft 3 testing fixes (2026-10-29)
- Detect duplicate mods from actual FML
@Modannotations, including jars withoutmcmod.info.
Gravity Gun and TrailMix duplicates no longer stop all legacy initialization; unrelated mods
with placeholderexamplemodmetadata (Controlling and LuckyBlocks) coexist. - Strip formatting codes from declared Minecraft versions so MrCrayfish's Furniture Mod loads.
- Keep Railcraft's air-material heat markers invisible, replaceable, and without selection outlines.
- Synchronize carried items around legacy player tick/living-update hooks, preventing stale
inventories from being sent by legacy handlers. Creative add and clear operations have client/server tests. - Preserve creative tabs' own contents and custom names, with distinct titles for identically
labelled tabs. Use readable item-name fallbacks only when the original mod supplies no translation. - Load generated resource-pack images (CustomNPCs furniture) and custom texture fallback/deferred
uploads (TARDIS owner skins). Suppress ordinary cube faces for tile-rendered blocks that hide them,
removing TARDIS diagnostic geometry. Preserve Malisis icon types for shared vanilla textures. - Run tile initialization before legacy placement orientation, while keeping Forge's cancellable
placement event and snapshots. Carpenter's slopes retain four distinct facing values. - Provide MCHeli's file-based content loaders a private, hash-keyed extracted assets directory;
the tested zipped 0.10.6 release registers 116 items instead of 12. Original archives stay untouched. - Supply previous-tick player positions to world rendering for placement-preview interpolation.
- Avoid Forge's mismatch-panel null dereference for legacy registry namespaces; show actionable
pack-mismatch guidance instead. This does not bypass registry compatibility checks. - Add the isolated CrazyCraft regression scenario and
-PcorpusDirfor testing exact pack copies.
Retrofit 0.6.1-Beta
0.6.1-beta
-
Stabilized the Mob Battle group-item client test: it now starts with a fresh nearby pair. Reusing
fighters from the preceding battle sometimes put them beyond the golem's follow range, where
1.7.10's target AI correctly clears the target. The mobs' gameplay rules remain unchanged. -
Integrated UsagiTsukino-01's entity fixes: direct blast motion reaches modern creatures without double
knockback; entity tracking follows the mod's registered range; client copies use the server's health;
direct host health increases reach legacy creatures as heals. Existing Mob Battle targeting and
multiplayer registry fixes are retained. -
Fixed the Ruby Golem test creature's zombie skin layout: its generic biped model sampled the wrong
texture regions, leaving body parts invisible during Mob Battle tests. -
1.20.1 creatures hit 1.7.10 ones as themselves: a zombie's hit on a 1.7.10 mob reached it as damage from
nobody, which 1.7.10 treats like the generic kind that ignores armor, and mobs' own rules for who hits them
(OreSpawn's Mobzilla: its 21 armor and its damage cap) didn't apply. The attacker now arrives as the 1.7.10
stand-in legacy code already sees for it (shot arrows and tridents as projectiles from it), so armor and those
rules apply as they do for players and 1.7.10 mobs, and the mob turns on the 1.20.1 creature that hit it.
Damage from things legacy code can't see no longer ignores armor either. The Titans' titans, which refuse
attacker-less damage and take a boss's hits x100, fight 1.20.1 creatures (a 1.20.1 wither arrives as a 1.7.10
EntityWither), and stand-ins of 1.20.1 mega bosses stay narrower than the titan-sized attackers titans refuse.
(Contributed by UsagiTsukino-01, with Retrofit's own.) -
Damage by health write reaches 1.7.10 mobs (OmniMobs' Flashfur): mods that "force" damage by writing the
target's health (never calling hurt) had it undone by the next sync. A drop on the host is now delivered to
the 1.7.10 entity, named after the creature that last hurt it; OmniMobs' no-damage watchdog, which erased
targets that took no damage, no longer erases 1.7.10 mobs that refuse it by their own rules.
(Contributed by UsagiTsukino-01.) -
Boss bars come back after a mob leaves and re-enters sight (The Titans): a re-created client copy shares
its server id with the dead one, which 1.7.10's Entity.equals compares, so it never rejoined the world's
entity list; membership is by identity now, dead copies leave the list, a failed copy is retried instead of
blanking the mob for good, and one bad tick no longer removes a mob. Mod entities keep the tracking range
their mod registered (The Titans: 128 blocks), and the client player's ticksExisted and timeUntilPortal
count (The Titans' boss bar scan, portals). (Contributed by UsagiTsukino-01.) -
Targets 1.20.1 code sets reach 1.7.10 mobs (Mob Battle's enrager and other items or mods that pick a mob's
target): the 1.7.10 AI gets it, as its attack target, revenge target and its older AI's target. Target goals
1.20.1 mods add to 1.7.10 mobs run (Mob Battle's armies: a 1.7.10 mob in a team turns on the other teams), and
targets 1.7.10 code sets on 1.20.1 creatures are theirs. Healing from 1.20.1 code (Mob Battle's heal item,
instant health) heals 1.7.10 mobs. -
Left and right clicks on creatures reach 1.7.10 code: a player's attack fires 1.7.10's AttackEntityEvent
and the held item's onLeftClickEntity, either of which can stop it (Mob Battle's sticks pick mobs instead of
hitting them), and a hit that lands is the item's hitEntity (weapons that poison, burn or wear on hits). A
right click on a 1.7.10 creature does all of 1.7.10's interactWith: EntityInteractEvent, the creature's own
interaction, then the held item's itemInteractionForEntity; on a 1.20.1 creature the event and the item's
use. Both Mob Battle versions (1.7.10's and 1.20.1's) work on 1.7.10 and 1.20.1 mobs alike. -
Machines are on the world's tile entity list (loadedTileEntityList), where 1.7.10 mods look for them: Rival
Rebels' tokamak finds and powers its teslas, and Rhodes finds tokamaks. A chunk's 1.7.10 tile entities are
made when it loads, as 1.7.10 did, so the ones nothing has touched yet are listed too; they leave the list when
broken or unloaded. (Contributed by UsagiTsukino-01.) -
1.20.1 armor, swords and tools are what they are to 1.7.10 code: they travelled as one plain item, so
1.7.10 creatures that put on armor or take up weapons (Better Dungeons' NPCs) refused netherite and other
mods' armor, and code asking what a tool is saw none. Armor is now an ItemArmor for its slot, protecting
by the piece's own armor points and drawn with its own texture; swords hit with their own damage; pickaxes,
axes and shovels (any mod's, by what they can do) are tools of their kinds, harvest level and speed. They
turn back into the same 1.20.1 items. -
Mods' models drawn from vertex buffers show (NTM: Space's bombs, machines and most of its items, which
were shredded geometry in the world and spilled out of inventory slots): buffer objects (GL15) are kept, and
the arrays pointed into them are read when drawn. -
Breaking a block as a player lets it do what it did after being broken (onBlockDestroyedByPlayer):
OreSpawn's Red Ant and Termite ores let their creatures out instead of only dropping. -
Spawn eggs for mobs whose mod adds its egg by hand (an egg under an id that leads to the class, without
the class leading back to it). -
Two mods may ask for the same global entity id: the second one's creature gets a free id past 255 (with its
spawn egg) instead of failing the mod (MLP Mythical Creatures' 226 to 241, which The Titans has). -
A mod's world generator that throws no longer stops the others: FML ran them one after another, so every
generator after a failing one did nothing in that chunk. They now run one at a time (with FML's seeds), and a
failing one is logged once with its stack trace. One such failure was Retrofit's own: a mod biome without a name
broke the biome lookups legacy generators make (Ars Magica, OreSpawn, Thaumcraft, GregTech, CoFH's ores and
others generated nothing near it) and the creature lists of mod dimensions (nothing spawned by itself in Erebus
or OreSpawn's Utopia). -
Mod dimensions spawn their own creatures (AbyssalCraft, Atum, Erebus, the Betweenlands; players saw none):
the creatures a dimension lists come from its biome there, which outside chunk generation was looked up as
plains (so only mods that add their creatures to every biome spawned). And 1.7.10's server told every world
what it may spawn (hostiles unless peaceful, animals), which Forge passes to its provider: dimension mods keep
that there for their own spawners (Erebus'), which spawned nothing without it. -
Dimension mods find their own generator (theChunkProviderServer.currentChunkProvider, where 1.7.10 kept
it): the Betweenlands' decorators cast it to theirs, failed in every chunk, and its plants never grew. -
A library a mod can't get no longer stops every mod: mods whose DepLoader downloads a library
(ForgeMultipart's CodeChickenLib, whose 1.1.3.127 address is gone) failed the whole 1.7.10 start when the
download failed or the player said no. Such a mod now waits in retrofit/waiting-for-libraries, listed as not
loaded with the file it needs; the others load, and it comes back by itself once the file is in retrofit/mods. -
Two versions of one mod no longer stop every mod: FML found "a duplicate mod" (two packs' CodeChickenCore,
1.0.7 and 1.4.22) and loaded none. The newest is kept and the others are moved to retrofit/duplicates (moved,
not deleted) and listed as not loaded. -
Each mod sees its biome ids also while worlds generate: a mod whose biomes moved off ids another mod had
looked them up by its config's ids in its generator and got the other mod's (Erebus, beside AbyssalCraft and
ExtraPlanets: no terrain). In its own classes, a mod's biomes are at the ids it asked for, at any time. -
Generation no longer hangs on columns it can't see: around a generating chunk only its neighbours are
there; Retrofit said the rest was too, as all air, and ExtraPlanets' tower placement searched one for ground
forever, holding up the server. Such columns aren't there now, and have no top (-1), as on 1.7.10. -
Mods' spawners pick heights in the right range (the Betweenlands' creatures spawn): a chunk's highest
section (getTopFilledSegment) was always 0. -
Java 8's UUID.fromString for legacy code (More Planets' potions failed on Java 17's stricter one).
-
Placing Nevermine's Haven portal no longer crashes the server: its shape code sets its own metadata, which
asked its shape again without end. A block's shape asked while it works out its shape gets its metadata's;
and Retrofit's error reporting can no longer itself fail (it did, first used deep in that overflowing stack,
and then every later error crashed the game). -
A mod whose proxy class name differs from its class only in case (Arcana RPG's "commonProxy" for
CommonProxy, which worked on the case-insensitive disk it was made on) loads: the class is found in any case. -
A server and a client with different 1.7.10 mods are told which: the player saw Forge's "mismatched mod
list" with no word on why. The 1.7.10 mods are now compared once the player joins, by each mod's own rule, as
FML 1.7.10 did: a client may have mods the server hasn't (Mouse Tweaks, minimaps), and a server's mods are
needed on its clients at versions they accept. A player turned away sees the mods that differ, and that a mod
the server couldn't load (its log names it) has to be removed from the clients too. Another Retrofit version
on the server is told as such. -
**J...
Retrofit 0.6.0-Beta
0.6.0-beta (in progress)
- A page for the 1.7.10 mods (Options, "1.7.10 Mods..."), laid out as Forge's mod list: every 1.7.10 mod
with what its mcmod.info says and its logo, the ones that didn't load in red with the reason, and a Config
button: the mod's own configuration screen, or FML's for its .cfg files (saved when it closes; most 1.7.10
mods read them only at startup, which the page reminds you of). Retrofit's own settings are a button away. - Mods' own particles are drawn (custom EntityFX classes: ManaMetal's scythe, gun and wand projectiles,
which are nothing but particles): they are kept, updated each tick and drawn each frame as 1.7.10 did, also
when a mod puts its own effect renderer in place (DragonAPI's). Before, only particles with a vanilla
counterpart showed. - Legacy code culls by the real view (ClippingHelper, Frustrum): the camera's planes each frame, and a
Frustum at the camera as 1.7.10's renderWorld made one. Everything tested against them was out of view
(with DragonAPI, every mod's particles). - Mods' ores generate below y 0 (in the deepslate layer): 1.7.10's ore generators replace stone, and saw
deepslate as a block they leave alone, so the deep pass of 0.5.0 placed none in real worlds. Deepslate, tuff
and the other rock ores go into read as stone while legacy generators run. - Mods that draw tooltips themselves (a coremod replacing GuiScreen.renderToolTip, as ManaMetal's does) draw
them, in their own screens and in 1.20.1's, with their frames, separators and icons; before, Retrofit's own
tooltip hook replaced theirs and their markers showed as text ([M3LINE]). - Icons mods put in text through font pages of the private use area (
unicode_page_e0.pngand on: ManaMetal's
tooltip icons) are drawn; they were empty boxes. - The HUD events are 1.7.10's: every element GuiIngameForge fired (helmet, portal, hotbar, crosshairs, boss
health, health, armor, food, mount health, air, jump bar or experience, and the text lists), in its order.
Thaumcraft's research notifications and the aspects flying to the corner as you scan come at the text element,
which wasn't fired. What mods draw before the hotbar goes under it (ManaMetal's food decay bars covered the
items), and an element a mod cancels leaves out 1.20.1's own (a mod's hotbar or health bar replaces it). - Thaumcraft's thaumometer sits where it did (it was drawn too high): first-person renderers that place
themselves by the held item's equip progress get it at rest. - Writes into a chunk's block storage reach the world (ManaMetal builds its instance dungeons there, for
speed; OreSpawn's setBlockFast builds its houses, castles, mazes and islands the same way): only the
structures' blocks with tile entities appeared, as scattered pillars, spawners and chests. - Big generated structures are built in full (OreSpawn's Enormous Castle, and any mod's structure reaching
past the chunk next door): 1.20.1's feature stage only takes writes to the generating chunk and its
neighbours, where 1.7.10 loaded whatever chunk a generator wrote to. The rest are queued for their own chunk
and placed when it generates, or on the server thread for a chunk that finished first, with the spawner's
mob and the chest's loot the generator gave them. The queue is saved with the world, so a restart before
those chunks generate loses nothing. - OptiFine for 1.7.10 is left out instead of stopping every 1.7.10 mod: it patches 1.7.10's renderer, which
1.20.1 replaces, and the patched code failed before any mod loaded. It is listed with the other mods that
didn't load, with why. - Players can join servers with large packs (Thaumcraft, Railcraft, The Titans and the like together):
the client and server could register different potion effects or entities, and joining failed with
"Missing registry data" (Forge then crashed drawing that message). A potion asking for a taken ID is now
moved above 127 (up to 255, as DragonAPI allows) instead of into the free IDs below: mods that look for a
free ID themselves look there, and Thaumcraft left out its Flux Taint when the moved potions had filled
it, on one side and not the other. Every potion a mod makes is registered, including one that lost its slot.
And a mod that takes over a vanilla entity name (Railcraft's minecarts) left two classes under that name,
of which either side could keep either: the mod's is kept. - An invulnerable player takes no damage from 1.7.10 mobs (the invulnerable ability, which commands and
mods give, not only creative mode): 1.7.10 code saw it only in creative. - "Mismatched mod list" can be traced: each side's log names the 1.7.10 mods (and versions) its network
version is made from, so two logs show which mod differs. - Iron bars, fences and panes of generated structures join up (the Enormous Castle's walls were scattered
posts): 1.20.1 keeps connections in the block state, so once the generators are done, every block they wrote
takes the shape its neighbours ask for, as vanilla's structure templates do.
(Both contributed by UsagiTsukino-01.) - Creatures spawn by themselves in mods' dimensions again (none did, in any: Erebus, Betweenlands, OreSpawn's):
the creatures their generators list are handed to 1.20.1's spawner as the same entries each time, as a biome's
are; it asks twice and spawned nothing when the second answer was a new list. - OreSpawn's Crystal dimension runs at full frame rate (55 fps there against 180 elsewhere in the test): its
stone and grass are opaque cubes only while the player is in that dimension, which 1.20.1's fixed block
properties can't follow, so every buried face was drawn (116 million indices in view). Faces against a legacy
neighbour are now left out where 1.7.10 left them out: behind a block that says it is an opaque cube now
(asked each tick), or whose face covers them with an opaque texture. - Entity shadows are round again (OreSpawn's ants and most mobs drew a grid of shadows): legacy textures keep
their.mcmetaclamping and blur, which 1.7.10's shadow texture needs. - Two mods can use the same dimension id (Atum and Advent of Ascension both default to 17, and many dimension
mods share IDs): the mod registering a taken ID (or provider type) gets a free one from 1000 up, the same one
at every start (retrofit/dimension-ids.txt), and still sees the ID it asked for everywhere in its own code:
its config's number, its portals' checks, its teleports, its packets and events. The rest of the game sees the
real IDs. Before, the second mod had no dimension and its portal led into the other mod's. - A dedicated server's 1.7.10 configs reach its players: joining with different configs (
retrofit/config,
and the dimension IDs above) asks the player whether to use the server's; Retrofit then saves them (keeping
the player's own inretrofit/config-backup) and asks for a restart, as 1.7.10 mods read their configs only
at startup. Files named*client*are each player's own and never sent. - Legacy potion effects and enchantments are named the same whatever IDs their configs give them (two with
one name are numbered in a fixed order; one without a name is named by its class), so clients and servers
with different numbering still connect. - More textures: icons mods cut from a sheet of their own (Chisel's connected-texture pillars and panels:
79 in the test pack) come from that part of the sheet; files whose name differs only in case, or that sit
under another asset folder of the same jar (BuildCraft's triggers), are found. The rest of the textures
legacy icons name but no jar has are listed inretrofit/missing-textures.txt(most are missing on 1.7.10
too). - Dyed armor shows its colour: leather-material legacy armor and armor with its own colours are tinted, and
dyeable as leather is (in crafting and cauldrons). - Items used over time work in the off hand (bows, food, wands), as in the main hand.
- RenderPlayerEvent fires for other players too (capes, wings, mods' models of other players), with each
player's own legacy copy (EntityOtherPlayerMP, as 1.7.10 had them). - Shapes that depend on neighbours (fences, panes, cables, covers) collide and outline as they connect: the
block is asked where it is, as 1.7.10 asked it. - IC2's energy net gets as much energy from 1.20.1 blocks as they give, still at low voltage (no machine
explodes): it was 32 EU/t per block. - Mods' own clouds and weather (WorldProvider.getCloudRenderer, getWeatherRenderer) are drawn in their
dimensions. - Triangle strips, fans and polygons drawn through vertex arrays (the Tessellator in those modes: discs,
cones, beams) are drawn; only immediate mode drew them before. - Recipe viewers list more legacy recipes: subclasses of the vanilla and Ore Dictionary recipe classes, and
mods' own recipe classes whose inputs their fields show (only when the recipe itself accepts that reading). - HBM's planets (and other mod dimensions whose provider makes its biomes when a world is made for them) load:
the biome is the mod's, checked against its own view and moved off another mod's id, and made again into
its own slot. - The legacy lightmap (EntityRenderer.lightmapColors) is 1.20.1's, every frame (HBM's skies read it); NEI's
per-server settings get the server's address. - Mod dimensions generate blocks with ids past 4095 (Erebus: one of its chunk's blocks failed the chunk).
- Faster loading: the scan for the names each class transformation looks for is one pass per class.
Retrofit 0.5.2-Beta
0.5.2-beta
- Erebus generates its dimension again (reported with Erebus and HBM together): a
mod's view of the biome array, which lets mods sharing biome IDs load (0.5.1), was also shown while chunks
were generated, to whichever mod's code was running (FML guesses the "active" mod from the call stack). HBM's
generator asked Erebus's biome layers for a biome, and they got HBM's view, without Erebus's biomes: nothing
generated past the error. Views are now shown only while FML sends a mod its loading events. - Chests and spawners legacy generators set up keep what they put there: a vanilla chest a mod's
structure fills, or a spawner it names a mob for, came out empty and spawning pigs (OreSpawn's
structures, and any mod's dungeons). They get a 1.7.10 tile entity while their chunk generates, and its
inventory (each stack converted, mods' items too, for chests, furnaces, dispensers and the like) or its
mob and spawner settings go into the 1.20.1 block entity when the chunk is done. - A mob legacy code name for a spawner in a loaded world now reaches the 1.20.1 spawner too (before, only
the stand-in legacy code saw changed). - Mods' teleporters find the ground: they looked for it before the chunks there were loaded and saw only
air (OreSpawn's dimensions put players at the bottom of the world). The chunks around where the player
arrives are loaded first, as 1.7.10 loaded them when anything looked. - Mod portals no longer send players straight back (Atum, Advent of Ascension: the screen flickered
between "joining world" and "loading terrain"): the portal cooldown (timeUntilPortal) the mod set before
sending the player stayed with the player's legacy copy in the old dimension, and the player arrived in
the return portal with none. It now follows the player, and counts down every tick as 1.7.10 counted it. - One block can no longer break every 1.7.10 mod's textures: all legacy models and textures are made into
one resource pack, and a single block that threw while it was made (one of Witchery's, after Witchery failed
to load) left the whole pack out. Each block and item is now made on its own; one that fails looks like a
missing model, and the log names it. - Block ids past 4095 work for fire and statistics: 1.7.10's fire (flammability and spread) and its mining
statistics kept tables of 4096 blocks, which 0.5.0's wider block IDs overran. In a large pack (Erebus and
Atum added to the test pack) Witchery's logs landed past them, and Witchery failed to load. - Mods whose biomes moved to free IDs see them where they asked while they load: each mod's view of the
biome array was kept from before its own biomes were made (its free-ID check), and a count shared by every
mod's view let it stand. Erebus then found its biomes missing and was left out. - Mod dimensions answer biome questions with their own biomes, as 1.7.10's dimensions asked their biome
provider: legacy code got plains (Erebus's caves expect one of Erebus's biomes, and its caves failed). - A player sent to a mod dimension without a teleporter stands on its ground: the height there was read before
the chunk was loaded.
Retrofit 0.5.1-Beta
0.5.1-beta
-
Dimensions mods make while playing work (Galacticraft's space stations, and any mod's pocket or
personal dimensions made the same way): a dimension registered after the server started gets a
1.20.1 level then, with the mod's generator, saved with the world. It comes back when the mod registers
it again after a restart, and players who left the game there come back there. -
A mod's own teleports take the player along: mods that move a player to another dimension
themselves (as Galacticraft does, rather than through transferPlayerToDimension) now move the real
player too, to where the mod put them; before, the player stayed behind and fell. -
A server's dimensions share one world data store (
mapStorage), as on 1.7.10: dimensions made while
playing saw nothing the others kept there (Galacticraft: "bad home planet ID"). -
Server worlds have the
theChunkProviderServermods reach for (Galacticraft loads the arrival chunk
through it; it was null), its loaded-chunk map answering for the host's chunks (IC2 looks its
machines' chunks up there). -
Riders sit where the mount puts them, also below its top (Galacticraft's rockets: inside, not on
the nose), on clients too. -
Entities are drawn where 1.7.10 drew them, their
yOffsetabove their feet: Galacticraft's
rockets stand on the launch pad, not sunk into it. -
Mod dimensions generate blocks past id 4095 as themselves: the 1.7.10 chunks their generators
fill keep the bits of a block id past 12 beside them (0.5.0 widened block ids, which those chunks
could not hold). -
The legacy side compiles against Forge 1.7.10 as other developers have it (thanks to a fellow mod
developer): it used an event constructor Forge only adds at run time.checkAgainstCleanForgechecks. -
Biome ids no longer clash, as enchantment and potion ids no longer do: 1.7.10 let a biome taking another's id replace it (the other
mod's world generation then made the wrong biome); it gets a free id below 256 instead (logged). -
Mods that check their biome ids before taking them load together (thanks to a fellow mod
developer): Erebus and Advent of Ascension both default to biome 100, and Erebus refused to load
("can not use biome ID 100 because it's being used by ..."). While a mod loads, 1.7.10's biome array
(getBiomeGenArray) shows it the vanilla biomes and its own, at the ids it asked for, so its checks
pass (HBM's own check of its dimensions' biomes too, which left a dimension out); its biomes still get
free ids in the real array, so each mod's world generation finds its own. -
A dimension id another mod registered first is skipped with a warning (thanks to a fellow mod
developer): Forge's registerDimension threw, and 1.7.10 left the whole second mod out. -
Textures mods make at run time show (Extra Utilities' Tinkers' Construct parts of its materials,
450 icons): a texture in no mod's jar is asked of 1.7.10's resource manager, with the resource packs
mods add there. -
The Pistronics piston play test checks against real 1.7.10: its pistons move nothing in the test's
layout there either, and Retrofit leaves the same blocks, 1.20.1's prismarine among them. -
Block items and armor show their mods' own names (RotaryCraft's and Extra Utilities' blocks,
ManaMetal's armor), as items already did: their names were the keys (tile.block.beam.name, not
"Beam Block"). A name a mod's code gives as a key 1.20.1 can translate is translated (IC2 keeps its
names on the legacy side itself, and a resource reload took them out again: "ic2.blockAlloy.name").
Checked against real 1.7.10's names for the same mods: 187 names differed, these. -
Boss health bars and HUD drawing follow 1.7.10's order (thanks to a fellow mod developer): the
HUD's Pre events are fired too, BOSSHEALTH is among the elements (where The Titans draws its bosses'
bars), a cancelled Pre skips its element's Post, and a cancelled Pre(ALL) skips the rest, as Forge
1.7.10's GuiIngameForge did. -
1.7.10's vanilla-style boss bar shows in 1.20.1's boss bar overlay (thanks to a fellow mod
developer): the bar bosses set through BossStatus (Thaumcraft's, Witchery's and others using
vanilla's) is one entry there, named and filled as 1.7.10 drew it, and counts down as there, so it
goes when the boss does. GuiIngameForge.renderBossHealth and a cancelled Pre(BOSSHEALTH) turn it off,
as mods with their own bar (The Titans) do. -
Legacy entities another mod removes leave with their carriers (thanks to a fellow mod
developer): entity removers and lag clearers take entities out of the level without remove(), and
the client's removal path doesn't call it either. Each tick finds such carriers and takes their legacy
entities out of the legacy world, dead, as 1.7.10 did: The Titans' boss bars let go of removed titans. -
Watchable attributes reach client copies (thanks to a fellow mod developer), as 1.7.10's entity
tracker sent them: The Titans keep their bosses' health in an attribute of their own, so their bars
filled up again on clients. The network protocol is 3; client and server builds must match. -
The legacy profiler exists while mods load (thanks to a fellow mod developer): The Titans keep
Minecraft.mcProfiler from their boss bar's constructor, and it was null until the first frame. -
Mods' HUD code doesn't run as in-game on the title screen (thanks to a fellow mod developer):
with no player,currentScreenwas null, which mods read as "in game" before usingthePlayer
(Advent of Ascension failed every frame); a blank screen stands in, as 1.7.10's menus were screens.
What tick and render-tick handlers draw where nothing reads it is cleared, so it no longer piles up
until memory runs out (AoA's notice board on the title screen). -
A mod left out late keeps its textures and names. A mod that fails after registering its blocks
and items (Thaumcraft, in postInit) keeps them, but its jar was left out of the asset pack with it:
they drew as missing textures and showed their keys as names.
Retrofit 0.4.0-Beta
0.4.0-beta
Played through the client the way players do (new client-driven playtest), which showed most of
what made 0.3.x unplayable; all of these are fixed:
- One mod no longer takes the others down. A 1.7.10 mod that lacks a mod it requires (GregTech without IndustrialCraft 2), doesn't accept 1.7.10, or throws while loading is left out, with the mods that require it; every other mod loads, and the title screen says which mod was left out and why. Before, FML stopped, and the game started with no 1.7.10 mods at all. A mod that fails while a world starts carries on (logged).
- Broken event handlers are contained. A 1.7.10 event listener that throws is logged once, and the others still run. Before, one mod's handler could stop players being created (Galacticraft's handler did, which broke every client-side feature of every mod).
- Keys reach 1.7.10 in the world. Mods that poll the keyboard (IC2's jetpack, flight, hotkeys) saw nothing until a 1.7.10 GUI had been opened. 1.7.10's own key bindings (jump, sneak, movement, attack, use) now follow 1.20.1's, with the player's own bindings, and the local player's movement input too.
- Mods move the player. Motion and fall distance 1.7.10 code gives the player (jetpacks, flying armor, leaps, boots that soften falls) now move the 1.20.1 player; worn and carried items tick on the client too, as on 1.7.10.
- Singleplayer counts as singleplayer. 1.7.10's server now has an owner and online mode in singleplayer, and operators are the host's: mods that grant their protections to the singleplayer player or to operators (Carpenter's Blocks' covers, hammer and chisel) work.
- Galacticraft: its planets (the Moon, Mars, Asteroids), which it registers only once a server starts, are 1.20.1 dimensions; its server start no longer fails; rockets are placed on the launch pad, boarded, and launched. Space stations (dimensions made while playing) aren't supported yet.
- FiskHeroes 2.4 loads: Java 17 refused its classes ("Inconsistent constant pool data"); it needs Java 8's JavaScript engine for its heroes (Retrofit provides the standalone Nashorn, asked about like the other downloads); its sound packs download; and its HUD finds the player controller. Suits draw with their own models.
- Armor with its own model (Item.getArmorModel: hero suits, oxygen gear, robes, hats) draws that model on 1.20.1 players and creatures.
- Armor textures: textures at the top of a mod's assets (OreSpawn's armor) and armor textures for mods' own render prefixes are served; they were missing.
- GregTech's machine items draw in inventories and hands: block items were drawn with their block metadata (0-15) instead of the item damage 1.7.10 passed on, and blocks without icons got no item model at all.
- Mods' own negative GUI IDs (Galacticraft's) no longer collide with Retrofit's: those GUIs open.
- Invisible blocks (render type -1: Galacticraft's lit air) no longer show as missing-texture cubes.
- 1.7.10 code sees the whole JDK again: javax.script, java.sql and the rest of Java's platform
modules were invisible to it since Java 9. - Mods' own texture maps stitch, and every resource reload listener runs even when one fails.
- Vanilla 1.7.10 spawn eggs convert to 1.20.1's.
-Dretrofit.debugInteractions=truelogs right and left clicks on legacy blocks and motion legacy code gives players.
Retrofit 0.3.2-Beta
0.3.2-beta
- Fixed: 1.7.10 mods in the
modsfolder did nothing. Launchers (CurseForge, the Minecraft
Launcher) install mods intomods/, where Forge 1.20.1 silently skips 1.7.10 mods and Retrofit
didn't look: the game started with none of them. Retrofit now loads 1.7.10 mods frommods/too
(linked intoretrofit/mods, where 1.7.10 and its mods' dependency checks look), and
retrofit/modskeeps working. - Mods for other old Minecraft versions (1.12.2, 1.8.9...: their
mcmod.infosays) are not loaded,
and the title screen says which; with no 1.7.10 mods at all, it says where they go.
Retrofit 0.3.1-Beta
Changelog
0.3.1-beta
- Downloads only with permission. When the Minecraft launcher doesn't have Minecraft 1.7.10
and Forge 10.13.4.1614, Retrofit no longer downloads them on its own: the title screen lists
what it would download, from where (Mojang, Forge's Maven, Maven Central) and how much (about
50 MB), and asks: Download, Not now or Don't ask again. 1.7.10 mods load after a restart.
When everything is already there, nothing is asked. Dedicated servers stop with instructions
untildownload-files=yesis set inretrofit/retrofit.properties(created on first start),
likeeula.txt;neverthere turns downloading and asking off. - Mods that download mods. 1.7.10 mods with CodeChicken's DepLoader (CodeChickenCore,
Thaumcraft, NotEnoughItems) download missing dependencies while the game starts, without
asking. Retrofit finds those beforehand and lists them in the same question; 1.7.10 code may no
longer download mods itself, and a start that fails for a missing one says which file to get. -Dretrofit.minecraftHome=<dir>for launchers that keep.minecraftelsewhere.- Retrofit's downloads identify themselves (User-Agent "Retrofit (Minecraft mod)"); Retrofit
collects no data.
0.3.0-beta
1.7.10 and 1.20.1 mods now work together, as if they were made for the same version:
-
Energy: legacy machines speak RF (CoFH: BuildCraft, Thermal Expansion, EnderIO...) and IC2's
EU; 1.20.1 machines speak Forge Energy. Legacy machines offer Forge Energy to 1.20.1 cables and
machines (RF 1:1, 1 EU = 4 FE), and 1.20.1 energy blocks are RF handlers to legacy machines and
join IC2's energy net as a sink and a low-voltage source. -
Items: 1.20.1 items with no 1.7.10 form travel through legacy inventories, pipes,
machines and recipes as themselves (carried byretrofit:modern_item, numbered in
retrofit/modern-items.txt). The Ore Dictionary and 1.20.1 tags are joined both ways
(ingotCopper<->#forge:ingots/copper,logWood<->#minecraft:logs...). -
Fluids: every legacy fluid is a 1.20.1 fluid (with its own look) and every 1.20.1 fluid a
legacy one. Legacy tanks have Forge's fluid handler; 1.20.1 tanks are IFluidHandlers to legacy
pipes and pumps. -
Creatures: legacy mobs see 1.20.1 creatures, items and experience orbs (as their 1.7.10
classes: a zombie is anEntityZombie, a modded monster anEntityMob), target and hurt them,
push them, set them on fire, give them potions; magnets and vacuum hoppers pick up 1.20.1
items. 1.20.1 AI treats legacy monsters as enemies (iron golems, guards), and Smite and Bane of
Arthropods know undead and arthropod legacy mobs. -
Blocks: 1.20.1 mods' blocks are no longer plain stone to legacy code: quarries and miners
get their real drops, hardness, and light from the block, and legacy ore generators
replace modded stone. -
Recipes: legacy shaped and shapeless recipes (vanilla and Ore Dictionary ones) show in the
recipe book, JEI, REI and EMI; crafting itself still goes through the legacy recipe list. -
Creative tabs: each mod's 1.7.10 creative tab is a 1.20.1 tab with the mod's own order,
subtypes and prebuilt items; legacy items in vanilla tabs go to the matching 1.20.1 tabs. -
Enchantments: mods' enchantments are 1.20.1 enchantments (tooltips, enchanting table,
anvils, books), and enchantments on legacy gear convert both ways. -
Achievements: mods' achievements are advancements, a tab per achievement page.
-
Commands: tab completion for legacy commands.
-
Off hand: legacy items work in the off hand (except ones used over time, like bows).
-
Mobs that 1.20.1 spawns (natural spawning, spawn eggs, /summon) get their 1.7.10 spawn setup
(onSpawnWithEgg: equipment, variants, sizes); held items and armour of legacy mobs show on
clients. -
GregTech 5 Unofficial joins the tested mods. Fixed for it, and any mod alike: threads mods
start no longer keep a stopped server running (they are daemon threads, as 1.7.10's exit made
them in effect);Arrays.asList(...).toArray()keeps its array type as on Java 8 (GregTech's
import of IC2's recipes); a deadlock when world generation placed tile entities in chunks
that already had them; block items with more than 16 subtypes (GregTech's machines) kept only
the first 16;WorldServer.getPlayerManager()knew no players, so packets mods send to a
chunk's watchers (GregTech's machine data) never left. -
Vanilla GUIs legacy code opens (furnace, dispenser, hopper, brewing stand, beacon, crafting
table, enchanting table, anvil) work, and mods' chat messages throughMinecraft.ingameGUI. -
Full world height: legacy ore generators also fill the overworld below y 0 (a second,
shifted pass that only keeps ores, in stone and deepslate;-Dretrofit.deepOres=falseturns
it off). Legacy mobs pathfind, and legacy code sees loaded blocks below y 0, and mob spawners
1.20.1 placesTileEntityMobSpawners to legacy code. -
Wood types for 1.20.1 mods: each legacy wood (a log its mod crafts into planks) is also
<mod>:<wood>_planksand<mod>:<wood>_log, named from its English name, so mods that add
things for every wood type (Every Compat, Moonlight) find them. Those are names only: placing
one places the legacy block. Ore Dictionary names whose blocks all belong become block tags
too (#forge:ores/copper,#minecraft:logs). -
Performance: tile entities that never update (
canUpdate()false, like GregTech's ore
blocks) are no longer ticked, and legacy reads of the world are cheaper. In a heavy test pack
(IC2, GregTech, BuildCraft, Thaumcraft, Witchery, with Mekanism and JEI) the server tick with
574 legacy machines placed went from 37 to 10 ms (8 ms without any legacy blocks), and from 43
to 16 ms with about 400 legacy creatures around as well. -
Rendering: blocks drawn by mods' renderers are lit like 1.20.1 blocks (their sides were
dark); items with custom renderers and blocks with custom models are drawn in inventories and
hands where 1.7.10 drew them (they were too big, misplaced or missing), including renderers
that only handle some views (OreSpawn's Royal Guardian Sword and other big weapons in hand);
tools and weapons are held like tools. Colours: items' render passes and colours
(getColorFromItemStack: Thaumcraft's phials and wisps, spawn eggs, potions) and blocks'
colours (colorMultiplier: leaves and grass in their biome's colour) were missing. Text of
mods that reload their translations themselves (IC2's GUIs) is no longer raw keys. -
Lines and block highlights: lines legacy code draws (outlines, selection boxes, area
previews) show, andDrawBlockHighlightEventfires for the block the player looks at, so mods'
own outlines replace the vanilla one. -
Skies: mods' dimensions with their own sky renderer (
WorldProvider.getSkyRenderer) show
that sky instead of the overworld's. -
Leashes: leads work on legacy creatures as in 1.7.10 (the creature follows, lets go
beyond 10 blocks, drops the lead), and show on clients. -
Fixed: legacy render tick handlers (Thaumcraft's research popups) drew with the Tessellator
that chunk building uses at the same time ("Already tesselating!"); one failing part of the
legacy data pack no longer takes the rest (recipes, dimensions) with it. -
Fixed: potions legacy code throws (Witchery's coven witches) failed to convert or arrived as
water; they arrive as the 1.20.1 splash potion of the same effect. -
Villager trades: mods' trade handlers (
VillagerRegistry) give 1.20.1 villagers their
trades, by the profession each grew out of; trades for mods' own professions go to wandering
traders. -
Player rendering events:
RenderPlayerEvent(Pre, Specials, Post) fires around the local
player's model, so mods' capes, wings, goggles and transformations show, and cancelling or
moving the player works. -
Mods' dimensions become 1.20.1 dimensions (
retrofit:legacy_dim_N) generated by the mods' own
chunk generators and populators, with their creature lists and their providers' fog and sky
colours. Travel works throughtravelToDimensionand the mods' Teleporters (Witchery's Spirit
World, Torment and Mirror, Thaumcraft's Outer Lands, Mo' Creatures' Wyvern Lair). -
Players' legacy state (extended properties, Forge entity data, mod potions) survives dimension
changes and logouts. -
Potion effects in both directions; mod potions' attribute modifiers (speed, health, damage)
apply to the player. Flight that legacy code grants or takes away applies too. -
Riding: legacy mounts (brooms, horses, air sleds, dolphins) carry the player, steered with the
player's movement keys; legacy creatures riding legacy creatures ride in 1.20.1 as well. -
Living events for players (attack, hurt, death, fall, jump, heal, break speed,
LivingUpdateEvent);EntityJoinWorldEventfor legacy entities, and cancelling it works. -
Tooltips from
addInformationandItemTooltipEvent;Minecraft.objectMouseOver;
Minecraft.renderViewEntityis the player outside world rendering. -
Block touches (
onEntityCollidedWithBlock,onEntityWalking,onFallenUpon). -
Chunk loading: chunks forced by mods'
ForgeChunkManagertickets stay loaded in 1.20.1. -
Vanilla chests, furnaces, hoppers, dispensers, droppers, brewing stands and any block with an
item handler are inventories to legacy code (BuildCraft pipes, IC2 machines), as the matching
1.7.10 tile entity classes. -
Fixed: legacy tile entities got
onChunkUnloadonly as an invalidation (Ars Magica 2 power
networks lost their nodes);getEntityByIDon servers missed legacy entities (Thaumcraft's
Traveling Trunk); mod blocks in legacy dimensions' generated terrain; container contents with
more slots than the client's copy of a m...