Getting Started (Mod Developers)
Embers Text API is published to a public Maven repository. Add it as a dependency in your Gradle build to get access to the full Java API.
Maven Repository
https://maven.tysontheember.dev
- Groovy DSL
- Kotlin DSL
repositories {
maven { url = 'https://maven.tysontheember.dev' }
}
repositories {
maven("https://maven.tysontheember.dev")
}
Dependency Snippets
Replace VERSION with the release you want (e.g. 2.4.0).
Group ID: net.tysontheember.emberstextapi
| Loader | Minecraft | Artifact ID |
|---|---|---|
| Fabric | 1.20.1 | emberstextapi-fabric-1.20.1 |
| Fabric | 1.21.1 | emberstextapi-fabric-1.21.1 |
| NeoForge | 1.21.1 | emberstextapi-neoforge-1.21.1 |
| Forge | 1.20.1 | emberstextapi-forge-1.20.1 |
- Fabric 1.21.1
- NeoForge 1.21.1
- Fabric 1.20.1
- Forge 1.20.1
- Groovy DSL
- Kotlin DSL
dependencies {
modImplementation "net.tysontheember.emberstextapi:emberstextapi-fabric-1.21.1:VERSION"
}
dependencies {
modImplementation("net.tysontheember.emberstextapi:emberstextapi-fabric-1.21.1:VERSION")
}
- Groovy DSL
- Kotlin DSL
dependencies {
implementation "net.tysontheember.emberstextapi:emberstextapi-neoforge-1.21.1:VERSION"
}
dependencies {
implementation("net.tysontheember.emberstextapi:emberstextapi-neoforge-1.21.1:VERSION")
}
- Groovy DSL
- Kotlin DSL
dependencies {
modImplementation "net.tysontheember.emberstextapi:emberstextapi-fabric-1.20.1:VERSION"
}
dependencies {
modImplementation("net.tysontheember.emberstextapi:emberstextapi-fabric-1.20.1:VERSION")
}
- Groovy DSL
- Kotlin DSL
dependencies {
// fg.deobf() is required — see note below
implementation fg.deobf("net.tysontheember.emberstextapi:emberstextapi-forge-1.20.1:VERSION")
}
dependencies {
implementation(fg.deobf("net.tysontheember.emberstextapi:emberstextapi-forge-1.20.1:VERSION"))
}
The Forge 1.20.1 artifact uses SRG (intermediate) names. You must wrap it with fg.deobf() so ForgeGradle remaps it back to Mojang names for your compile classpath. This is standard practice for Forge mod dependencies on this Minecraft version.
Sources JARs
Every artifact ships a sources JAR (classifier sources). Your IDE picks it up automatically — no extra configuration needed.
Which Artifact to Use?
Use the artifact matching your loader and Minecraft version. The Fabric and NeoForge artifacts include all shared API code.
If you're writing a multiloader mod with your own common module, depend on the loader-specific artifact in the appropriate loader subproject only.
Versioning
Versions follow MAJOR.MINOR.PATCH (e.g., 2.4.0). The mod version is separate from the Minecraft version — the MC version is part of the artifact ID.
Only release versions are published. There are no snapshot builds.
Troubleshooting
Forge 1.20.1 — Mixin crash on launch (InvalidInjectionException)
If your dev client crashes on startup with an error like:
Critical injection failure: @Inject annotation on emberstextapi$visit could not find any
targets matching '...TranslatableContents;m_213724_(...)'
this is a mixin refmap remapping issue. The published Forge jar embeds an SRG-mapped refmap (required for production), but in your dev environment fg.deobf() remaps the bytecode to Parchment/Mojang names without touching the refmap JSON. The mixin system then looks for SRG names in a class where the methods are now Parchment-named, and fails.
Fix: add these JVM args to every run configuration in your build.gradle:
minecraft {
runs {
configureEach {
jvmArgs(
"-Dmixin.env.remapRefMap=true",
"-Dmixin.env.refMapRemappingFile=${projectDir}/build/createSrgToMcp/output.srg"
)
}
// ... your client / server run blocks
}
}
output.srg is the SRG→Parchment mapping file that ForgeGradle generates automatically for your project (via the createSrgToMcp task). With remapRefMap=true, the mixin system translates EmbersTextAPI's refmap entries at load time so they match your deobfed classpath.
After adding this, re-run ./gradlew genIntellijRuns (or your equivalent IDE setup task) to pick up the updated JVM args.
Next Steps
- Sending Messages — Create your first
ImmersiveMessageand send it to a player - Markup in Java — Use
MarkupParserto parse markup strings - Custom Effects — Extend the effect system with your own effects