A vanish that looks like a real disconnect
How Cryon-Visibility hides staff from players, mobs, the tab list and the world itself, without a single tell.
On this page 6 sections
Most vanish plugins hide your player model and call it done. Then someone notices the tab list didn’t shrink, or a zombie is walking at nothing, or a chest lid just opened by itself, or the sleep message says “1/3 players sleeping” with two people online. Any one of those tells a watchful player staff are there.
Cryon-Visibility is built to make vanishing indistinguishable from actually logging off, to anyone without permission to see through it.
The presence story
To a player who can’t see you, you leave:
- A normal leave message goes out, the tab list shrinks, and the server-list player count drops.
/msgto you answers that you’re not online, and your name disappears from tab completion.- You’re pulled out of scoreboard team rosters the client was already sent. Without that step the nametag roster alone would confirm you never left.
Your vanished state syncs across the network and is pushed into Cryon-Commons’ network presence, so every other server treats you the same way.
Mobs that don’t notice you
Hiding the player model does nothing about the server’s own idea of who’s there. Mobs still target you, villagers still turn their heads to look at you, and trial spawners still count you as a player in range. There’s no API or event to change any of that.
The server’s real test is whether a player “can be seen by anyone”, and a spectator can’t. So while vanished, the one private field the server reads for your game mode is set to spectator directly, with no packet sent. Your client never finds out: it stays in creative with your hotbar, flight and creative inventory intact, because those are gated on a separate ability flag rather than on game mode. The mask lifts while you have a container open, so opening a chest still works normally, and your own client keeps drawing your arm and body.
The world gives you away too
Two subtler tells come from the world itself:
- Sleeping. The server counts vanished players toward the sleep requirement, which is how you get “1/3 players sleeping”. Each world’s sleep counter is swapped for one that filters vanished players out before counting, and restored when the world unloads.
- Simulation distance. Crops growing and mobs moving in chunks just outside another player’s own range are evidence of an unseen player standing nearby. While vanished, your simulation distance is lowered, and restored when you reappear.
Silent containers
Opening a chest near someone plays a sound and animates the lid. While you’re vanished, the lid packet is held back for the whole time the container is open (the server re-broadcasts it every five ticks, so it has to be withheld every time), and the open and close sounds are claimed with a token so unrelated sounds at the same spot aren’t swallowed by mistake. If a visible player opens the same chest while you’re in it, they see and hear exactly what they would if they were alone.
Built for Folia
Bukkit’s hide state is keyed per plugin, and every Cryon module shares one plugin instance, so the visibility engine is the only code allowed to call hidePlayer. Two modules writing it independently would silently undo each other.
On Folia, hiding a player writes into the viewer’s entity tracker, which belongs to the viewer’s region thread. A naive refresh loops over every pair of players, which is 40,000 cross-region hops at 200 players. The engine instead makes one hop per viewer and settles everything for that viewer on its own thread: 200 hops.
The packet side (tab list, tab completion, scoreboard teams, container sounds and lids, and glow for staff who can see vanished players) runs on netty’s threads, sharing nothing but a handful of concurrent collections. Scoreboard teams are the exception: the scoreboard is one server-wide object, so that runs as a single task on the global thread instead of a hop per viewer.
Quality of life for staff
Vanishing shouldn’t make moderation harder, so staff get an action-bar reminder while vanished, shulker boxes that open straight from the hand, a double-crouch to flip between creative and spectator, and a glow on the nearest player.