Links
Tags
Creators
Details
0.3.7+babric
Compatibility
Changes
Four releases' worth of work going out as one, because none of it shipped: 0.3.6 was the last tag and everything here has been sitting on main since.
World generation
world.noise is the modern noise stack ported whole, taking a firstOctave and an amplitude per octave rather than beta's fixed halving spectrum, and summing two Perlins at incommensurable scales so the lattice artifacts cancel. RetroCubicBiomes stores biomes on a sparse 16x16x16 grid with the world, which is what beta's getBiome(temperature, rainfall) cannot express: a cavern under a desert is not a property of the desert, and one a player has walked through has an identity that has to survive being unloaded. RetroCarvers makes carving registrable and vanilla carving switchable, running against the chunk's raw byte[] before lighting or decoration exists. RetroWorldHeight extends a dimension vertically, data layer only.
A launcher that works
starac was declared modRuntimeOnly, and maven-publish exports that into the POM at runtime scope, so every mod depending on RetroAPI silently got it on the runtime classpath. Its MinecraftMixin redirects a noCanvas target that does not exist on Fabric's applet path, and a redirect that finds nothing is a hard failure, so runClient in a consumer's project died before drawing a frame in a mixin belonging to a mod they never asked for. It is replaced by retrodragon 0.1.10.
Blocks that are not cubes
Beta decides a lot of things once, for a whole block type, and then applies the answer to a piece of one.
Smooth lighting is four brightness values, one per corner of the whole block face, handed to face methods that draw at whatever bounding box is current. A full cube occupies those same corners. A stair's step spans half the block and gets the whole gradient squeezed into half the distance, and since a stair is two boxes in two passes, the halves disagree where they meet. Those four numbers describe a bilinear field, so it is now sampled at the corners the quad actually covers, which is what modern Minecraft does.
Texture coordinates had the same problem with a twist. Two of the six faces emit their horizontal coordinate reversed, which on a full cube only mirrors the tile and is old enough to count as intended, but on a partial box also takes the wrong half. The mirroring is kept and the sub-rectangle it implies is used. Both corrections reproduce vanilla's own numbers for a full face, epsilon included, so ordinary blocks do not move.
droppedItemScale covers beta doubling the dropped size of anything that is not a full cube, a rule about torches and flowers that lands a stair at twice the size of everything else in the pile. setFlatItem covers the other end: beta draws its own door and pane as a flat sprite because a three pixel panel is unreadable at inventory size, and custom render types had no way to say so.
A block can present as another block
RetroBlockDisguise answers, per position, three questions beta only answers per block type: which tool works (mineableTools takes a block, no coordinates), what the particles look like (BlockParticle reads the block's static sprite), and what it sounds like (soundGroup is a field).
public class FramedBlock extends Block implements RetroBlockDisguise {
public Block disguisedBlock(BlockView world, int x, int y, int z) { return whatItWears(world, x, y, z); }
}
Tools are additive on purpose: a wooden frame wearing stone answers to an axe and a pickaxe, because subtracting would mean a block got harder to break the more it had been decorated. Sounds needed two hooks, not one: beta plays a tapping sound every four ticks while you mine, from the interaction managers, and a separate crunch when the block gives way, from world event 2001. The tapping is what you hear for nearly the whole interaction. The crunch and the debris cloud also needed the disguise written down before the block leaves, since both are produced by an event that arrives after the position is already empty.
The StationAPI smoke suite could not run
smokeTest -Pstationapi had stopped launching anything, and two of the three causes came in with the toolchain move: :stationapi and :test:stapi never got the org.lwjgl claim the root project took, and :test:stapi still asked for a starac_version property that no longer exists. A suite that cannot start looks exactly like a suite with nothing to report.
Running again, it found a real bug on the first try: DroppedItemScaleMixin crashed the StationAPI client on load, because StationAPI's arsenic renderer merges ItemRenderer.render and an injector cannot target a method another mixin has merged at the same priority. That is a hard error at class load, not a hook quietly not applying. It is disabled under StationAPI, so the dropped item scale is a no-StationAPI feature.
All four suites pass: client 60/60, server 46/47 (one not on that side's classpath), stapiClient 63/63, stapiServer 47/48.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:iFaqJ8QH:VkzwtDVZ"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:iFaqJ8QH:VkzwtDVZ"
}

