LuckTAB
Tab list, name tags, sidebar and chat format, all driven by the LuckPerms group a
player is in. One config.yml decides what a rank looks like, and the plugin
applies that prefix everywhere at once: above the head, in the tab list, in front
of the chat message and in the sidebar.
Colors can be legacy codes, hex, or animated gradients that move on their own. Header, footer and sidebar can differ per world and per permission, players can switch their sidebar off, and lines that have nothing to say disappear on their own.
Full documentation is in the wiki.
Requirements
- Paper or Spigot on Minecraft 1.21+
- Java 21
- LuckPerms (required)
- PlaceholderAPI (optional)
- ProtocolLib (optional, only for the static info rows in the tab list)
- EssentialsX, CMI or Purpur (optional, for the AFK tag)
On Paper the sidebar renders through components, so hex and gradients work in every line. On Spigot the sidebar falls back to legacy colors; everything else is the same.
Commands
| Command | Description | Permission |
|---|---|---|
/lucktab reload |
Reload config.yml and rebuild every display |
lucktab.reload |
/lucktab toggle, /sidebar, /sb |
Show or hide your own sidebar, remembered across rejoins | lucktab.toggle |
/lucktab setprefix <group> <prefix> |
Change a rank prefix in game and reload | lucktab.edit |
/lucktab setsuffix <group> <suffix> |
Change a rank suffix in game and reload | lucktab.edit |
/lucktab benchmark |
What the updates cost, in microseconds per section | lucktab.benchmark |
/lucktab migrate to-luckperms |
Write the configured prefixes into LuckPerms groups | lucktab.migrate |
/lucktab migrate from-luckperms |
Read the prefixes of all LuckPerms groups back into the config | lucktab.migrate |
All permissions default to op, except lucktab.toggle, which everyone has.
setprefix and setsuffix save config.yml through Bukkit, which drops the
comments in it. The alias of the toggle command is configurable and is registered
at startup, so changing it needs a restart rather than a reload.
Configuration
Ranks are one line each, in the order they should appear in the tab list. Top is highest:
prefixes:
- "owner;<gradient:#FF0000:#FF7700>[Owner] </gradient>;;&#FF7700"
- "admin;&#FF5555[Admin] &7;;&#FF5555"
- "vip;&6[VIP] &7;;&6"
- "default;&7[Player] &7;;&7"
The format is luckperms_group;prefix;suffix;namecolor. A player who is in none of
the listed groups gets the last entry.
prefix-source decides where prefixes come from. With lucktab they are read from
the config above, with luckperms the prefix and suffix come from the group meta in
LuckPerms and only the sort order and name color stay with the config. The two
migrate commands move the data between both sides, so switching does not mean
typing everything again.
header-footer and scoreboard each hold a designs section. A section named after
a world is used in that world, everything else falls back to default. A design can
also pick itself by permission, which is what a staff board next to a player board
needs:
scoreboard:
designs:
staff:
permission: lucktab.staff
priority: 10
title: "&c&lStaff"
lines:
- "&7TPS: &f%server_tps_1%"
Lines whose placeholders all come back empty, 0 or null are dropped instead of
leaving a gap, so &7Clan: &f%clan_name% is simply not there for a player without a
clan. Empty spacer lines always stay.
animations holds named frame lists, and %anim_<name>% prints the current frame
anywhere a placeholder is allowed. A header and footer design can carry frames
instead of one fixed block and rotate through them.
Colors
| Syntax | Example |
|---|---|
| Legacy | &a, &l, &r |
| Hex | &#FF5555 |
| Gradient | <gradient:#FF0000:#FF7700>text</gradient> |
Gradients animate: the color wave shifts a little every two ticks, so a prefix slowly cycles through its range.
Placeholders
| Placeholder | Meaning |
|---|---|
%player% |
Player name |
%world% |
Current world |
%server_online% |
Online player count |
%server_max_players% |
Slot count |
%player_ping% |
Ping as a plain number |
%lucktab_ping_colored% |
Ping, green/yellow/red by the thresholds in ping-colors |
%lucktab_rank% / %lucktab_prefix% |
The rank prefix |
%lucktab_suffix% |
The rank suffix |
%lucktab_color% |
The name color of the rank |
%lucktab_rank_display% |
Prefix, color, group name and suffix in one |
%lucktab_ping_icon% |
Ping symbol from the ping-icons section |
%lucktab_tps% |
Server TPS with one decimal (Paper, - on Spigot) |
%lucktab_tps_colored% |
TPS, green from 19, yellow from 15, red below |
%lucktab_mspt% |
Average milliseconds per tick (Paper) |
%lucktab_afk% |
The AFK tag, empty while the player is active |
%lucktab_badges% |
Badges for every group the player is in |
%anim_<name>% |
Current frame of an animation |
%chatPrefix% / %chatSuffix% / %chatBadges% / %playerName% / %message% |
Chat format only |
With PlaceholderAPI installed, its placeholders work in every LuckTAB text as well.
LuckTAB registers its own expansion in return, so other plugins can read
%lucktab_prefix%, %lucktab_rank_display%, %lucktab_badges% and the rest; append
_plain for a version without colors. That is also how DiscordSRV picks up the ranks
for its chat bridge: put the placeholder into the DiscordSRV message format.
Building
mvn clean package
The finished jar lands in target/LuckTAB-2.5-RELEASE.jar. bStats is shaded and
relocated into de.empireblocks.luckTAB.metrics; paper-api, the LuckPerms API and
PlaceholderAPI are provided and stay out of the jar.
License
GNU General Public License v3.0. See LICENSE.
Pinned Versions
- R1.21–26.3
Pages
Members
1Owner