Presets
A preset packages one or more effects plus optional style overrides (bold, color, font, etc.) into a named JSON file. Once loaded, you use the preset’s name as a tag directly in markup. No tag parameters required.
Bundled presets
Section titled “Bundled presets”ETA ships eight presets in assets/emberstextapi/presets/:
| Name | Description |
|---|---|
arcane | Soft purple text in the Cinzel font with a violet neon glow and low-amplitude turbulence |
chaotic | Bold text with fast rainbow cycling, glitch flicker, and high-amplitude bounce |
divine | Bold gold text in the Almendra font with a warm neon glow, gentle wave, and slow pulse |
epic | Bold italic purple text with a fast pulse and medium wave |
frozen | Italic text in the Cardo font with a blue-to-white gradient, slow pendulum sway, and blue neon glow |
infernal | Bold text in the Norse font with a red-to-gold gradient, heavy shake, and red neon glow |
legendary | Bold gold text with rainbow cycling and a default neon glow |
spooky | Italic dark-purple text with low-amplitude shake and a slow fade |
Where presets live
Section titled “Where presets live”assets/<namespace>/presets/<name>.jsonPresets are loaded from resource packs (client-side). They are not data pack entries and are not available server-side. The loader runs inside a FontManager.reload hook, so presets refresh whenever resource packs reload: F3+T in-game, or toggling a resource pack in the menu.
Your own preset files go under your mod’s or resource pack’s assets/<your-namespace>/presets/ folder. The file’s base name (without .json, lowercased) becomes the tag name.
Preset JSON schema
Section titled “Preset JSON schema”The infernal preset covers every field used across all eight bundled presets:
{ "format_version": 1, "effects": [ { "type": "gradient", "params": { "colors": "FF4400,FFD700" } }, { "type": "shake", "params": { "amplitude": 0.8, "frequency": 4.0 } }, { "type": "neon", "params": { "color": "FF2200" } } ], "styles": { "bold": true, "italic": false, "underline": false, "strikethrough": false, "obfuscated": false, "color": "RRGGBB", "font": "namespace:font_name" }}| Field | Required | Description |
|---|---|---|
format_version | yes | Must be 1. Files with any other value are rejected at load time. |
effects | yes | Array of effect entries. Must contain at least one entry. |
effects[].type | yes | Effect name, lowercase. Must be a registered effect type (same names used as markup tags). |
effects[].params | no | Object of key/value parameters forwarded to the effect. Omit the params key entirely if the effect takes no parameters (see the legendary preset’s neon entry). |
styles | no | Text style overrides applied before effects. All sub-fields are optional; omit any you don’t need. |
styles.bold | no | Boolean. |
styles.italic | no | Boolean. |
styles.underline | no | Boolean. |
styles.strikethrough | no | Boolean. |
styles.obfuscated | no | Boolean. |
styles.color | no | Hex color string (RRGGBB, no #). |
styles.font | no | Font resource location string (namespace:path) or a registered ETA font alias. |
Using a preset in markup
Section titled “Using a preset in markup”Any tag name the parser doesn’t recognize as a built-in is looked up in the preset registry. So using a preset is just:
<legendary>Hello, world!</legendary>That’s it. No extra attributes needed. If the preset name conflicts with a built-in tag name, the preset is rejected at load time and the built-in behavior wins.
Adding your own preset
Section titled “Adding your own preset”- Create
assets/<your-namespace>/presets/<name>.jsonin your mod’s resources or in a resource pack. - Set
"format_version": 1. - Add at least one entry in
"effects". - Use
<name>text</name>in your markup strings.
The file’s base name (lowercased) is the tag name. Names that clash with ETA’s built-in tags are silently skipped; check the logs if a preset doesn’t appear.
Presets reload with resource packs (F3+T). You don’t need a game restart to pick up changes.
Server versus client
Section titled “Server versus client”Presets are client-only. The loader uses the client-side ResourceManager (injected via the FontManager.reload hook), so preset files belong in resource packs, not data packs. A server operator cannot push preset definitions to players via /reload; players need the resource pack installed locally.