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.

ETA ships eight presets in assets/emberstextapi/presets/:

NameDescription
arcaneSoft purple text in the Cinzel font with a violet neon glow and low-amplitude turbulence
chaoticBold text with fast rainbow cycling, glitch flicker, and high-amplitude bounce
divineBold gold text in the Almendra font with a warm neon glow, gentle wave, and slow pulse
epicBold italic purple text with a fast pulse and medium wave
frozenItalic text in the Cardo font with a blue-to-white gradient, slow pendulum sway, and blue neon glow
infernalBold text in the Norse font with a red-to-gold gradient, heavy shake, and red neon glow
legendaryBold gold text with rainbow cycling and a default neon glow
spookyItalic dark-purple text with low-amplitude shake and a slow fade
assets/<namespace>/presets/<name>.json

Presets 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.

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"
}
}
FieldRequiredDescription
format_versionyesMust be 1. Files with any other value are rejected at load time.
effectsyesArray of effect entries. Must contain at least one entry.
effects[].typeyesEffect name, lowercase. Must be a registered effect type (same names used as markup tags).
effects[].paramsnoObject 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).
stylesnoText style overrides applied before effects. All sub-fields are optional; omit any you don’t need.
styles.boldnoBoolean.
styles.italicnoBoolean.
styles.underlinenoBoolean.
styles.strikethroughnoBoolean.
styles.obfuscatednoBoolean.
styles.colornoHex color string (RRGGBB, no #).
styles.fontnoFont resource location string (namespace:path) or a registered ETA font alias.

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.

  1. Create assets/<your-namespace>/presets/<name>.json in your mod’s resources or in a resource pack.
  2. Set "format_version": 1.
  3. Add at least one entry in "effects".
  4. 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.

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.