Перейти к содержимому
Mineforgian

Embers Text API

Use fancy text effects anywhere, including custom fonts!

Загрузки
352K
Подписчики
21
Обновлён
7 июля 2026 г.
Лицензия
Embers-Modding-License

Опубликован 25 сентября 2025 г.

Header Banner

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.

Rainbow - cycling colors Neon - SDF glow halo Typewriter - character-by-character reveal Glitch - digital distortion Matrix - scramble and resolve Shatter - text breaks apart

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!

Documentation Discord

Ченджлог

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 gains wrap(boolean) and wrap(boolean, int) alongside the existing wrap(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.
  • \n in 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. ImmersiveMessage carried its client-only rendering, so loading the class on a server threw NoClassDefFoundError: 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 wrap set, a \n in 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 gains wrap(boolean) and wrap(boolean, int) alongside the existing wrap(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.
  • \n in 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. ImmersiveMessage carried its client-only rendering, so loading the class on a server threw NoClassDefFoundError: 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 wrap set, a \n in 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 gains wrap(boolean) and wrap(boolean, int) alongside the existing wrap(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.
  • \n in 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. ImmersiveMessage carried its client-only rendering, so loading the class on a server threw NoClassDefFoundError: 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 wrap set, a \n in 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 gains wrap(boolean) and wrap(boolean, int) alongside the existing wrap(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.
  • \n in 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. ImmersiveMessage carried its client-only rendering, so loading the class on a server threw NoClassDefFoundError: 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 wrap set, a \n in 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 gains wrap(boolean) and wrap(boolean, int) alongside the existing wrap(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.
  • \n in 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. ImmersiveMessage carried its client-only rendering, so loading the class on a server threw NoClassDefFoundError: 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 wrap set, a \n in 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 gains wrap(boolean) and wrap(boolean, int) alongside the existing wrap(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.
  • \n in 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. ImmersiveMessage carried its client-only rendering, so loading the class on a server threw NoClassDefFoundError: 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 wrap set, a \n in 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 gains wrap(boolean) and wrap(boolean, int) alongside the existing wrap(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.
  • \n in 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. ImmersiveMessage carried its client-only rendering, so loading the class on a server threw NoClassDefFoundError: 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 wrap set, a \n in 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 gains wrap(boolean) and wrap(boolean, int) alongside the existing wrap(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.
  • \n in 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. ImmersiveMessage carried its client-only rendering, so loading the class on a server threw NoClassDefFoundError: 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 wrap set, a \n in the message rendered as a missing-glyph box instead of starting a new line; it now breaks correctly whether or not wrapping is enabled.

Комментарии

Загружаем…