Farmstead Mods
EN

Голограммы

Парящие анимированные тексты, вращение, покачивание, клик для торговли и плейсхолдеры.

На этой странице

Команды 1#

КомандаСинтаксисАлиасыПравоОписание
/hologram/hologram create <id> [<x> <y> <z> [world]] | delete <id> | rename <id> <newid> | copy <id> <newid> | addline <id> <text> | insertline <id> <index> <text> | setline <id> <index> <text> | removeline <id> <index> | moveline <id> <from> <to> | clearlines <id> | addframes <id> <lineIndex> <intervalTicks> <frames> | removeframes <id> <lineIndex> | moveto <id> <x> <y> <z> | movehere <id> | align <id> | tp <id> | near [radius] | setrefresh <id> <seconds> | toggle <id> | list | info <id> | reload | billboard <id> <fixed|vertical|horizontal|center> | textalign <id> <center|left|right> | spin <id> on [speed] [axis] | spin <id> off | spintrack <id> on|off | hover <id> on [amplitude] [speed] | hover <id> off | scale <id> <scale> | linespacing <id> <spacing> | shadow <id> on|off | seethrough <id> on|off | opacity <id> <0-255> | viewrange <id> <range> | linewidth <id> <pixels> | background <id> <transparent|#RRGGBB|#AARRGGBB>holoneoessentials.hologram.adminManage holographic displaysВесь корень закрыт hasPermission: OP 4, neoessentials.hologram.admin или neoessentials.admin.* (консоль всегда). Алиас /holo — redirect на тот же узел и регистрируется только если включены и commands.hologram, и commands.holo. id хранится в нижнем регистре. Номера строк 1-based. <text> и <frames> — greedyString. Нет подкоманды setscale: масштаб — scale. create без координат — позиция игрока, Y+1.5 (консоль так создать не может). near без радиуса = 20, радиус 1–1000. spin on по умолчанию speed 3.0 ось Y; hover on — амплитуда 0.08, скорость 1.5. Модуль modules.hologramEnabled выключает регистрацию целиком.

Примеры#

Поставить приветственную голограмму у спавна#

Нужна надпись над площадкой с онлайн-счётчиком, без ручной правки JSON.

/hologram create spawn_welcome
/hologram addline spawn_welcome &6&lДобро пожаловать
/hologram addline spawn_welcome &7Онлайн: &f{neoessentials_online_players}/{neoessentials_max_players}
/hologram setrefresh spawn_welcome 10
/hologram scale spawn_welcome 1.3
/hologram hover spawn_welcome on 0.1 1.2
/hologram info spawn_welcome

create без координат ставит пустую голограмму у ваших ног на высоте +1.5 и с refreshInterval 5 с. addline дописывает строки снизу (цвета & и плейсхолдеры {…}). setrefresh 10 обновляет плейсхолдеры не чаще чем раз в 10 с (глобальный pollIntervalTicks всё равно ограничивает, как часто планировщик вообще смотрит). scale 1.3 и hover on видны сразу: каждая правка вызывает respawn. info печатает мир, координаты, число строк и визуальные поля.

Подписать физический ящик crate_<id>#

После /crate admin setblock над сундуком уже висит служебная голограмма — нужно поменять текст и размер, не создавая вторую.

/hologram list
/hologram setline crate_vote 1 &6Vote Crate
/hologram setline crate_vote 2 &eПКМ — открыть, ЛКМ — шансы
/hologram scale crate_vote 1.3

setblock создаёт обычную голограмму с id crate_<id ящика> (второй блок того же ящика — crate_vote_2, crate_vote_3). Она видна в /hologram list и в автодополнении id. setline заменяет строку и сбрасывает кадровую анимацию этой строки. Подпись переживает /hologram moveto|movehere; /crate admin removeblock удаляет голограмму вместе с привязкой. При modules.hologramEnabled: false блок-ящик работает, надписи нет.

Клонировать и крутить голограмму#

Нужна копия той же надписи у другого портала, с вращением «как пластинка».

/hologram copy spawn_welcome portal_welcome
/hologram movehere portal_welcome
/hologram billboard portal_welcome fixed
/hologram spin portal_welcome on 3 Y
/hologram spintrack portal_welcome on

