Features
TabList & Scoreboards
Live TabList
The tablist section drives one live header/footer, refreshed continuously. Any PlaceholderAPI placeholder works, plus animations and conditions.
tablist:
enabled: true
# condition: "" # optional named condition
# permission: "" # optional
# worlds: [] # optional
header:
- "%animation:brand%"
- "<gray>Welcome, <white>%player_name%"
footer:
- "<gray>Online: <yellow>%server_online%<gray>/<yellow>%server_max_players%"
Players can hide it with /xannounce toggle tablists.
Live Scoreboards
Define one or more sidebars under scoreboards. For each player, the first scoreboard whose condition (and permission / worlds) matches is shown — config order is priority.
scoreboards:
vip:
enabled: true
condition: is-vip # only VIP players get this board
title: "%animation:brand%"
lines:
- "<gray>Rank: <gold>VIP"
- "<gray>Ping: <yellow>%player_ping%ms"
- "%xannounce_condition_low-health%" # line hidden unless the condition matches
default:
enabled: true # fallback for everyone else
title: "%animation:brand%"
lines:
- "<gray>Player: <white>%player_name%"
| Property | Description |
|---|---|
enabled | Turn a scoreboard off without deleting it |
condition / permission / worlds | Who sees this board (first match wins) |
title | The sidebar title (MiniMessage, placeholders, animations) |
lines | Up to 15 lines; a line that resolves to empty is hidden |
Packet-based & Folia-safe. XAnnounce sends the scoreboard packets directly (via FastBoard) instead of the Bukkit Scoreboard API, which cannot create scoreboards on Folia. Score numbers are hidden, and only changed lines are re-sent — no flicker. Static lines (no placeholder) are parsed once and shared across players, so the refresh loop stays cheap even with many players.
Refresh Rate
A single async clock drives both the tab-list and the scoreboards; the per-player work runs on each player's region thread.
display:
refresh-ticks: 5 # 5 ticks = 0.25s. Lower = smoother, costlier.
Players hide their scoreboard with /xannounce toggle sidebars.