• v3.0.0-beta.1 0c79817755

    Ember's Text API 3.0.0-beta.1
    Some checks failed
    Publish / Publish Fabric 1.20.1 (push) Has been cancelled
    Publish / Publish Fabric 1.21.1 (push) Has been cancelled
    Publish / Publish Fabric 26.1 (push) Has been cancelled
    Publish / Publish NeoForge 1.21.1 (push) Has been cancelled
    Publish / Publish NeoForge 26.1 (push) Has been cancelled
    Publish / Publish Forge 1.20.1 (push) Has been cancelled
    Publish / Publish to Maven (Forgejo registry) (push) Has been cancelled
    Publish / Announce release in Discord (push) Has been cancelled
    Pre-release

    TysonTheEmber released this 2026-05-23 00:33:06 -06:00 | 153 commits to master since this release

    Downloads

    Pick the jar that matches your loader and Minecraft version. The same files are also on:

    Changelog

    Changed

    • Replaced the config system. Options are now defined by a single schema split
      into two files: emberstextapi-client.toml/.json (per-client: which effects
      render, performance) and emberstextapi-server.toml/.json (authoritative:
      player markup permissions, message limits, anvil rename length). The old
      emberstextapi-common.toml, emberstextapi-client.toml (old layout) and
      emberstextapi.json are no longer read — settings must be re-applied in the
      new files, which generate with defaults on first run.
    • Player markup access is now permission-gated. playerMarkup.mode is ALL,
      PERMISSION (nodes emberstextapi.markup.use, .effect.<name>,
      .category.<cat>, .bypass, with an OP-level fallback), or NONE. Effects
      can be allowed/denied per-effect or per-category for both the client render
      gate and the server markup gate. LuckPerms and FTB Ranks back the permission
      nodes automatically.
    • Unified effect parameter naming across visual, message, and animation effects.
      Every public param now has a canonical fully-spelled name and a short alias
      (e.g., amplitude/amp, frequency/freq, duration/dur). Old ad-hoc
      shorts (a/f/w, etc.) no longer work — see
      docs/superpowers/specs/2026-05-18-effect-parameter-refinement-design.md
      for the full rename table.
    • Effects now declare params via ParamSchema; unknown params log a warning
      instead of being silently ignored.
    • obfuscate's speed is renamed to interval (ms per step).
    • shatter's speed is renamed to duration (animation length in seconds).
    • matrix's resolve is renamed to duration.
    • vibrate's intensity is renamed to amplitude; speed to frequency.
    • breathe's amount is renamed to amplitude; speed to frequency.
    • circle's a is renamed to radius (the param was always a radius, not an
      amplitude).
    • drift's rx/ry are renamed to amplitudeX/amplitudeY.
    • gradient's span is renamed to length; speed to frequency.
    • fade's a is renamed to minAlpha.
    • neon's p/f are renamed to frequency/falloff; c to color.
    • RainbowEffect.getName() now returns "rainbow" (was "rainb").
    • GradientEffect.getName() now returns "gradient" (was "grad").
    • TurbulenceEffect.getName() now returns "turbulence" (was "turb").
    • PendulumEffect.getName() now returns "pendulum" (was "pend").
    • typewriter's cursor param is now boolean-only; use cursorChar to set
      the glyph. The cursor=<char> overload is dropped.

    Added

    • Seven new immersive-message motion effects: grow (continuous scale
      oscillation), slam (one-shot drop-in with damped bounces), float
      (slow sinusoidal drift), drift (independent X/Y wander), vibrate
      (high-frequency jitter), spin (full Z-axis rotation), and slide
      (one-shot slide-in or slide-out from any screen edge). All compose with
      the existing rock/breathe effects and with each other.
    • slide accepts an easing param: linear, easeInCubic, easeOutCubic,
      easeInOutCubic. Defaults match prior behavior (easeOutCubic for
      mode=in, easeInCubic for mode=out).
    • Three per-character message effects: drip (characters fall and trail
      downward in staggered order), shatter (characters fragment outward at a
      configurable trigger time), and matrix (characters scramble via random
      glyph cycling then resolve in stagger order).
    • outline span effect: renders a stroked outline around glyphs using a
      second SDF draw pass with a configurable color (c) and width (w).
      Requires an SDF font; logs a warning and skips the outline draw on vanilla
      fonts.
    • Per-character effect dispatch: MessageEffect implementations can opt in
      via perCharacter() to receive an applyToChar call for each rendered
      glyph, enabling effects that vary per character. Existing whole-message
      effects are unaffected.
    • [sound ...] message effect plays a Minecraft sound at a configurable time
      offset (at), volume, and pitch. Built-in presets (click, whoosh,
      static, magic, pop, thud, shatter) map to vanilla sound ids;
      any resource location works as well. drip, shatter, matrix, and
      slam each accept an inline sound param that fires on their respective
      key moment (first drip, shatter trigger, matrix resolve, slam land).
    • ETA markup inside Component.translatable string arguments now renders.
      <...> tags in arguments passed to translatable(key, args...) are
      parsed by the existing markup pipeline instead of being forwarded as
      literal strings.
    • EffectRegistry.getSchema(name) and MessageEffectRegistry.getSchema(name)
      return the ParamSchema for an effect, enabling introspection and doc
      tooling.
    • The server syncs each player's effective markup policy on join; the client
      caches it for accurate previews and feedback.
    • /emberstextapi reload reloads config from disk and re-syncs policy to
      online players; /emberstextapi policy [player] prints a player's resolved
      markup policy.
    • MSDF font rendering now works on MC 26.1 (NeoForge and Fabric); pipelines
      are registered against the 26.1 RenderPipelines API.
    Downloads