copy клонирует строки и визуал в новый id в той же точке (через Gson, без общих entity UUID). movehere переносит к вам на Y+1.5. spin on Y по умолчанию сам включает player-tracking: текст остаётся читаемым со всех сторон. spintrack off оставляет сырое вращение вокруг мировой оси — тогда имеет смысл billboard fixed.

Перечитать голограммы из хранилища#

Поправили запись в DataStore руками и хотите увидеть результат без рестарта.

/hologram reload

Все display-entity деспавнятся, карта в памяти очищается, коллекции holograms читается заново, сущности спавнятся обратно. Ответ — reload_success с числом голограмм. /neoe reload этот путь не заменяет: у голограмм своя команда. Магазинные голограммы после reload заново получают NBT-метку шопа (retagAllShopHolograms), иначе клик по ним перестаёт быть покупкой.

Тонкие места#

Автоголограммы ящиков: id crate_<id>#

CrateHologramManager при /crate admin setblock создаёт голограмму с префиксом crate_. Базовый id — crate_<id ящика>; если у этого ящика уже есть блок, добавляется суффикс _2, _3. Связка блок→голограмма лежит отдельно (crate_block_holograms), поэтому повторный setblock по тому же блоку переиспользует существующую голограмму, а не плодит вторую, и связь переживает /hologram moveto|movehere. Ручные правки строк живут, пока не вызовут removeblock.

Что делать: Ищите id в /hologram list / автодополнении. Не создавайте вручную голограмму с тем же id — create ответит already_exists. Снимайте блок командой ящика, а не /hologram delete, если не хотите оставить «живой» сундук без подписи или наоборот.

Магазинные голограммы shop_ перезаписываются#

Шоп над табличкой создаёт interactive-голограмму shop_<dimension>_<x>_<y>_<z>. Клик по ней — та же покупка/продажа, что по табличке (лимит 400 мс). Любые /hologram setline|moveto по такому id затрёт следующий транзакцией или релоадом шопа. interactive: true у админских create не ставится.

Что делать: Для магазина меняйте смещение голограммы средствами шопа, не /hologram. /hologram info shop_… смотреть можно.

Хранилище — коллекция holograms, не holograms.json#

Данные пишутся в DataStore при каждом registerHologram. Легаси neoessentials/holograms.json импортируется один раз, если коллекция пуста. /hologram reload вызывает initialize(): clear памяти → migrate (только если пусто) → load из DataStore. Правка старого файла после миграции ничего не даёт. Wiki апстрима, где reload «читает holograms.json с диска», устарела.

Что делать: После ручной правки — править запись в коллекции holograms, затем /hologram reload.

/holo и выключенный модуль#

Алиас регистрируется как Commands.literal("holo").redirect(hologram) только при commands.hologram и commands.holo. Один holo: true при выключенном hologram не создаёт ни корень, ни алиас. modules.hologramEnabled: false пропускает HologramCommand.register целиком — ящики тогда ставятся без подписи.

Что делать: Держите оба флага команд включёнными. Смену модуля — рестартом.

Строки, кадры и refresh#

insertline принимает индекс 1 … lineCount+1 (вставка в конец). setline очищает frames этой строки. addframes требует ≥ 2 кадров через |, intervalTicks 1–200. create ставит refreshInterval: 5, даже если плейсхолдеров ещё нет; setrefresh 0 — не пересчитывать плейсхолдеры. Глобальные hologram.pollIntervalTicks / animationInterval в config.json ограничивают планировщик для всех голограмм; /hologram reload их не перечитывает — нужен /neoe reload.

Что делать: Смену poll/animation — /neoe reload. Кадры и текст — командами /hologram.

create, мир и регистр id#

exists/getHologram ключят id через toLowerCase. Аргумент world в create — word; если нет :, подставляется minecraft:. Автодополнение предлагает только path измерения (overworld), не полный ключ. create без координат требует игрока; create с x y z доступен консоли. copy не переносит entity UUID (новый спавн). delete деспавнит и удаляет запись.

Что делать: Пишите id латиницей в нижнем регистре заранее, чтобы не гадать. Для консоли всегда указывайте координаты и world.

Подробное руководство#

Раздел ниже — исходная документация проекта (docs/Wiki/HologramSystem.md). Ссылки на другие страницы вики переписаны на этот сайт; текст самих руководств не редактируется, чтобы синк с апстримом не давал конфликтов.

