- Java 99.4%
- GLSL 0.6%
| .forgejo/workflows | ||
| .github/ISSUE_TEMPLATE | ||
| common-1.20.1 | ||
| common-1.21.1 | ||
| common-26.1 | ||
| fabric-1.20.1 | ||
| fabric-1.21.1 | ||
| fabric-26.1 | ||
| forge-1.20.1 | ||
| gradle/wrapper | ||
| neoforge-1.21.1 | ||
| neoforge-26.1 | ||
| .gitattributes | ||
| .gitignore | ||
| build.gradle | ||
| CHANGELOG.md | ||
| FONT_LICENSES.md | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| LICENSE.md | ||
| README.md | ||
| settings.gradle | ||
EmbersTextAPI
Advanced text rendering API for Minecraft mods with visual effects, animations, and markup parsing.
For full documentation, guides, and examples, visit tysontheember.dev.
Features
- Visual Effects: Rainbow, glitch, wave, shake, pulse, and more
- Animations: Typewriter text, fade in/out, progressive reveal
- Markup Parser: XML-style tags for easy text styling
- Translation Keys:
<lang:KEY>resolves to each viewer's localized text; supportsargsfor%ssubstitution - MSDF Font Rendering: Crisp TrueType/OpenType fonts at any scale using Multi-Channel Signed Distance Fields with sharp corner reproduction
- Inline Rendering: Items and entities within text
- Server-Side Control: Send styled messages from server to clients
- Highly Customizable: Per-character effects, gradients, backgrounds
Supported Versions
| Minecraft Version | Loader | Status |
|---|---|---|
| 1.20.1 | Forge | Fully Supported |
| 1.20.1 | Fabric | Fully Supported |
| 1.21.1 | NeoForge | Fully Supported |
| 1.21.1 | Fabric | Fully Supported |
| 26.1.x | NeoForge | Alpha (NeoForge 26.1 itself is beta) |
| 26.1.x | Fabric | Alpha (NeoForge 26.1 itself is beta) |
Patchouli Compatibility
EmbersTextAPI is compatible with Patchouli including books that use "i18n": true. Patchouli's tokenizer runs without interference: user-defined book macros, $(...) codes, and translations behave as authored.
ETA markup that survives Patchouli's pipeline still renders effects on the resulting components. To avoid clashing with user-defined Patchouli macros, prefer namespaced ETA tags inside book entries — for example <eta-rainbow>...</eta-rainbow> rather than <rainbow>...</rainbow>. If a Patchouli book defines a macro for an unprefixed name (e.g. "<b>": "$(l)"), the macro takes precedence; the ETA tag will not run on that text.
Translation Keys
Embed any vanilla translation key in markup; each viewer sees their own client locale:
/eta send @p 50 <lang:item.minecraft.diamond>
Two forms are accepted:
- Shorthand:
<lang:item.minecraft.diamond> - Attribute:
<lang key=item.minecraft.diamond>or<lang key='commands.give.success.single' args='1,Diamond,Steve'>
args is comma-separated; quote the whole args value if any token contains whitespace. Missing keys render literally (matching Component.translatable's default behavior). Translation file content is treated as plain text — ETA tags written inside a translation are not re-parsed.
Installation
- Download the appropriate jar for your Minecraft version and loader
- Place the jar in your
modsfolder - Launch Minecraft with the corresponding loader installed
Building from Source
Requires Java 17 (1.20.1) and Java 21 (1.21.1) toolchains; everything else (Gradle, Forge, Loom, MDG) is fetched by the wrappers.
The root Gradle build runs Fabric 1.20.1/1.21.1/26.1, NeoForge 1.21.1/26.1 and the common-* shared modules. Forge 1.20.1 is a separate Gradle 8.8 build inside forge-1.20.1/ (ForgeGradle 6 doesn't support Gradle 9), exposed through forge1201* lifecycle tasks on the root.
# Build everything
./gradlew assemble forge1201Build
# Per-loader run-in-dev
./gradlew forge1201RunClient # Forge 1.20.1 (delegates to forge-1.20.1/gradlew)
./gradlew :fabric-1.20.1:runClient
./gradlew :fabric-1.21.1:runClient
./gradlew :neoforge-1.21.1:runClient
./gradlew :neoforge-26.1:runClient
If you want to work on forge-1.20.1 directly, cd forge-1.20.1 && ./gradlew runClient works too — same effect, slightly less typing.
Contributing
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Test your changes on MC 1.20.1 (Forge/Fabric) and 1.21.1 (NeoForge/Fabric)
- Submit a pull request
License
This project is licensed under my own License - see the LICENSE file for details.
Links
- Website: tysontheember.dev
- GitHub: github.com/TysonTheEmber/EmbersTextAPI
- Issues: GitHub Issues