Troubleshooting HoloPanels

Start with these two commands:

/holopanels validate
/holopanels debug

validate checks the whole candidate configuration without applying it. debug reports what the current player is actually being sent, including board, view and session state.

Also record /holopanels info <board>, the server version, HoloPanels version and PacketEvents version before changing files. That snapshot distinguishes a configuration change from a platform or dependency change.

A board does not appear

Check in this order:

  1. /holopanels list says the board is configured and placed.
  2. /holopanels info <board> resolves its root-view.
  3. The player is inside visibility-distance.
  4. The board's visible-if condition passes for that player.
  5. The view contains at least one visible panel.
  6. PacketEvents is installed and enabled before HoloPanels.

A failed board or panel condition removes both rendering and click geometry. Temporarily simplify visible-if, validate, and reload to isolate a condition branch.

Text appears backwards or inside the wall

The anchor yaw defines the board's axes. /holopanels wall <board> is the safest placement command. For /holopanels here, stand where a viewer will stand and face away from the intended surface. Use /holopanels nudge <board> forward 0.05 or back 0.05 for small corrections.

Text is visible but clicks fail

  • Confirm the player has holopanels.use.
  • Move inside click-distance; visibility can extend farther than interaction.
  • Run /holopanels debug and confirm the button is part of the rendered view.
  • Check the button's own visible-if and the action's guards.
  • Tune style.click-offset-y only when every click is consistently vertically displaced.

An invisible button has no hit region. A condition is therefore an access gate, not only a visual effect.

Placeholders do not update

PlaceholderAPI must be installed for %...% values. Only lines containing placeholders are placed on the placeholder refresh loop. Check placeholder-refresh-ticks, then use /holopanels refresh [board] to drop cached provider content and force a redraw.

Reload fails

The running snapshot stays active when the candidate cannot parse. Read the first configuration error in the console, correct that path, and run validate again. Common causes are:

  • a board references an unknown view id;
  • a required panel key is missing;
  • a style number must be positive;
  • background-opacity is outside 0–1;
  • a provider, condition or action id is unknown because its addon is not enabled.

Provider or addon content stays empty

Confirm the addon declares depend: [HoloPanels], loads the API from Bukkit's services manager and registers ids in its own namespace. A list provider belongs under source.provider; a text provider uses content-provider. The provider method must return quickly with a CompletionStage and do blocking work on an executor it controls. Provider exceptions are logged with the board and panel id, and /holopanels refresh <board> clears the viewer cache for another attempt.