NeoEssentials uses Minecraft's native Display.TextDisplay entities to render holographic floating text in the world.
Holograms are fully server-side — no client mod required.


Storage#

Hologram data lives in the active storage backend (holograms collection — JSON files by default, or SQLite/MySQL if configured), loaded automatically on server start / world load. The legacy neoessentials/holograms.json file is only read once, to migrate any existing data into the storage backend on first boot after upgrading — it's not written to afterward.
Shop-managed holograms (prefixed shop_) are created and destroyed automatically by the Shop system — see Shop Holograms below.


Permissions#

Permission Description
neoessentials.hologram.admin Full access to all /hologram commands (also granted by OP level 4 or neoessentials.admin.*)

Command Reference#

All commands use /hologram (alias /holo).

Creation & Deletion#

Command Description
/hologram create <id> <x> <y> <z> [world] Create a new empty hologram at the given coordinates. world defaults to your current dimension (e.g. minecraft:overworld).
/hologram delete <id> Permanently delete a hologram.
/hologram rename <id> <newid> Rename a hologram in-place (keeps position, lines, and settings).
/hologram copy <id> <newid> Clone an existing hologram (all lines, animations, and visual settings) under a new ID at the same position.
/hologram reload Despawn all holograms, reload holograms.json from disk, and respawn everything.

Line Management#

Line numbers are 1-based (1 = topmost) in every command below.

Command Description
/hologram addline <id> <text> Append a new text line to the bottom of the hologram.
/hologram insertline <id> <index> <text> Insert a line before index (1 = topmost). Existing lines shift down. index may also equal lineCount + 1 to insert at the end.
/hologram setline <id> <index> <text> Replace the text of an existing line (1-based index). Clears any frame animation on that line.
/hologram removeline <id> <index> Delete a specific line (1-based index).
/hologram moveline <id> <from> <to> Reorder a line within the hologram (1-based indices).
/hologram clearlines <id> Remove all lines from the hologram.

Frame Animation (per-line)#

Lines can cycle through multiple text frames automatically.

Command Description
/hologram addframes <id> <lineIndex> <intervalTicks> <frame1\|frame2\|...> Set animated frames for a line (1-based lineIndex). Requires at least 2 frames, separated by \|. intervalTicks controls how many ticks each frame is shown (1–200; 20 ticks = 1 second).
/hologram removeframes <id> <lineIndex> Remove frame animation from a line, restoring static text.

Example:

/hologram addframes welcome 1 10 &aWelcome!|&eHello!|&bHi there!

This cycles the top line (line 1) every 10 ticks (0.5 s) through three coloured greetings.

Positioning#

Command Description
/hologram moveto <id> <x> <y> <z> Teleport the hologram to exact coordinates.
/hologram movehere <id> Move the hologram to your current standing position (Y offset +1.5).
/hologram align <id> Snap the hologram's X/Z to the nearest block centre (floor(x)+0.5, floor(z)+0.5).
/hologram tp <id> Teleport yourself to the hologram's position.
/hologram near [radius] List all holograms within radius blocks (default 20, max 1000) sorted by distance.

Visibility & Refresh#

Command Description
/hologram toggle <id> Show or hide the hologram without deleting it.
/hologram setrefresh <id> <seconds> How often placeholders are re-evaluated. 0 = static (never refresh).
/hologram list List all holograms with their world, position, and line count.
/hologram info <id> Detailed info including all visual/animation settings and line contents.

setrefresh's seconds value is a per-hologram minimum — how often that specific hologram checks for updates is also capped by the global scheduler's own poll rate, set once for every hologram via hologram.pollIntervalTicks/animationInterval in config.json (both in server ticks; defaults 20/1, matching the previous fixed 1-second/50ms behavior). pollIntervalTicks only controls how often the scheduler checks whether a hologram is due for a refresh — it is not itself the refresh rate, and lowering it below your setrefresh seconds value does nothing visible; animationInterval covers only {animation:NAME} frame advancement, /hologram addframes cycling, and spin/hover motion — there's no benefit setting it below 1, since an animation's own frame duration is already clamped to a 50ms (1-tick) minimum. Apply changes with /neoe reload.

Billboard Mode#

