Holograms
BetaState
Beta. The runtime, scene loader and component registry ship in the jar; the web editor is client-side only.
An interactive hologram system that works on a freshly unpacked server with a vanilla client and no resource pack:
- scenes are assembled from components — text, items, blocks, invisible hitboxes — not hand-written entity spawns (components);
- hitboxes bind action lists — run a command, teleport, turn a page — so a hologram is clickable, not just decorative;
- placeholders show the looking player's own statistics —
{kills},{deaths},{playtime}— which is why the system has a per-viewer render mode (placeholders); - scenes are
.meowuifiles (the format), authored in a browser atmeowmc.org/editor(the web editor); - a scene anchors to coordinates or to any entity by its UUID, which covers "attach it to an NPC" without coupling to any NPC plugin.
The vanilla ceiling
Everything is built from vanilla Display and Interaction entities. The
ceiling is hard:
- No custom fonts. Text renders with vanilla fonts. The text component's
fontfield can select the built-in alternates (minecraft:default,minecraft:alt,minecraft:illageralt) — that is the entire typographic range. - No custom textures, models, items or blocks. Item and block displays show real vanilla items and blocks.
- No hover of any kind. No tooltip on hover, no cursor change. Component
hoverEvents do not render in world space. - Component
clickEvents do not fire in world text. Chat-style clickable words are a chat and book feature. Interaction boxes are the only click surface that exists. - Hitboxes are axis-aligned boxes. Float width × height, centred on the entity. No per-line, per-word or non-rectangular hitboxes — a page of lines wanting N clickable rows needs N hitbox entities, which is why the format has an entity budget.
- No text input, no keyboard input of any kind. A hologram can open a page or run a command; it cannot collect a string. Chat remains the text input surface.
- No sound originates from a display. Sound comes from a server action.
- Projectiles cannot click them.
Two render modes
| | global | personal |
| --- | --- | --- |
| Who sees what | One entity set in the world; every viewer sees the same metadata. | Per-viewer virtual entity sets; metadata resolved per viewer. |
| Entity strategy | Real entities, tracked the vanilla way. | Entities are constructed but never added to the level; spawn, metadata and remove packets are addressed to each viewer's connection directly. |
| When a scene must be it | Always valid. | Required the moment a scene contains any per-viewer placeholder or any pagination, or when the author sets it. |
Mixed scenes are allowed: shared chrome (title, board, items) as global
components, only the personal rows as per-viewer sets. The loader rejects a
per-viewer placeholder in a global scene.
In personal mode, a per-viewer placeholder's value is sent only to the viewer it describes — no player ever sees another player's statistics through a hologram.
Commands
Everything under one root, permission bukkit.command.meowmc.hologram
(OP default — see permissions):
| Command | Purpose |
| --- | --- |
| /meow hologram list | Loaded scenes, per-world counts, validation warnings. |
| /meow hologram reload | Re-read holograms/; lists accepted and refused scenes with reasons. |
| /meow hologram info <id> | One scene: mode, anchor, entities, pages, placeholders used. |
| /meow hologram anchor <id> | Bind the scene's entity anchor to the entity you are looking at. |
| /meow hologram show <id> / hide <id> | Temporary runtime toggle; does not edit the file. |
| /meow hologram validate <file> | Dry-run the loader on one file without loading it. |
| /meow hologram usage | The ceiling list above, inline in chat. |
In-game scene authoring — building a scene by placing things in the world — is not available in 1.0. The web editor is the authoring surface.
The plugin surface
A plugin-supplied registry for placeholders, components and action types is
planned after 1.0, opt-in per server (holograms.pluginPlaceholders, default
off), with {plugin:key} namespacing against the built-in bare names. Today a
plugin cannot supply a placeholder. A scene referencing an unregistered
placeholder loads with a warning and renders the token literally — a missing
plugin degrades visibly instead of crashing a scene.
The grief surface
A hologram that runs commands is a clickable command in a world:
run-commandwithas: playerdispatches through the clicker's own permission set — the scene author's authority is never attached;as: consoleis refused at load unless the config gate is on and the scene file carries an explicit load-validated acknowledgement marker — the default is off, because a console command in a world is a privilege hand-off to anyone who clicks;- placeholders never flow into a command string — validated at load, so nothing a placeholder could resolve to can become part of a command.
Scene-level view and use permissions are ordinary permission strings,
granted with the server's own permission manager.
Related
- Components — the component model, anchors, pages, and the closed action set.
- Placeholders — the two resolution scopes, the refresh cap, the injection boundary.
- The .meowui format — the scene file, its rules, and import/export.
- The web editor — authoring at
meowmc.org/editor.