Skip to content

Feature guide: Unlimited nametag mode

NEZNAMY edited this page Apr 24, 2024 · 56 revisions

Content

About

Minecraft's name tags have a lot of limitations. This feature makes the nametag invisible and places invisible armor stands there instead (if you're wondering why not area effect clouds or text display, here's why), bypassing all limits and allowing more lines as well.
These are teleported every time players move, making it nearly impossible to notice. They are fully packet based (meaning they don't exist server side and will not stay in the map if anything goes wrong) and are processed asynchronously (has NO impact on your TPS).
The alternate solution - riding the player - is not implemented. Regardless of potentially unsatisfactory experience, the current method (teleporting) took years to perfect and it is expected to take no less for another completely different mode. It would also result in many compatibility issues with player riding plugins and similar.

image

This feature can be configured in config.yml under unlimited-nametag-mode section.

If you have TAB installed on BungeeCord, you will need to install TAB-Bridge on all backend servers to make it work.

Configuration

Defining lines

Dynamic lines

Lines with dynamic height based on presence of other lines. Starting at usual height of nametag, adding 0.26 blocks for every visible non-empty line to build lines. To add more, simply add your own lines with any name you want into the list in position where you want it to be compared to other lines.
Default configuration

dynamic-lines:
      - abovename
      - nametag
      - belowname
      - another

Note: nametag keyword represents the original line - combination of tagprefix + customtagname + tagsuffix
With the default configuration, abovename line will be on top and another on the bottom (with the same height as vanilla nametag). If another is not used, belowname will be on the bottom instead (if configured) and so on.

Static lines

Lines with fixed height. Higher number = higher position. 0 is equal to height of vanilla nametag, 1 would be 1 block higher. Accepts decimal values. To add more, simply define more with their fixed height.
Default configuration

    static-lines:
      myCustomLine: 0.66

Using lines

You can use these lines in configuration like the tagprefix, tagsuffix and other properties, for example: groups.yml

test:
  belowname: "belowname line"
  another: "line of text under belowname"
  myCustomLine: "my line with fixed height"
_DEFAULT_:
  abovename: "Default abovename for everyone"

Additional settings

Option name Default value Description
enabled false Enables / Disables the feature. Keep in mind this is an upgrade for nametag feature, so scoreboard-teams must be enabled as well.
disable-on-boats true Due to an internal player location updating issue, player's visible location and server-side location do not match, causing armor stands to be out of sync when riding boats. Enabling this option will disable the feature for players riding boats to avoid this.
disable-condition %world%=disabledworld A condition that must be met for disabling the feature for players and revert back to vanilla tags. Set to empty for not disabling the feature ever.

Additional info

Additional note 1 - Belowname incompatibility

This feature makes nametag invisible so it can display armor stands instead. Visibility rule also applies to Vanilla belowname, making it not display. You can just disable it as you won't see it anyway. To restore the visual, run /tab group _DEFAULT_ belowname %health% Health.
Tip: If you want to show hearts like in the tablist instead of a number, download the HealthBar expansion for PlaceholderAPI and use %healthbar_default% in the command instead.

Additional note 2 - F5 view

As a result of armor stands being spawned on top of you for everyone, using unofficial minecraft modifications won't allow you to see your own armor stands with F5 like with vanilla nametags. If you want to see them, run /tab nametag preview (the command is a toggle).
When using a modified client, you may end up with double nametags. One of them is the vanilla one and second is using armor stands. Modified clients usually don't respect visibility rule and make nametag visible despite TAB setting it to be invisible.
Note: Armor stand movement will be delayed. This is caused by ping and missing movement animation of self when moving. The delay is not visible when looking at other players (since other players animate along with armor stands).

Additional note 3 - Hiding empty lines

When a line is effectively empty, it is not displayed at all. This means if a line is not configured at all, it is hidden. If a line contains a placeholder and that placeholder returned empty value and there's nothing else in the line (or only color codes), the line will also be hidden and shown again if placeholder changes value.

Additional note 4 - Visible armor stands in spectator gamemode

When in spectator gamemode, the client renders invisible entities and makes them transparent. Since this feature uses armor stands, you'll see armor stands above everyone. It is not possible for the plugin to modify client code.

Additional note 5 - Position bug on Camels

When riding a Camel (added in 1.20), player position on Bukkit-based servers is wrong and flickering, making armor stands flicker as well. This is a server-sided bug (more info) and there is no reasonable way to avoid this on TAB's end. We will need to wait for a fix.
A workaround is to disable the feature for players on camels using disable-condition: "%vehicle%<-Camel" (won't work on BungeeCord though, as the internal placeholder is not available there, you'll need to look for a PlaceholderAPI one).

Additional note 6 - Client-sided visual bugs

[1.8 - 1.10.2] Flickering on sneaking

When sneaking, armor stands will appear in wrong location for a single frame.
https://github.com/NEZNAMY/TAB/assets/6338394/534f7054-6919-46ea-a125-f025f0607dde

[1.14.x] Missing sneaking flag

On these versions, sneaking flag of armor stands is completely ignored by the client. For that reason, when player is sneaking, armor stands will be hidden entirely.

API

To get started with the API, see Developer API page.

To access this feature, you'll need to obtain UnlimitedNametagManager instance. Get it using TabAPI.getInstance().getNameTagManager(). If scoreboard teams feature is disabled, the method will return null.
If unlimited nametag mode is disabled, the returned object will not be an instance of UnlimitedNametagManager.
You can merge both checks using

if (TabAPI.getInstance().getNameTagManager() instanceof UnlimitedNametagManager) {
    UnlimitedNametagManager unm = (UnlimitedNametagManager) TabAPI.getInstance().getNameTagManager();
    //do stuff
}

Just like with prefix and suffix, you have now access to the name itself:

  • UnlimitedNametagManager#setName(TabPlayer, String) (using null value will reset it back to original)
  • UnlimitedNametagManager#getCustomName(TabPlayer)
  • UnlimitedNametagManager#getOriginalName(TabPlayer)

You can do this for any defined line. Find out which lines are defined using UnlimitedNametagManager#getDefinedLines() and then you can use

  • UnlimitedNametagManager#setLine(TabPlayer, String line, String value) (using null value will reset it back to original)
  • UnlimitedNametagManager#getCustomLine(TabPlayer, String line)
  • UnlimitedNametagManager#getOriginalLine(TabPlayer, String line)

You can disable this feature for specific players using

  • UnlimitedNametagManager#disableArmorStands(TabPlayer) for disabling
  • UnlimitedNametagManager#enableArmorStands(TabPlayer) for enabling back
  • UnlimitedNametagManager#hasDisabledArmorStands(TabPlayer) for checking if player has disabled armor stands or not
Clone this wiki locally