Controls how the hologram faces the viewer.

Command Description
/hologram billboard <id> <mode> Set billboard: fixed, vertical, horizontal, or center (default).
Mode Behaviour
center Always faces the player (default).
vertical Rotates horizontally only; stays upright.
horizontal Rotates to lie flat on the floor/ceiling.
fixed No automatic rotation; use with /hologram spin for world-space effects.

Text Alignment#

Command Description
/hologram textalign <id> <mode> Set per-line text alignment: center (default), left, or right.

Animations#

Spin

Command Description
/hologram spin <id> on [speed] [axis] Enable rotation. speed = degrees/tick, 0.1–30.0 (default 3.0). axis = X, Y, or Z (default Y).
/hologram spin <id> off Stop rotation.
/hologram spintrack <id> on\|off Toggle player-tracking for Y-axis spin (see below). Enabled automatically when /hologram spin <id> on is used with the Y axis.

Tip: Y-axis spin with fixed billboard = classic record-player spin.
Z-axis spin with center billboard = roll-spin visible to all players.

Player-tracking (Y-axis only, default on): instead of a raw world-space spin, the renderer switches the billboard to FIXED and computes the yaw as yaw_to_nearest_player + currentSpinAngle, so the "front" of the text sweeps past every player once per revolution rather than only being readable from one fixed direction. Disable with /hologram spintrack <id> off to fall back to a raw Y-axis rotation (only useful if you also set billboard to fixed manually).

Hover / Bob

Command Description
/hologram hover <id> on [amplitude] [speed] Smooth up-and-down bob. amplitude = peak displacement in blocks, 0.01–2.0 (default 0.08). speed = degrees/tick of the sine wave, 0.1–10.0 (default 1.5).
/hologram hover <id> off Stop hover animation.

Visual Appearance#

Command Description
/hologram scale <id> <scale> Uniform scale (0.1–10.0, default 1.0). Example: 2.0 = double size.
/hologram linespacing <id> <spacing> Vertical gap between lines in blocks (0.05–3.0, default 0.3).
/hologram shadow <id> on\|off Enable/disable the text drop-shadow.
/hologram seethrough <id> on\|off Render the text through solid blocks (like a beacon beam). Default off.
/hologram opacity <id> <0-255> Text opacity (255 = fully opaque, default; 0 = invisible).
/hologram viewrange <id> <0.1-8.0> Display-entity view range multiplier (default 1.0, vanilla base ≈ 64 blocks, so e.g. 2.0 ≈ 128 blocks).
/hologram linewidth <id> <1-4096> Maximum text width in pixels before wrapping (default 200). Set higher to prevent long lines wrapping.
/hologram background <id> <color> Background panel colour. Accepts: transparent (default), #RRGGBB, or #AARRGGBB (where AA is alpha).

Background examples:

/hologram background lobby transparent         ← fully transparent (default)
/hologram background lobby #40000000           ← 25% black semi-transparent panel
/hologram background lobby #000000             ← opaque solid black

Placeholders#

Hologram line text supports the full NeoEssentials placeholder syntax {identifier}.

Common useful placeholders:

Placeholder Value
{neoessentials_online_players} Current online player count
{neoessentials_max_players} Server max players
{neoessentials_server_name} Server name from config
{neoessentials_server_motd} Configured MOTD (/motd if set, otherwise server.properties)
{neoessentials_time} Current server time (12h)
{neoessentials_time_24} Current server time (24h)
{neoessentials_date} Current date

Set refreshInterval > 0 on the hologram to keep placeholder values up-to-date.

Leaderboard Boards#

Any registered leaderboard board's rank/name/value is also available: {leaderboard_<board>:<rank>:name} / {leaderboard_<board>:<rank>:value}, e.g. {leaderboard_money:1:name}. Rather than typing each /hologram addline by hand, /leaderboard hologram create <board> <id> [lines] generates a full ranked hologram in one command — see Leaderboard System → Holograms.


Colour Codes#

Use & colour codes in line text:

Code Colour
&a Green
&b Aqua
&c Red
&e Yellow
&f White
&6 Gold
&l Bold
&o Italic
&r Reset

Hex colour via &#RRGGBB is also supported.


Example Hologram Setup#

