Create floating text, item, and block displays anywhere in your world
Floating holograms using Minecraft 1.21+ Display entities — no packets, no armorstands
The Holograms module is an embedded port of the FancyHolograms library, fully integrated into OreoEssentials. It uses Minecraft's native Display entities (text, item, block) introduced in 1.19.4, meaning holograms are real server-side entities — no client-side packet tricks required.
plugins/OreoEssentials/OHolograms/config.yml — plugin settingsplugins/OreoEssentials/OHolograms/holograms.yml — all saved hologramsplugins/OreoEssentials/OHolograms/logs/ — daily log filesStart the server once to generate plugins/OreoEssentials/OHolograms/config.yml. Default settings work out of the box.
Give your admin account the oholograms.admin permission (or use oreo.*).
Stand where you want the hologram and run /hologram create text myHolo. A text hologram appears at your feet.
Edit the text: /hologram edit myHolo setLine 1 Hello World!
Add more lines: /hologram edit myHolo addLine &6Welcome to the server!
Done! Holograms are saved automatically. Use /hologram list to see all holograms.
Located at plugins/OreoEssentials/OHolograms/config.yml.
# ────────────────────────────────────────────────────────── # OHolograms Configuration (embedded in OreoEssentials) # File: plugins/OreoEssentials/OHolograms/config.yml # ────────────────────────────────────────────────────────── # Config version — DO NOT change this config_version: 1 # ── Saving ─────────────────────────────────────────────── saving: autosave: # Whether to periodically save all holograms to disk automatically enabled: true # How often to autosave, in MINUTES (default: every 15 minutes) interval: 15 # If true, holograms are also saved immediately every time they are edited. # Recommended: keep this true to avoid losing changes on crash. save_on_changed: true # ── Logging ────────────────────────────────────────────── logging: # Log verbosity: DEBUG, INFO, WARN, ERROR log_level: INFO # Log a message every time a world is loaded and its holograms spawn. # Disable if you dynamically load/unload worlds frequently. log_on_world_load: true # Show a console message when a newer plugin version is available version_notifications: true # ── Visibility ─────────────────────────────────────────── # Default distance (in blocks) at which a hologram becomes visible. # Players farther away than this will not see it. # Can be overridden per hologram with /hologram edit <holo> visibilityDistance visibility_distance: 20 # How often (in TICKS) to check and update which players can see each hologram. # Lower = more responsive but slightly more CPU. Default 20 ticks = 1 second. update_visibility_interval: 20 # ── Commands ───────────────────────────────────────────── # Set to false to disable /hologram and /oholograms entirely # (useful if using the API only) register_commands: true
Keep defaults. visibility_distance: 20 and update_visibility_interval: 20 are fine.
Increase update_visibility_interval to 40 or 60 to reduce the per-tick cost of showing/hiding holograms.
Set visibility_distance to a smaller value (e.g. 15) so players outside the radius don't get entity packets for distant holograms.
There are three hologram types. Choose the type when creating with /hologram create <type> <name>.
| Type | What it shows | Exclusive edit options | Notes |
|---|---|---|---|
text |
Floating multi-line text (TextDisplay entity) | addLine, setLine, removeLine, insertBefore, insertAfter, background, textShadow, textAlignment, seeThrough, updateTextInterval |
Supports MiniMessage + legacy color codes. Most commonly used type. |
item |
A floating spinning item (ItemDisplay entity) | item <material> — changes what item is displayed |
Billboard defaults to FIXED. Great for shop or loot displays. |
block |
A floating block (BlockDisplay entity) | block <material> — changes what block is displayed |
Billboard defaults to FIXED. Good for floating decorations. |
position, moveTo, rotate, rotatePitch, billboard, scale, translate, visibilityDistance, visibility, shadowRadius, shadowStrength, brightness
Also accessible as /holograms, /holo, /fholo, and /ohologram.
All subcommands require the base permission oholograms.admin — subcommand permissions are additional fine-grained checks.
<range> blocks of your position, sorted by distance. Click any result to teleport to it.~ — relative to hologram's current position (e.g. ~1 = 1 block further)~~ — relative to your player position (e.g. ~~ = exactly where you stand)1.0 = default size, 2.0 = double size, 0.5 = half size./hologram edit <name> scale <x> <y> <z>
center — always faces the player (default for text)fixed — never rotates (default for item/block)horizontal — only rotates left/right, never tiltsvertical — only tilts up/down, never rotates left/right0 (no shadow). Try 0.5 to 2.0 for a visible shadow.1.0. Higher = darker shadow.block 15 — maximum block-light brightness (looks like it's lit by a torch at full intensity)sky 15 — maximum sky-light brightness (looks like it's in full daylight)ALL — everyone within range sees it (default)PERMISSION_REQUIRED — only players with OHolograms.viewhologram.<name> can see itMANUAL — only players added via the API (for developer use)-1 to reset to the config default.These commands only work on text type holograms.
& color codes.<line-number> (1-based). If line number exceeds the current line count, acts like addLine.<line-number> (1-based). All lines below shift up by one.<line-number>. Existing lines shift down.<line-number>. Existing lines below shift down.red, blue, dark_green, etc. (uses Adventure named colors)#ff0000 (solid red)#80ff0000 (semi-transparent red, alpha=0x80)transparent — fully transparent backgroundreset or default — remove custom backgroundfalse.CENTER.true, players can read the hologram text through walls. Default is false.-1 to disable periodic refresh (default)./hologram edit myItem item DIAMOND/hologram edit myBlock block DIAMOND_BLOCKThese commands manage the plugin itself rather than individual holograms.
Base permission: oholograms.admin
holograms.yml. Use this before a planned restart if you've made changes and don't want to wait for autosave.config.yml and all holograms from disk. Existing holograms are unloaded (hidden) and reloaded fresh. Use after editing the YAML files manually.<targets> is a regex pattern matching hologram names to import, or * for all.OHolograms.hologram.create is different from oholograms.hologram.create. Use the exact strings listed here.
| Permission | Default | Description |
|---|---|---|
oholograms.admin |
Operators (op) | Master permission. Required to use any /hologram or /oholograms command. All subcommand permissions are checked IN ADDITION to this. |
| Permission | Command(s) | Description |
|---|---|---|
OHolograms.hologram.create | /hologram create | Create new holograms |
OHolograms.hologram.remove | /hologram remove | Delete holograms permanently |
OHolograms.hologram.copy | /hologram copy | Duplicate an existing hologram |
OHolograms.hologram.list | /hologram list | See the list of all holograms |
OHolograms.hologram.nearby | /hologram nearby | Find holograms within a radius |
| Permission | Command(s) | Description |
|---|---|---|
OHolograms.hologram.edit.move_here | position, moveHere, center | Move hologram to current position / center on block |
OHolograms.hologram.edit.move_to | moveTo | Move hologram to specific coordinates |
OHolograms.hologram.edit.scale | scale | Change hologram scale |
OHolograms.hologram.edit.background | background | Change text background color |
OHolograms.hologram.edit.visibility | visibility | Change who can see the hologram |
OHolograms.hologram.edit.line.add | addLine | Append a line to text holograms |
OHolograms.hologram.edit.line.remove | removeLine | Remove a line from text holograms |
OHolograms.hologram.line.set | setLine | Edit a specific line (also used internally by addLine) |
OHolograms.hologram.edit.insert_before | insertBefore | Insert line before another line |
OHolograms.hologram.edit.insert_after | insertAfter | Insert line after another line |
| Permission | Description |
|---|---|
OHolograms.viewhologram.<name> |
Allows a player to see a specific hologram when its visibility is set to PERMISSION_REQUIRED. Replace <name> with the exact hologram name (case-sensitive). |
# Give all admins full hologram control /lp group admin permission set oholograms.admin true # Give a specific group permission to see a VIP-only hologram /lp group vip permission set OHolograms.viewhologram.vip_rewards true # Give all players permission to see a specific hologram /lp group default permission set OHolograms.viewhologram.spawn_info true
setLine uses OHolograms.hologram.line.set (without the edit. prefix), while most other edit commands use OHolograms.hologram.edit.*. This is intentional in the source code — granting OHolograms.hologram.edit.* does NOT automatically grant setLine. Grant both if needed.
All holograms are stored in a single YAML file:
plugins/OreoEssentials/OHolograms/holograms.yml.
You can edit this file manually, but always run /oholograms reload after doing so.
version: 2 # DO NOT CHANGE holograms: my_hologram: # Hologram name (lowercase) type: TEXT # TEXT / ITEM / BLOCK location: world: world x: 100.5 y: 64.0 z: 200.5 yaw: 0.0 pitch: 0.0 visibility: ALL # ALL / PERMISSION_REQUIRED / MANUAL visibility_distance: -1 # -1 = use config default persistent: true text: # List of text lines (TEXT type only) - "<gold><b>Welcome!</b></gold>" - "<gray>Enjoy your stay!</gray>" text_shadow: false see_through: false text_alignment: center update_text_interval: -1 # -1 = no auto-refresh background: null # null = default, "transparent", "#RRGGBB", named color scale_x: 1.0 scale_y: 1.0 scale_z: 1.0 shadow_radius: 0.0 shadow_strength: 1.0 billboard: null # null = CENTER, or fixed/vertical/horizontal
| Trigger | What happens |
|---|---|
Any edit command (if save_on_changed: true) | That hologram is queued for an async write |
| Autosave interval (default every 15 min) | All persistent holograms are saved in bulk |
/oholograms save | Immediate bulk save of all holograms |
Server shutdown (onDisable) | Bulk save, then executors drain gracefully |
Each hologram has a visibility mode that controls who can see it, and a visibility distance that controls how far away it is visible.
| Mode | Who sees it | Use case |
|---|---|---|
ALL |
Every player within the visibility distance | Default — public holograms like spawn signs, rules boards |
PERMISSION_REQUIRED |
Only players with OHolograms.viewhologram.<name> |
VIP-only signs, donor perks, staff notices |
MANUAL |
Only players added via Visibility.ManualVisibility.addDistantViewer() API |
Programmatic control via plugins/scripts |
The visibility distance determines how close a player must be to see the hologram.
The server checks this every update_visibility_interval ticks (default: every second).
config.yml as visibility_distance (default: 20 blocks)/hologram edit <name> visibilityDistance <blocks>-1 to reset a hologram back to the global defaultText holograms support two formatting systems simultaneously.
The modern Minecraft text format using XML-like tags. Examples:
# Bold gold title /hologram edit myHolo setLine 1 <gold><b>Welcome to the Server!</b></gold> # Gradient text /hologram edit myHolo addLine <gradient:red:blue>Colorful Line</gradient> # Rainbow text /hologram edit myHolo addLine <rainbow>Rainbow Text!</rainbow> # Hover tooltip (for players who see the hologram) /hologram edit myHolo addLine <hover:show_text:'secret!'>Hover me!</hover> # Clickable link /hologram edit myHolo addLine <click:open_url:'https://example.com'>Visit us!</click>
| Tag | Effect |
|---|---|
<red>, <blue>, <gold>, etc. | Named colors |
<#ff0000> | Hex color |
<b>, <i>, <u>, <st> | Bold, italic, underline, strikethrough |
<gradient:color1:color2> | Gradient across text |
<rainbow> | Cyclic rainbow colors |
<reset> | Resets all formatting |
The old &-style codes still work too:
/hologram edit myHolo setLine 1 &6&lGold Bold Title /hologram edit myHolo addLine &aGreen text &r normal text
| Code | Color | Code | Color |
|---|---|---|---|
&0 | Black | &8 | Dark Gray |
&1 | Dark Blue | &9 | Blue |
&2 | Dark Green | &a | Green |
&3 | Dark Aqua | &b | Aqua |
&4 | Dark Red | &c | Red |
&5 | Dark Purple | &d | Pink |
&6 | Gold | &e | Yellow |
&7 | Gray | &f | White |
&l Bold | &o Italic | ||
&n Underline | &r Reset | ||
To add a blank line between text lines, use a single space as the text:
/hologram edit myHolo addLine
If you have the FancyNPCs plugin installed, holograms can be linked to NPCs. The hologram will float above the NPC, follow its position, and scale with the NPC's scale setting.
Create a hologram at any position: /hologram create text myNpcHolo
Link it to your NPC: /hologram edit myNpcHolo linkWithNpc <npc-name>
The hologram moves to just above the NPC's head and follows it everywhere.
To detach: /hologram edit myNpcHolo unlinkWithNpc
Creates a welcome hologram at spawn.
Places a floating diamond above a chest shop with price info.
Creates a VIP lounge sign only VIP players can see.
Floats an emerald block above a trading post.
Moves an existing hologram to exact coordinates, then fine-tunes it.
Migrating from another hologram plugin.
Make sure save_on_changed: true is set, or run /oholograms save after creating/editing holograms. Also check that the world the hologram was in loaded before holograms were initialized.
If you copied a hologram, verify it was saved — previous versions had a bug where the original was saved instead of the copy. This is now fixed.
Holograms are only shown to players who are within the visibility distance. Make sure you are within visibility_distance blocks of the hologram. Also verify the hologram's visibility is not set to PERMISSION_REQUIRED without you having the permission.
On 1.21.4+, the plugin uses PlayerLoadedListener which waits for the client to finish loading before sending display entities. If you're using a non-Paper software, this may be skipped.
Yes — as long as the OHolograms module has a PAPI parser hook (which FancyHolograms supports). Set updateTextInterval to the number of seconds between refreshes so the placeholder values stay current. Example: /hologram edit myHolo updateTextInterval 5 refreshes every 5 seconds.
No. Hologram names are unique and case-insensitive (stored lowercase). The create and copy commands will refuse if a hologram with that name already exists.
Check the scale: /hologram info myHolo. If the scale is very small or large, reset it: /hologram edit myHolo scale 1.0. If the hologram is linked to an NPC, the NPC's scale is applied automatically.
Yes — use exact coordinates with /hologram edit <name> moveTo <x> <y> <z> to place it anywhere, including inside blocks. Enable seeThrough so players can see the text through the block: /hologram edit <name> seeThrough true.
Run /hologram edit <name> background transparent to make it fully transparent (no background at all). Or use /hologram edit <name> background reset to restore the Minecraft default dark panel.
Set the background to transparent and use MiniMessage for the text color:
/hologram edit myHolo background transparent
/hologram edit myHolo setLine 1 <gold><b>My Text</b></gold>
Some commands work from console: remove, list, and /oholograms subcommands. Commands that require a player location — create, copy, moveHere, nearby, teleport, moveTo — require a player and will show an error from console.
After any edit, the hologram is queued for update on the next server tick. It should refresh within 1 second for players in range. If it's still not updating, run /oholograms reload to force a full reload from disk.
Yes. Use /hologram edit <name> updateTextInterval <seconds>. This sets how often the text is re-evaluated and sent to players. Use -1 to disable auto-refresh (default). This is useful if your text contains PAPI placeholders that change over time.
Check: (1) the hologram's visibility setting — run /hologram info <name>. (2) Your visibility distance — the default is 20 blocks. (3) Whether the hologram's world is the same world you're in. (4) On Bedrock (Floodgate), holograms may be disabled if fflag_disable_holograms_for_bedrock_players is enabled.