Immersive Messages

Immersive messages are HUD popups rendered directly to the overlay layer, outside Minecraft’s normal text component pipeline. They’re the primary feature that distinguishes ETA from a simple markup mod.

An immersive message is a floating text element drawn onto the screen by ETA’s overlay renderer. It has no connection to chat, item names, or other inline surfaces; it exists purely on the HUD for as long as its lifetime allows, then disappears.

Unlike inline markup (which works anywhere Minecraft renders text), an immersive message carries layout properties: an anchor point, an x/y offset, a text scale, an optional background, and whole-message effects that transform the message as a unit. None of those properties exist in the inline markup pipeline.

From a command: /eta send sends an immersive message to one or more players from the server side. See the Commands page for the full syntax.

From Java: construct an ImmersiveMessage and pass it to EmbersTextAPI.sendMessage(player, msg). See Sending Messages for a walkthrough.

From KubeJS: call EmbersText.send(player, EmbersText.markup(duration, text)) from a server script. See KubeJS for the full binding (NeoForge 1.21.1 only).

Every immersive message has three phases:

fadeIn (ticks) + duration (ticks) + fadeOut (ticks) = total lifetime

duration is a float measured in ticks (20 ticks = 1 second). It represents how long the message sits fully visible. fadeInTicks and fadeOutTicks are both int values. During the fade-in phase the message alpha ramps from 0 to 1; during fade-out it ramps back down. Neither fade is required; both default to 0.

GetterReturnsUnit
getDuration()visible durationticks (float)
getFadeInTicks()fade-in lengthticks (int)
getFadeOutTicks()fade-out lengthticks (int)
totalLifetime()fadeIn + duration + fadeOutticks (float)
totalLifetimeTicks()ceil(totalLifetime())ticks (int)