Home›Java›Mods›Shroud
SHROUD
Hides who somebody is without hiding that they are there.

Spigot & Paper 1.20+ · Java 17+ · no dependencies

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━​


The short version

A shrouded player carries on exactly as they were. They can be seen, walked into, hit and killed like anyone else. The server just stops telling everyone who they are.

I wrote this because I wanted a hitman on my server, and every "hide player" plugin I tried just vanished them, which rather defeats the point of a hitman.

Vanish makes you a ghost. This makes you a stranger.​


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━​


What actually gives someone away

More than you would think, which is why this covers all of it.


Every one of those can be switched off on its own if you only want some of it.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━​


Borrowed skins

This is my favourite part.

Set skin: alias and a shrouded player wears the skin of whoever actually owns the alias name.

Shroud somebody as Anonymous and they turn into the real Anonymous — skin and all. A whole believable person rather than a blank Steve. Rename them with /shroud alias and they become somebody else entirely.
Click to expand...
If nobody owns that name it quietly falls back to the default skin. Lookups go to Mojang once per name, off the main thread, and are cached for a day. If the server cannot reach Mojang at all, the skin is left alone rather than mangled.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━​


Commands

Command What it does
/shroud toggle <player> [alias] Hide them, or bring them back
/shroud on <player> [alias] Shroud them, whatever state they were in
/shroud off <player> Lift it
/shroud alias <player> <alias> Change who they appear to be
/shroud list Who is shrouded, and as what
/shroud reload Reread config.yml and apply it


toggle is the one you actually type. on and off are still there for scripts and command blocks, which want a form that does not depend on what the state happened to be.

Shrouds survive restarts. Someone shrouded when the server went down is still shrouded when they log back in.


Permissions

Node Default Grants
shroud.manage op Use /shroud
shroud.bypass op See real names in chat, completion and /list


One rule worth knowing: bypass never applies to your own shroud. Staff carry on reading real names off everybody else, but somebody who is shrouded themselves is hidden from themselves too. Otherwise the one person who most needs to know it is working is the only one who cannot see it.

Shroud someone who holds bypass and it tells you so first, spells out exactly what they would still be able to read, and gives you two buttons to pick from. No silent half-working shroud.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━​


Config

The parts people actually change:

Code (YAML):

identity
:
  default-alias
: '&8Anonymous'

conceal
:
  tab-list
: rename                     # rename / remove / none
  chat-format
: '< %name%> %message%'
  death-messages
: true
  ...

disguise
:
  skin
: alias                         # alias / steve / custom / none
 
Set chat-format to match whatever your chat plugin prints for everyone else. A line that looks different from every other line is a giveaway on its own.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━​


Spigot and Paper

It runs on both, and tells you which one it found at startup.

Paper Spigot
Tab list, name tag, skin, chat, deaths, joins, completion, /list Yes Yes
Advancement broadcasts Hidden Cannot be hidden
The shrouded player's own screen Immediate At next login


Advancements are the one hard stop. The event exists on Spigot, but nothing on it lets the broadcast be called off — so on Spigot that layer switches itself off and says so in the console. Everything else is identical.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━​


Things worth knowing before you install

I would rather you knew these up front than found them out later.

Spoiler: Why there is no "just remove the skin" option
A client handed a profile with no skin does not draw the default one. It asks Mojang what that player really looks like, and draws that — so stripping a skin is a slower way of showing the truth.

Every mode that hides a skin puts a different real one in its place. That is why there is a lookup at all.

Spoiler: Shrouded chat is sent unsigned
A signed chat packet carries the sender's real name in a field no formatting can reach, so those lines are sent by hand instead. They cannot be reported or verified.

Signing binds a message to the sender's real profile by design, so signed and anonymous is not a combination that exists. Everyone else's chat is untouched, signature and all.

Spoiler: The console still logs real names
Deliberate. You want your own logs readable.

Spoiler: Name tags use the main scoreboard
If another plugin puts players on their own scoreboards, the team will not follow them there.

Spoiler: It edits two outgoing packets
The player list, and command suggestions.

That is what lets the tab row disappear properly, what keeps names out of /msg completion, and what lets a shrouded player see their own disguise.

If a future server build lays either one out differently, Shroud says so once in the console and carries on without that layer rather than breaking anyone. Nothing in it is looked up by name, because names are exactly what server builds disagree about.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━​


Installing

Drop the jar in plugins, start the server, then /shroud on <player>.

The defaults are the settings I actually run.


Bugs and requests

Post them in the discussion tab rather than the reviews — I read both, but I can only reply to one of them.

If something is not hiding that you think should be, tell me what gave it away and I will have a look.

Commands

Plugin details

Read from the plugin's own plugin.yml.

Quick facts

Install steps are the general flow for this file type — How to install Minecraft Java mods & modpacks walks through it step by step.

Shroud is a free Minecraft Java mod. Compatible with Minecraft 1.20, 1.20.6, 1.21, 26.1 and newer. Downloaded 12 times (via Spigot). Download it and open it directly in the game.

Explore more