
Embers Text API
Use fancy text effects anywhere, including custom fonts!
- Загрузки
- 352K
- Подписчики
- 21
- Обновлён
- 7 июля 2026 г.
- Лицензия
- Embers-Modding-License
Опубликован 25 сентября 2025 г.

A library mod that gives full control over animated, styled text overlays. Display rich on-screen messages with effects like rainbow gradients, neon glows, typewriter reveals, glitch distortion, and more… all composable and stackable.
Click any preview - every effect has an animated example in the docs.

Features
- Visual Effects: Rainbow, gradient, glitch, wave, shake, pulse, outline, and more… per-character and stackable
- Neon Glow: SDF-based halos around glyphs, with color, radius, softness, and pulse control
- Animations: Typewriter text, obfuscate reveal/hide, scrolling marquees
- Message Effects: Whole-message motion like slam, shatter, matrix, slide, breathe, and spin
- Markup Parser: XML-style tags for easy text styling
<rainbow>,<wave>;,<neon>,[slam] - 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, anchors, and queue channels
Commands
| Command | Description |
|---|---|
/eta send player duration text |
Send a styled message |
/eta queue player channel definition |
Queue sequential messages on a channel |
/eta test id |
Play a built-in demo message |
/eta test effect name |
Preview an individual effect |
/eta test combo effects |
Preview effect combinations |
For Developers
Embers Text API provides a full Java API for sending styled messages from the server. Register custom effects, parse markup, or build spans programmatically.
Check the documentation for integration guides and API reference.
For Pack Devs
- This is a library/api mod, it does nothing in gameplay on its own, but the command system lets you create and test effects in-game, and the inline markup (like
<rainbow>or<neon>) styles item names, tooltips, and quest descriptions! - Safe to include in any pack.
- Great for quest descriptions, tips, boss introductions, or any stylish text overlay.
- Works with KubeJS and datapacks! v3 includes built in KubeJS support!
Ченджлог
3.0.2+fabric-1.20.1Релиз1.20.1 · 7 июля 2026 г.
Changelog
v3.0.2 — 2026-07-07
- The builder
effect(...)method now recognizes message effects and message attributes, not just per-glyph text effects..effect("rock")or.effect("sound sound=...")from KubeJS (or Java) silently did nothing because the name was only looked up in the text-effect registry; it now routes to the right registry like markup tags do. - Text wrapping is on by default so long messages no longer run off screen.
Without an explicit width it wraps to about 90% of the screen, adjusted for
scale. The new
[wrap]tag controls it:[wrap false](or[wrap off]) disables wrapping,[wrap 200]sets an explicit width. The builder gainswrap(boolean)andwrap(boolean, int)alongside the existingwrap(int). - Wrapped and multi-line text now respects
align. Each line is centered (or right-aligned) within the message box instead of always starting at the left. \nin a command now starts a new line, e.g./eta send @p 100 line one \n line two.
v3.0.1 — 2026-07-04
- Fixed a dedicated-server crash when a command built an immersive message,
such as an FTB Quests command reward running
/eta queue.ImmersiveMessagecarried its client-only rendering, so loading the class on a server threwNoClassDefFoundError: MultiBufferSource. The rendering now lives in a client-only holder, leaving the message data safe to load server-side. This affected every loader and version; single-player was unaffected because the client classes are present there. - Unwrapped text now honors hard line breaks. Without
wrapset, a\nin the message rendered as a missing-glyph box instead of starting a new line; it now breaks correctly whether or not wrapping is enabled.
3.0.2+forge-1.20.1Релиз1.20.1 · 7 июля 2026 г.
Changelog
v3.0.2 — 2026-07-07
- The builder
effect(...)method now recognizes message effects and message attributes, not just per-glyph text effects..effect("rock")or.effect("sound sound=...")from KubeJS (or Java) silently did nothing because the name was only looked up in the text-effect registry; it now routes to the right registry like markup tags do. - Text wrapping is on by default so long messages no longer run off screen.
Without an explicit width it wraps to about 90% of the screen, adjusted for
scale. The new
[wrap]tag controls it:[wrap false](or[wrap off]) disables wrapping,[wrap 200]sets an explicit width. The builder gainswrap(boolean)andwrap(boolean, int)alongside the existingwrap(int). - Wrapped and multi-line text now respects
align. Each line is centered (or right-aligned) within the message box instead of always starting at the left. \nin a command now starts a new line, e.g./eta send @p 100 line one \n line two.
v3.0.1 — 2026-07-04
- Fixed a dedicated-server crash when a command built an immersive message,
such as an FTB Quests command reward running
/eta queue.ImmersiveMessagecarried its client-only rendering, so loading the class on a server threwNoClassDefFoundError: MultiBufferSource. The rendering now lives in a client-only holder, leaving the message data safe to load server-side. This affected every loader and version; single-player was unaffected because the client classes are present there. - Unwrapped text now honors hard line breaks. Without
wrapset, a\nin the message rendered as a missing-glyph box instead of starting a new line; it now breaks correctly whether or not wrapping is enabled.
3.0.2+neoforge-26.2Релиз26.2 · 7 июля 2026 г.
Changelog
v3.0.2 — 2026-07-07
- The builder
effect(...)method now recognizes message effects and message attributes, not just per-glyph text effects..effect("rock")or.effect("sound sound=...")from KubeJS (or Java) silently did nothing because the name was only looked up in the text-effect registry; it now routes to the right registry like markup tags do. - Text wrapping is on by default so long messages no longer run off screen.
Without an explicit width it wraps to about 90% of the screen, adjusted for
scale. The new
[wrap]tag controls it:[wrap false](or[wrap off]) disables wrapping,[wrap 200]sets an explicit width. The builder gainswrap(boolean)andwrap(boolean, int)alongside the existingwrap(int). - Wrapped and multi-line text now respects
align. Each line is centered (or right-aligned) within the message box instead of always starting at the left. \nin a command now starts a new line, e.g./eta send @p 100 line one \n line two.
v3.0.1 — 2026-07-04
- Fixed a dedicated-server crash when a command built an immersive message,
such as an FTB Quests command reward running
/eta queue.ImmersiveMessagecarried its client-only rendering, so loading the class on a server threwNoClassDefFoundError: MultiBufferSource. The rendering now lives in a client-only holder, leaving the message data safe to load server-side. This affected every loader and version; single-player was unaffected because the client classes are present there. - Unwrapped text now honors hard line breaks. Without
wrapset, a\nin the message rendered as a missing-glyph box instead of starting a new line; it now breaks correctly whether or not wrapping is enabled.
3.0.2+neoforge-1.21.1Релиз1.21.1 · 7 июля 2026 г.
Changelog
v3.0.2 — 2026-07-07
- The builder
effect(...)method now recognizes message effects and message attributes, not just per-glyph text effects..effect("rock")or.effect("sound sound=...")from KubeJS (or Java) silently did nothing because the name was only looked up in the text-effect registry; it now routes to the right registry like markup tags do. - Text wrapping is on by default so long messages no longer run off screen.
Without an explicit width it wraps to about 90% of the screen, adjusted for
scale. The new
[wrap]tag controls it:[wrap false](or[wrap off]) disables wrapping,[wrap 200]sets an explicit width. The builder gainswrap(boolean)andwrap(boolean, int)alongside the existingwrap(int). - Wrapped and multi-line text now respects
align. Each line is centered (or right-aligned) within the message box instead of always starting at the left. \nin a command now starts a new line, e.g./eta send @p 100 line one \n line two.
v3.0.1 — 2026-07-04
- Fixed a dedicated-server crash when a command built an immersive message,
such as an FTB Quests command reward running
/eta queue.ImmersiveMessagecarried its client-only rendering, so loading the class on a server threwNoClassDefFoundError: MultiBufferSource. The rendering now lives in a client-only holder, leaving the message data safe to load server-side. This affected every loader and version; single-player was unaffected because the client classes are present there. - Unwrapped text now honors hard line breaks. Without
wrapset, a\nin the message rendered as a missing-glyph box instead of starting a new line; it now breaks correctly whether or not wrapping is enabled.
3.0.2+neoforge-26.1Релиз26.1, 26.1.1, 26.1.2 · 7 июля 2026 г.
Changelog
v3.0.2 — 2026-07-07
- The builder
effect(...)method now recognizes message effects and message attributes, not just per-glyph text effects..effect("rock")or.effect("sound sound=...")from KubeJS (or Java) silently did nothing because the name was only looked up in the text-effect registry; it now routes to the right registry like markup tags do. - Text wrapping is on by default so long messages no longer run off screen.
Without an explicit width it wraps to about 90% of the screen, adjusted for
scale. The new
[wrap]tag controls it:[wrap false](or[wrap off]) disables wrapping,[wrap 200]sets an explicit width. The builder gainswrap(boolean)andwrap(boolean, int)alongside the existingwrap(int). - Wrapped and multi-line text now respects
align. Each line is centered (or right-aligned) within the message box instead of always starting at the left. \nin a command now starts a new line, e.g./eta send @p 100 line one \n line two.
v3.0.1 — 2026-07-04
- Fixed a dedicated-server crash when a command built an immersive message,
such as an FTB Quests command reward running
/eta queue.ImmersiveMessagecarried its client-only rendering, so loading the class on a server threwNoClassDefFoundError: MultiBufferSource. The rendering now lives in a client-only holder, leaving the message data safe to load server-side. This affected every loader and version; single-player was unaffected because the client classes are present there. - Unwrapped text now honors hard line breaks. Without
wrapset, a\nin the message rendered as a missing-glyph box instead of starting a new line; it now breaks correctly whether or not wrapping is enabled.
3.0.2+fabric-26.2Релиз26.2 · 7 июля 2026 г.
Changelog
v3.0.2 — 2026-07-07
- The builder
effect(...)method now recognizes message effects and message attributes, not just per-glyph text effects..effect("rock")or.effect("sound sound=...")from KubeJS (or Java) silently did nothing because the name was only looked up in the text-effect registry; it now routes to the right registry like markup tags do. - Text wrapping is on by default so long messages no longer run off screen.
Without an explicit width it wraps to about 90% of the screen, adjusted for
scale. The new
[wrap]tag controls it:[wrap false](or[wrap off]) disables wrapping,[wrap 200]sets an explicit width. The builder gainswrap(boolean)andwrap(boolean, int)alongside the existingwrap(int). - Wrapped and multi-line text now respects
align. Each line is centered (or right-aligned) within the message box instead of always starting at the left. \nin a command now starts a new line, e.g./eta send @p 100 line one \n line two.
v3.0.1 — 2026-07-04
- Fixed a dedicated-server crash when a command built an immersive message,
such as an FTB Quests command reward running
/eta queue.ImmersiveMessagecarried its client-only rendering, so loading the class on a server threwNoClassDefFoundError: MultiBufferSource. The rendering now lives in a client-only holder, leaving the message data safe to load server-side. This affected every loader and version; single-player was unaffected because the client classes are present there. - Unwrapped text now honors hard line breaks. Without
wrapset, a\nin the message rendered as a missing-glyph box instead of starting a new line; it now breaks correctly whether or not wrapping is enabled.
3.0.2+fabric-1.20.1Релиз1.20.1 · 7 июля 2026 г.
Changelog
v3.0.2 — 2026-07-07
- The builder
effect(...)method now recognizes message effects and message attributes, not just per-glyph text effects..effect("rock")or.effect("sound sound=...")from KubeJS (or Java) silently did nothing because the name was only looked up in the text-effect registry; it now routes to the right registry like markup tags do. - Text wrapping is on by default so long messages no longer run off screen.
Without an explicit width it wraps to about 90% of the screen, adjusted for
scale. The new
[wrap]tag controls it:[wrap false](or[wrap off]) disables wrapping,[wrap 200]sets an explicit width. The builder gainswrap(boolean)andwrap(boolean, int)alongside the existingwrap(int). - Wrapped and multi-line text now respects
align. Each line is centered (or right-aligned) within the message box instead of always starting at the left. \nin a command now starts a new line, e.g./eta send @p 100 line one \n line two.
v3.0.1 — 2026-07-04
- Fixed a dedicated-server crash when a command built an immersive message,
such as an FTB Quests command reward running
/eta queue.ImmersiveMessagecarried its client-only rendering, so loading the class on a server threwNoClassDefFoundError: MultiBufferSource. The rendering now lives in a client-only holder, leaving the message data safe to load server-side. This affected every loader and version; single-player was unaffected because the client classes are present there. - Unwrapped text now honors hard line breaks. Without
wrapset, a\nin the message rendered as a missing-glyph box instead of starting a new line; it now breaks correctly whether or not wrapping is enabled.
3.0.2+fabric-26.1Релиз26.1, 26.1.1, 26.1.2 · 7 июля 2026 г.
Changelog
v3.0.2 — 2026-07-07
- The builder
effect(...)method now recognizes message effects and message attributes, not just per-glyph text effects..effect("rock")or.effect("sound sound=...")from KubeJS (or Java) silently did nothing because the name was only looked up in the text-effect registry; it now routes to the right registry like markup tags do. - Text wrapping is on by default so long messages no longer run off screen.
Without an explicit width it wraps to about 90% of the screen, adjusted for
scale. The new
[wrap]tag controls it:[wrap false](or[wrap off]) disables wrapping,[wrap 200]sets an explicit width. The builder gainswrap(boolean)andwrap(boolean, int)alongside the existingwrap(int). - Wrapped and multi-line text now respects
align. Each line is centered (or right-aligned) within the message box instead of always starting at the left. \nin a command now starts a new line, e.g./eta send @p 100 line one \n line two.
v3.0.1 — 2026-07-04
- Fixed a dedicated-server crash when a command built an immersive message,
such as an FTB Quests command reward running
/eta queue.ImmersiveMessagecarried its client-only rendering, so loading the class on a server threwNoClassDefFoundError: MultiBufferSource. The rendering now lives in a client-only holder, leaving the message data safe to load server-side. This affected every loader and version; single-player was unaffected because the client classes are present there. - Unwrapped text now honors hard line breaks. Without
wrapset, a\nin the message rendered as a missing-glyph box instead of starting a new line; it now breaks correctly whether or not wrapping is enabled.
Комментарии
Загружаем…