# Step 1 — create at eye level above a spawn platform
/hologram create spawn-welcome 0 70 0 minecraft:overworld

# Step 2 — add lines (top to bottom)
/hologram addline spawn-welcome &6&lWelcome to &eMyServer!
/hologram addline spawn-welcome &7Online: &f{neoessentials_online_players}/{neoessentials_max_players}
/hologram addline spawn-welcome &7&oRight-click a sign to explore

# Step 3 — refresh every 10 s so player counts stay current
/hologram setrefresh spawn-welcome 10

# Step 4 — increase size slightly and enable gentle hover
/hologram scale spawn-welcome 1.3
/hologram hover spawn-welcome on 0.1 1.2

# Step 5 — inspect the result
/hologram info spawn-welcome

holograms.json Format (Advanced)#

Fields stored per hologram:

{
  "id": "spawn-welcome",
  "world": "minecraft:overworld",
  "x": 0.0, "y": 70.0, "z": 0.0,
  "visible": true,
  "refreshInterval": 10,
  "interactive": false,
  "scale": 1.3,
  "lineSpacing": 0.3,
  "textShadow": false,
  "textOpacity": 255,
  "backgroundColorArgb": 0,
  "textAlign": 0,
  "seeThrough": false,
  "lineWidth": 200,
  "viewRange": 1.0,
  "billboardMode": 3,
  "spinEnabled": false,
  "spinSpeedDegrees": 3.0,
  "spinAxis": "Y",
  "spinTrackPlayer": true,
  "hoverEnabled": true,
  "hoverAmplitude": 0.1,
  "hoverSpeedDegrees": 1.2,
  "lines": [
    { "text": "&6&lWelcome to &eMyServer!", "frames": [], "animFrameIntervalTicks": 0 },
    { "text": "&7Online: &f{neoessentials_online_players}/{neoessentials_max_players}", "frames": [], "animFrameIntervalTicks": 0 }
  ]
}

billboardMode values: 0=FIXED, 1=VERTICAL, 2=HORIZONTAL, 3=CENTER.
textAlign values: 0=CENTER, 1=LEFT, 2=RIGHT.
backgroundColorArgb is an ARGB integer. 0 = fully transparent.
textOpacity: 0–255, 255 = fully opaque.
interactive: when true, right/left-clicking the hologram fires click events (used by shop holograms — see below). Regular admin-created holograms leave this false.


Shop Holograms#

When a sign shop enables its hologram (via the shop hologram toggle — see Economy System), NeoEssentials auto-creates an interactive hologram named shop_<dimension>_<x>_<y>_<z> above the sign showing the item, owner, and buy/sell prices. This hologram is refreshed automatically on every transaction and behaves as a second click-target for the shop:

Interaction Effect
Right-click (non-owner) Buy from the shop (same as right-clicking the sign) — requires neoessentials.shop.use.
Left-click / attack (non-owner) Sell to the shop — requires neoessentials.shop.use.
Right-click (owner) Shows shop info instead of transacting.
Shift+right-click (owner), holding an item (Re)assigns the shop's traded item to the held item, capturing its data (enchantments, custom name, modded NBT) — same gesture as the sign, see Item Data / NBT in the Economy System page.

Clicks are rate-limited to one processed interaction per player every 400 ms to prevent held-down attack-spam from firing repeated transactions.
Shop holograms can be repositioned relative to their sign (up to ±4.5 blocks per axis) via the shop's hologram-offset controls; admin /hologram commands can still be used to inspect them (/hologram info shop_...), but manual edits to their lines/position are overwritten the next time the shop transacts or reloads.


Web Dashboard API#

The dashboard exposes a REST API for hologram management:

Method Path Description
GET /api/holograms/list List all holograms
GET /api/holograms/stats Summary counts (total, visible, animated, shop)
GET /api/holograms/{id} Get a single hologram
POST /api/holograms/create Create (body = hologram JSON)
PUT /api/holograms/{id} Update (full hologram JSON body)
DELETE /api/holograms/{id} Delete
POST /api/holograms/{id}/spawn Force a re-spawn
POST /api/holograms/{id}/despawn Despawn without deleting
POST /api/holograms/{id}/visible Toggle visibility

All responses include billboard, spin, hover, scale, lineSpacing, textShadow, textOpacity, and backgroundColorArgb fields.