Skip to content
BlazeZDocs

Hider

Hide from the tab list behind an anonymous name and skin, with disguise presets and fake join and quit messages.

Version
1.5.3
Runs on
Paper, Purpur, Folia
Minecraft
1.21+
Java
21+
Requires
PacketEvents
Works with
LuckPerms, Vault, TAB, PlaceholderAPI, UnlimitedNameTags
On this page

/hide takes a player out of the tab list and swaps their name and skin for an anonymous one, in chat as well as in game, so anyone who runs into them sees a stranger. Everyone else sees a normal quit message when they hide and a join message when they come back, so nothing gives it away.

Commands that name a hidden player are blocked, so /msg or /tpa can't be used to find them. Staff can be allowed to see through it, and you can set up disguise presets with their own names, skins and even ranks.

Permissions#

PermissionLets a playerDefault
gangstahide.useUse /hide, /show, /unhide, /hidegui and /hidename.OP
gangstahide.use.otherHide and show other players.OP
gangstahide.command.bypassUse commands that name a hidden player.OP
gangstahide.staff.bypassSee hidden players, when staff-hide-bypass.enabled is true.OP
gangstahide.upsidedownChoose to appear upside down when hiding, when upside-down.enabled is true.Everyone
gangstahide.autohideBe hidden on join, when auto-hide-on-join.enabled is true.Nobody
hider.adminUse /hider commands.OP

A preset can require its own permission, set with its permission key.

Commands#

CommandWhat it doesPermission
/hide [player] [name]Hides you, or another player. name sets the name shown while hidden.gangstahide.use
/show [player]Reveals you, or another player. Alias /unhide.gangstahide.use
/hideguiOpens the disguise menu, when disguise-gui.enabled is true.gangstahide.use
/hidename <name>Sets your own hidden name, when disguise-gui.allow-custom-name is true.gangstahide.use
/hider pickupStops or allows picking up items while you're hidden.hider.admin
/hider reloadReloads config.yml.hider.admin

Configuration#

config.yml holds every setting, including your license key and every message.

The disguise#

config.yml
hide-name: '&e&k12345678&f'
hide-skin: 'Dima_Damage'
hide-skin-url: ''
hide-skin-file: ''

hide-name is the name shown while hidden. The skin comes from hide-skin-url (a skin image link) if set, then hide-skin-file, then the player named in hide-skin.

To use skin files from your own machine, turn on the built-in skin server: set skin-server.enabled: true, public-address to your server's public IP or domain, and put PNG files in plugins/Hider/skins/. The server listens on port (default 25566), so that port must be open.

Hiding behavior#

KeyDefaultWhat it does
hide-from-tabtrueRemove hidden players from the tab list.
hide-from-chattrueShow a hidden player's chat messages and mentions under their hidden name.
block-from-commandstrueBlock commands that contain a hidden player's name.
hide-command-togglefalseMake /hide reveal you if you're already hidden.
broadcast-quit-messagetrueSend quit-message when someone hides.
broadcast-join-messagetrueSend join-message when they come back.
show-prefix-in-quit-join-messagefalseAdd the player's Vault prefix to those messages.
staff-hide-bypass.enabledfalseLet staff with the bypass permission see hidden players.
auto-hide-on-join.enabledfalseHide players with gangstahide.autohide as they join.
keep-hide-on-rejoinfalseKeep players hidden through relogs and restarts. Needs a restart to turn on.
unhide-on-joinfalseAlways reveal players when they join. Wins over keep-hide-on-rejoin.
unlimited-name-tagsDISGUISEWith UnlimitedNameTags: show the disguise name (DISGUISE), no name tag (HIDE) or leave it (NONE).

keep-hide-on-rejoin stores who is hidden in data.yml. With database.type: mysql, it uses MySQL instead, so players stay hidden across a network.

Upside down#

config.yml
upside-down:
  enabled: true
  permission: 'gangstahide.upsidedown'

When a player with the permission hides, through /hide, the menu toggle or a preset, a menu asks whether they appear Straight or Upside Down. Closing it without picking cancels the hide. Upside down flips their model for everyone else, the same way Minecraft flips players named Dinnerbone, while their skin and hidden name stay as set. Their hidden name floats above them in place of the normal name tag, or UnlimitedNameTags shows it when installed. Players without the permission, auto-hide and keep-hide-on-rejoin always hide straight, and a player who is revealed always comes back straight.

Presets and the menu#

With disguise-gui.enabled: true, /hidegui shows a hide button and a head for each preset under disguises:

config.yml
disguises:
  ninja:
    type: PLAYER
    display-name: '&aNinja'
    skin: 'Notch'
    disguise-name: '&8Anonymous'
    icon: 'Notch'
    permission: 'gangstahide.disguise.ninja'
    rank: keep

A preset's skin can be skin (a player name), skin-url, skin-file or a raw texture with its signature. Only PLAYER disguises exist.

Ranks while hidden#

With LuckPerms installed, a preset's rank decides the player's rank while hidden:

ValueEffect
keepThe player keeps their own rank. The default.
noneGroups stay, but no prefix shows in tab.
randomThe player is moved into a random group, except those in rank.random-blacklist and default.
a group nameThe player is moved into that group, such as vip.

Real groups are put back when the player unhides or leaves. rank.keep-on-hide shows the player's own prefix on their hidden tab name with plain /hide, and rank.show-prefix-in-tab does the same for a preset's rank.

Install#

  1. Install PacketEvents. Hider doesn't load without it.
  2. Put the Hider jar in plugins/ and start the server once to create config.yml.
  3. Paste your license key into license-key in config.yml. Your key is under My Licenses on the BlazeZ portal; licenses linked to your Discord account show up there automatically. If yours is missing, open a License Key ticket in the BlazeZ Discord.
  4. Restart the server and grant gangstahide.use to whoever should hide.
  5. After editing config.yml, run /hider reload.

Developer API#

Hider fires Bukkit events from me.blazezstudio.minecraft.event.impl.

EventCancellableFires when
GangstaPlayerPreHideEventYesBefore a player is hidden, by /hide, the menu, a preset pick or on join. getDisguiseName(), getPresetId(), getDisguiseType(), getCause(). Cancelling leaves the player as they are.
GangstaPlayerPreShowEventYesBefore a hidden player is shown again, by /show, /unhide, /hide, the menu or on join. getDisguiseName(), getPresetId(), getCause(). Cancelling keeps the player hidden.
GangstaPlayerHideEventNoAfter the player was hidden. Same getters as the pre event.
GangstaPlayerShowEventNoAfter the player was shown.

getCause() returns a HideCause: COMMAND, MENU, AUTO_HIDE_ON_JOIN, KEEP_HIDE_ON_REJOIN or UNHIDE_ON_JOIN.

@EventHandler
public void onHide(GangstaPlayerPreHideEvent event) {
    if (isInCombat(event.getPlayer())) {
        event.setCancelled(true);
    }
}

Add softdepend: [Hider] to your plugin.yml.