Links
Tags
Creators
Details
0.3.2
Compatibility
Required content
Changes
Shared component state, and the IDE storm.
Two bugs that only showed up once mods started leaning on 0.3.x. Update if you use data components, or if your IDE has started demanding you implement methods you never wrote.
- Fixed: every item shared one set of components.
RetroComponentType.getDefault()returned the exact instance passed at registration, soRetroComponents.get(stack, TYPE)on any stack that had not set a value handed back the same object every time. Mutating it —get(stack, LIST).add(x)— wrote into the value every other stack reads, so the data appeared on every item in the game at once, and deleting one item's value looked like it worked only sometimes. Only mutable components could show it.List/Set/Mapdefaults are now copied per read, so existing mods are fixed with no code change, andRetroComponents.registerSupplied(id, supplier, serializer)covers a mutable default of a type RetroAPI cannot copy for you. - Fixed: mods inherited 56 unimplemented methods.
RetroItemAccessandRetroBlockAccessdeclared their methods abstract, and 0.3.0 made interface injection actually work — soItemandBlockgenuinely implement them, and from an IDE's point of view every class extending either had to implement all 56.javacnever complained, because it does not re-verify a binary superclass, which is why it looked like an IDE-only hallucination and only surfaced once the class implemented some interface of its own. Every method is now adefaultthat throws; the mixin's implementation is a method on the class, and a class method always wins over an interface default, so runtime behavior is unchanged. - Fixed: the client no longer tries to load dedicated-server classes. Thirteen mixins targeting
net.minecraft.server.*sat in the mixin config's common list, so every client launch attempted each one and loggedCannot load class ... in environment type CLIENT. b1.7.3 has no integrated server — singleplayer is the client — so none could ever apply there. A client launch now logs no mixin warnings at all.
Reminder for anyone storing block state as an integer: RetroBlockState.getIndex() is 12 bits, not 4. The low nibble rides vanilla metadata and bits 4–11 live in the sidecar, so world.setBlockMeta(x, y, z, state.getIndex()) silently truncates for any block with more than 16 states. Use RetroStates.set(...).
Full feature set: https://matthewperiut.github.io/retroapi/features-0.3.0.html
Built and validated with -Pstationapi on Ornithe (b1.7.3): all four launch smoke suites pass (client, server, and both with StationAPI), plus the headless populate self-check and the vanilla↔StationAPI conversion round-trip.
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:MC2Oprt0"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:iFaqJ8QH:MC2Oprt0"
}


