Skip to content

Changing how hidden players look

Out of the box, a hidden player is shown with a random name, a random skin, and everything else untouched: their armour, their hearts, their burning animation. This guide covers how to change each of those.

Everything lives under disguise in config.yml:

config.yml
disguise:
name:
show: true
value: random
prefix: "&7Hidden "
suffix: ""
skin: random
health:
show: true
color: ["&4"]
show_armor: true
show_nbts: true
show_fire: true
show_stuck_arrows: true

value: random and skin: random both mean the same thing: pick one at random from the pool called default. Those pools are two separate files you can edit.

FileHolds
usernames.ymlThe names a hidden player can be given.
skins.ymlThe skins they can be given.

So the fastest way to change how your hidden players look is to edit the default pool in those two files, and leave config.yml alone.

Say you want medieval names for one event, and the usual ones everywhere else.

  1. Add a second pool to usernames.yml.

    usernames.yml
    usernames:
    default:
    - Steve
    - Alex
    medieval:
    - Aldric
    - Bertrand
    - Guenievre

    default is the one used by random. medieval is yours, and the name of the pool is whatever you put there.

  2. Point the zone at it.

    zones.yml
    zones:
    tournament:
    disguise:
    name:
    value: medieval
  3. Apply it.

    /sh reload

Skins work exactly the same way, with pools in skins.yml and skin: medieval in the zone.

name.value and skin accept the same four kinds of value. SomaHider works out which one you meant, in this order:

You writeYou get
randomA random pick from the default pool.
medievalA random pick from your medieval pool.
%factionsuuid_faction_name%The placeholder, resolved on the hidden player.
NotchExactly that: the fixed name Notch, or for a skin, the skin of the player Notch.

The order matters when names collide. A pool called Notch wins over the player called Notch, because pools are checked first. And no pool can be called random, since that word is already taken.

prefix and suffix go around the name and accept colour codes:

config.yml
disguise:
name:
prefix: "&7Hidden "
suffix: " &8[?]"

Mind the spaces inside the quotes. "&7Hidden " has one at the end, which is what separates it from the name.

Both accept placeholders too, including relational ones (%rel_...%) that give a different result for each person looking. That is how you colour a name by whether the viewer is an ally or an enemy.

A player can still be recognised by their gear, their hearts, or the enchanted sword they are holding. Five switches control that:

SettingTurn it off to
name.showRemove the nameplate entirely.
health.showRemove the hearts under the name.
show_armorShow the player as if they were wearing nothing.
show_nbtsStrip item details, so a held item cannot be identified by its tags.
show_fireHide the flames while they burn.
show_stuck_arrowsHide arrows stuck in their body.

Turning show_nbts off is the one with a side effect: some plugins rely on item tags to render items on the client. If yours does, list those tags in nbts.yml and they survive the stripping.

A zone repeats only the keys it wants to change. Everything it leaves out comes from config.yml:

zones.yml
zones:
arena:
world: events
center:
x: 1500
z: 1500
radius: 150
disguise:
name:
prefix: "&cArena "
show_armor: false

This zone keeps the global name pool, skins, hearts and effects. It changes the prefix and hides armour, nothing else.

By default a player can be given a new name each time a zone starts. For a tournament, where people follow each other across several rounds, that is confusing. Turn it off:

config.yml
persist_identity: true

A player now keeps the same name and skin for as long as they stay connected and the zone keeps running. Walking out of the zone and back in returns the same identity. Disconnecting gives a new one, and so does closing the zone.

/sh info <zone> tells you whether the zone uses a disguise of its own or the one from config.yml. That is how you confirm your override was read at all.

To see the result itself, start the zone and stand in it with a second account. A staff member holding soma.hider.bypass can also toggle /sh bypass on and off to compare the two views without leaving the zone.