Skip to content

The Nametag Above the Head

The name that floats above a playerโ€™s head is the one surface dNicks does not render itself. Instead, dNicks publishes the nick as the %dnicks_name% placeholder and lets your dedicated nametag plugin (TAB, and any other that accepts a placeholder) draw the tag. That keeps a single owner for the nametag, so your rank prefix and the gradient name live in one tag with no duplicate and no fighting over the scoreboard.

TL;DR โ€” keep your role pluginโ€™s prefix/suffix placeholders, swap only the name for %dnicks_name%. One line of config in TAB does it.

The nameplate above a head is rendered by the client, from the scoreboard team packet:

team_prefix | teamColor(profileName) | team_suffix

profileName is the raw Minecraft username โ€” max 16 chars, [A-Za-z0-9_], one single team color, no ยง, no hex, no gradient. That is a client rendering limit; ProtocolLib, TAB, and every packet library hit the same wall. The only way to get a per-character gradient above a head is to render the name as custom text (an entity / an โ€œunlimited nametagโ€ line) instead of the vanilla name slot.

Your nametag plugin already does exactly that โ€” TABโ€™s unlimited nametags replace the name line with custom, RGB-capable text. So rather than dNicks spawning a second competing text entity, it hands the styled nick to the plugin that already owns that line. dNicks feeds; TAB renders.

This is the recipe you want: LuckPerms (or any role plugin) keeps the prefix/suffix, %dnicks_name% becomes the name.

Requirements: PlaceholderAPI installed (so TAB can read %dnicks_name%), and TABโ€™s unlimited-nametag feature enabled so the name line can carry hex.

1. Enable unlimited nametags in TAB (TAB/config.yml) โ€” this lets the name line render full RGB instead of the single-color vanilla slot:

scoreboard-teams:
enabled: true
unlimited-nametag-mode:
enabled: true

2. Point TABโ€™s nametag at the placeholders (TAB/groups.yml, or per-group / users.yml):

_DEFAULT_:
tagprefix: "%luckperms_prefix%" # role prefix โ€” unchanged
customtagname: "%dnicks_name%" # the NAME above the head โ€” the gradient nick
tagsuffix: "%luckperms_suffix%" # role suffix โ€” unchanged

Result above the head:

[OWNER] DZUSILL โ† [OWNER] from LuckPerms, DZUSILL is a real gradient

tagprefix / tagsuffix keep whatever your permissions plugin already produced. Only customtagname changed โ€” from the vanilla username to the dNicks nick.

The tab list (hold Tab) uses the parallel keys. Either let dNicks own it directly (surfaces.tablist: true, the default) or let TAB render it from the placeholder โ€” not both:

_DEFAULT_:
tabprefix: "%luckperms_prefix%"
customtabname: "%dnicks_name%" # needs surfaces.tablist: false in dNicks
tabsuffix: "%luckperms_suffix%"

If TAB owns the tab list this way, set surfaces.tablist: false in dNicks so the two donโ€™t fight. See The Tab List.

Any nametag plugin that accepts a placeholder for its name/tag line works the same way: put your role placeholder in the prefix slot and %dnicks_name% in the name slot. If the plugin only exposes a single combined line, use:

%luckperms_prefix%%dnicks_name%%luckperms_suffix%

%dnicks_name% is emitted as legacy ยง-hex, so per-character gradient survives for any string-based consumer. See Placeholders.

When a player runs /nick, dNicks updates its stored nick immediately. The nametag refreshes on your nametag pluginโ€™s own cycle โ€” TAB re-resolves placeholders on its refresh interval (typically sub-second), so the new name appears without a relog. No dNicks-side entity is spawned, moved, or cleaned up.

Earlier builds spawned a TextDisplay entity above the head and hid the vanilla name via a scoreboard team. That is gone โ€” there is no surfaces.nametag, formats.nametag, or nametag-display section anymore. If you upgraded:

  • Those keys in an old config.yml are simply ignored (harmless). Delete them for a clean file.
  • Any leftover text entities from the old version: /kill @e[type=text_display] once, then restart.
  • Move your old formats.nametag content into TABโ€™s tagprefix + customtagname as shown above.

See Integrations for the full TAB + LuckPerms + EssentialsX picture.