/
/vspec Quick-Spectate Command: Instantly enter spectator mode on a specific player with /vspec <player>. Use /vspec stop to return to your previous location and gamemode. Requires vanishpp.spec./vfollow Player Tracking HUD: Lock your camera to follow any player silently with /vfollow <player>. A HUD indicator shows active follow target. Stops automatically if the target disconnects. Requires vanishpp.follow./vhistory Audit Log: Full vanish/unvanish history with timestamps, executor, and reason. Stored in DB. Requires vanishpp.history./vautovanish Per-Player Auto-Join Preference: Players can opt into automatic vanish on join. Persisted per UUID — survives restarts and server switches. Requires vanishpp.autovanish./vstats Vanish Time Statistics: Shows total vanish time, session count, and longest session per player. Requires vanishpp.stats./vadmin Dashboard GUI: In-game GUI overview of all vanished players, active rules, and quick actions. Requires vanishpp.admin./vwand Toggle Item: Grants a Blaze Rod vanish wand. Right-clicking toggles vanish state. Configurable in config.yml. Requires vanishpp.wand./vzone No-Vanish Zones: Define radius-based zones where vanishing/unvanishing is blocked or forced. Managed with /vzone create|delete|list|reload. Requires vanishpp.zone./vincognito Fake Name Mode: Replace your display name and tab entry with a custom fake name while vanished. Requires vanishpp.incognito.vanished context node in LuckPerms so permissions can be conditionally granted while a player is vanished.vanishpp-force-vanish (auto-vanishes players entering) and vanishpp-deny-vanish (blocks toggling vanish in the region)./vanish <player> [reason] records and displays a reason shown to staff via hover or /vhistory./vanish all and /vanish world <world> vanish all eligible online players or all players in a specific world at once./vrules preset <save|load|list|delete> <name>. Requires vanishpp.rules.config.yml.VanishAPI) exposing vanish state queries, vanish/unvanish calls, event hooks, and rule reads for third-party plugin integration./msg//tell//r//me Detection Prevention: Non-seers can no longer /msg, /tell, or use any private-message command to reach a vanished player — they receive a vanilla-style fake error. /r reply is blocked when the last target was a vanished sender. /me from a vanished player is restricted to staff-only audience. Covers vanilla and EssentialsX aliases. Fake error text is configurable under commands.msg-player-not-found in messages.yml.messages.yml Auto-Migration: Missing message keys from the default file are automatically written back to the user's messages.yml on load, so upgrading never leaves a key undefined.%vanishpp_visible_player_list% PAPI Placeholder: New PlaceholderAPI placeholder that returns a comma-separated list of all online non-vanished (visible) players. Complements the existing %vanishpp_vanished_list% for HUDs and scoreboards that need to display who is online.SafeLookAtPlayerGoal (a custom Paper MobGoals injection) was causing LookAtPlayerGoal to leak into the LOOK goal slot on servers where the custom goal claimed the slot only conditionally. Removed entirely; mob targeting prevention now relies solely on EntityTargetEvent cancellation, which is reliable and cross-version.FoliaSchedulerBridge.runLaterGlobal() passed caller-supplied tick values directly to Folia's runDelayed, which throws IllegalArgumentException for <= 0. Bridge now falls back to immediate runGlobal execution. (PR #11, reported by XChen446)refreshVisibilityWithGlow() iterated the live Bukkit.getOnlinePlayers() collection while sending packets and forced a hide+show cycle on every observer — including non-seers. Under load this caused a packet burst that disconnected players. Fixed by snapshotting the player list before iteration and limiting the hide+show respawn cycle to seers only (who need it to flush glow metadata).CUSTOM_SOUND_EFFECT Boot Warning: Registering a packet listener for CUSTOM_SOUND_EFFECT on Minecraft versions where that packet type is absent produced a [ProtocolLib] Plugin Vanishpp tried to register listener for unknown packet CUSTOM_SOUND_EFFECT (unregistered) WARN on every server start. The silent-chest sound suppression listener now checks PacketType.Play.Server.CUSTOM_SOUND_EFFECT.isSupported() before registering and skips it on unsupported versions. Reported by a community member./vspec Quick-Spectate Command: Instantly enter spectator mode on a specific player with /vspec <player>. Use /vspec stop to return to your previous location and gamemode. Requires vanishpp.spec./vfollow Player Tracking HUD: Lock your camera to follow any player silently with /vfollow <player>. A HUD indicator shows active follow target. Stops automatically if the target disconnects. Requires vanishpp.follow./vhistory Audit Log: Full vanish/unvanish history with timestamps, executor, and reason. Stored in DB. Requires vanishpp.history./vautovanish Per-Player Auto-Join Preference: Players can opt into automatic vanish on join. Persisted per UUID — survives restarts and server switches. Requires vanishpp.autovanish./vstats Vanish Time Statistics: Shows total vanish time, session count, and longest session per player. Requires vanishpp.stats./vadmin Dashboard GUI: In-game GUI overview of all vanished players, active rules, and quick actions. Requires vanishpp.admin./vwand Toggle Item: Grants a Blaze Rod vanish wand. Right-clicking toggles vanish state. Configurable in config.yml. Requires vanishpp.wand./vzone No-Vanish Zones: Define radius-based zones where vanishing/unvanishing is blocked or forced. Managed with /vzone create|delete|list|reload. Requires vanishpp.zone./vincognito Fake Name Mode: Replace your display name and tab entry with a custom fake name while vanished. Requires vanishpp.incognito.vanished context node in LuckPerms so permissions can be conditionally granted while a player is vanished.vanishpp-force-vanish (auto-vanishes players entering) and vanishpp-deny-vanish (blocks toggling vanish in the region)./vanish <player> [reason] records and displays a reason shown to staff via hover or /vhistory./vanish all and /vanish world <world> vanish all eligible online players or all players in a specific world at once./vrules preset <save|load|list|delete> <name>. Requires vanishpp.rules.config.yml.VanishAPI) exposing vanish state queries, vanish/unvanish calls, event hooks, and rule reads for third-party plugin integration./msg//tell//r//me Detection Prevention: Non-seers can no longer /msg, /tell, or use any private-message command to reach a vanished player — they receive a vanilla-style fake error. /r reply is blocked when the last target was a vanished sender. /me from a vanished player is restricted to staff-only audience. Covers vanilla and EssentialsX aliases. Fake error text is configurable under commands.msg-player-not-found in messages.yml.messages.yml Auto-Migration: Missing message keys from the default file are automatically written back to the user's messages.yml on load, so upgrading never leaves a key undefined.%vanishpp_visible_player_list% PAPI Placeholder: New PlaceholderAPI placeholder that returns a comma-separated list of all online non-vanished (visible) players. Complements the existing %vanishpp_vanished_list% for HUDs and scoreboards that need to display who is online.SafeLookAtPlayerGoal (a custom Paper MobGoals injection) was causing LookAtPlayerGoal to leak into the LOOK goal slot on servers where the custom goal claimed the slot only conditionally. Removed entirely; mob targeting prevention now relies solely on EntityTargetEvent cancellation, which is reliable and cross-version.FoliaSchedulerBridge.runLaterGlobal() passed caller-supplied tick values directly to Folia's runDelayed, which throws IllegalArgumentException for <= 0. Bridge now falls back to immediate runGlobal execution. (PR #11, reported by XChen446)refreshVisibilityWithGlow() iterated the live Bukkit.getOnlinePlayers() collection while sending packets and forced a hide+show cycle on every observer — including non-seers. Under load this caused a packet burst that disconnected players. Fixed by snapshotting the player list before iteration and limiting the hide+show respawn cycle to seers only (who need it to flush glow metadata).CUSTOM_SOUND_EFFECT Boot Warning: Registering a packet listener for CUSTOM_SOUND_EFFECT on Minecraft versions where that packet type is absent produced a [ProtocolLib] Plugin Vanishpp tried to register listener for unknown packet CUSTOM_SOUND_EFFECT (unregistered) WARN on every server start. The silent-chest sound suppression listener now checks PacketType.Play.Server.CUSTOM_SOUND_EFFECT.isSupported() before registering and skips it on unsupported versions. Reported by a community member./vanish needed after switching. Works on BungeeCord/Velocity networks with a shared database. Stale in-memory entries for offline players are also periodically purged so no server accumulates phantom vanished UUIDs.AsyncPlayerPreLoginEvent (before the player fully connects), so it is applied on the very first tick of PlayerJoinEvent with zero additional delay. On a proxy network, players switching servers appear vanished or visible to staff immediately, with no visible flicker or catch-up period.vanishpp-velocity) provides a dedicated vanishpp:proxy plugin messaging channel for real-time cross-server state sync, config push, and network-wide /vanishreload. The proxy maintains an authoritative vanished-player list and broadcasts state changes to all connected Paper servers instantly. Automatically detected on startup — servers fall back to standalone mode if no Velocity proxy is found.timezone-offset-hours): The scoreboard's %time% and %date% placeholders now support a configurable hour offset applied on top of the base timezone. Set timezone-offset-hours: 2 in scoreboards.yml to shift the displayed time forward by two hours from the base zone (supports decimals like 5.5 for IST). timezone: "default" already uses the server's system clock; the offset is applied on top of whichever zone is configured.[Disabled Features ▶] hover button listing all 7 features that require ProtocolLib (tab-complete scrubbing, entity packet filtering, ghost-proof spawning, scoreboard team scrubbing, server list count adjustment, silent chest animations/sounds, staff glow).MobAiManager with a correct implementation. The root cause of the 1.1.5 regression was that SafeLookAtPlayerGoal returned false from shouldActivate() when only vanished players were nearby — this freed the LOOK goal slot, allowing the vanilla LookAtPlayerGoal to fill it (vanilla has no vanish awareness). SafeLookAtPlayerGoal now claims the LOOK slot whenever any player is in range (returning true with a null target when all nearby players are vanished), so the vanilla goal can never activate for vanished players. A periodic 20-tick sweep also force-clears any combat targets pointing at vanished players as a safety net./vrules <player> mob_targeting time 30) expired on server A while the player was already connected to server B, the notification was never shown. The fix is three-layered: (1) a PLAYER_MESSAGE packet type routes the message through the Velocity proxy to wherever the player currently is; (2) if no carrier player is available to send the packet, a __notify_expired__<rule> flag is written to the shared database; (3) a 5-second async poll on every server checks online players for pending DB flags and delivers + clears them immediately — no reconnect required. The rule revert itself always completes successfully; only the notification delivery was affected.getEntityFromID() was being called from ProtocolLib packet listeners on async threads (e.g. triggered by Orebfuscator), causing console spam and unsafe cross-thread world access. Entity ID to UUID resolution is now handled via a local ConcurrentHashMap cache populated at join and cleared at quit, keeping all lookups off the world thread entirely. (Thanks SimplyRan, PR #5)player.addPotionEffect() and player.removePotionEffect() directly caused an UnsupportedOperationException on Folia because the global scheduler does not own any player entity's region. Night vision potion calls in applyVanishEffects, removeVanishEffects, and resyncVanishEffects are now dispatched through vanishScheduler.runEntity(), which routes to the entity's own region scheduler on Folia and to the main thread on all other platforms. (Thanks SimplyRan, PR #1)/vanishreload: Changing storage.type in config.yml (e.g. from YAML to POSTGRESQL) had no effect until the server was fully restarted. /vanishreload now shuts down the active storage provider and reinitializes it from the current config, making storage type changes take effect immediately./vanishscoreboard Visible in Tab-Complete for All Players: The command appeared in tab-complete for players who lacked vanishpp.scoreboard, revealing the feature's existence. The command entry in plugin.yml now declares permission: vanishpp.scoreboard, causing Bukkit to hide it from players without that node.MobAiManager called Bukkit.getMobGoals() — a Paper-only API — unconditionally on startup, causing NoSuchMethodError crashes on Spigot and Bukkit when the listener was registered. The manager is now only registered when the Paper API surface is confirmed present (Paper, Purpur, Folia). Mob AI goal injection and the 20-tick sweep remain fully operational on all Paper-family servers; on Spigot/Bukkit mob targeting prevention continues to work via EntityTargetEvent./vanish needed after switching. Works on BungeeCord/Velocity networks with a shared database. Stale in-memory entries for offline players are also periodically purged so no server accumulates phantom vanished UUIDs.AsyncPlayerPreLoginEvent (before the player fully connects), so it is applied on the very first tick of PlayerJoinEvent with zero additional delay. On a proxy network, players switching servers appear vanished or visible to staff immediately, with no visible flicker or catch-up period.vanishpp-velocity) provides a dedicated vanishpp:proxy plugin messaging channel for real-time cross-server state sync, config push, and network-wide /vanishreload. The proxy maintains an authoritative vanished-player list and broadcasts state changes to all connected Paper servers instantly. Automatically detected on startup — servers fall back to standalone mode if no Velocity proxy is found.timezone-offset-hours): The scoreboard's %time% and %date% placeholders now support a configurable hour offset applied on top of the base timezone. Set timezone-offset-hours: 2 in scoreboards.yml to shift the displayed time forward by two hours from the base zone (supports decimals like 5.5 for IST). timezone: "default" already uses the server's system clock; the offset is applied on top of whichever zone is configured.[Disabled Features ▶] hover button listing all 7 features that require ProtocolLib (tab-complete scrubbing, entity packet filtering, ghost-proof spawning, scoreboard team scrubbing, server list count adjustment, silent chest animations/sounds, staff glow).MobAiManager with a correct implementation. The root cause of the 1.1.5 regression was that SafeLookAtPlayerGoal returned false from shouldActivate() when only vanished players were nearby — this freed the LOOK goal slot, allowing the vanilla LookAtPlayerGoal to fill it (vanilla has no vanish awareness). SafeLookAtPlayerGoal now claims the LOOK slot whenever any player is in range (returning true with a null target when all nearby players are vanished), so the vanilla goal can never activate for vanished players. A periodic 20-tick sweep also force-clears any combat targets pointing at vanished players as a safety net./vrules <player> mob_targeting time 30) expired on server A while the player was already connected to server B, the notification was never shown. The fix is three-layered: (1) a PLAYER_MESSAGE packet type routes the message through the Velocity proxy to wherever the player currently is; (2) if no carrier player is available to send the packet, a __notify_expired__<rule> flag is written to the shared database; (3) a 5-second async poll on every server checks online players for pending DB flags and delivers + clears them immediately — no reconnect required. The rule revert itself always completes successfully; only the notification delivery was affected.getEntityFromID() was being called from ProtocolLib packet listeners on async threads (e.g. triggered by Orebfuscator), causing console spam and unsafe cross-thread world access. Entity ID to UUID resolution is now handled via a local ConcurrentHashMap cache populated at join and cleared at quit, keeping all lookups off the world thread entirely. (Thanks SimplyRan, PR #5)player.addPotionEffect() and player.removePotionEffect() directly caused an UnsupportedOperationException on Folia because the global scheduler does not own any player entity's region. Night vision potion calls in applyVanishEffects, removeVanishEffects, and resyncVanishEffects are now dispatched through vanishScheduler.runEntity(), which routes to the entity's own region scheduler on Folia and to the main thread on all other platforms. (Thanks SimplyRan, PR #1)/vanishreload: Changing storage.type in config.yml (e.g. from YAML to POSTGRESQL) had no effect until the server was fully restarted. /vanishreload now shuts down the active storage provider and reinitializes it from the current config, making storage type changes take effect immediately./vanishscoreboard Visible in Tab-Complete for All Players: The command appeared in tab-complete for players who lacked vanishpp.scoreboard, revealing the feature's existence. The command entry in plugin.yml now declares permission: vanishpp.scoreboard, causing Bukkit to hide it from players without that node.MobAiManager called Bukkit.getMobGoals() — a Paper-only API — unconditionally on startup, causing NoSuchMethodError crashes on Spigot and Bukkit when the listener was registered. The manager is now only registered when the Paper API surface is confirmed present (Paper, Purpur, Folia). Mob AI goal injection and the 20-tick sweep remain fully operational on all Paper-family servers; on Spigot/Bukkit mob targeting prevention continues to work via EntityTargetEvent.vanishpp.scoreboard). Displays world, TPS, online count, coordinates, direction, biome, ping, health, food, armor, time, date, vanish level, and more. Updates coordinates in real-time on movement via ProtocolLib packet listener (with configurable cooldown). Toggle manually with /vscoreboard. Auto-shows on vanish, hides on unvanish. Configured in scoreboards.yml. Reloads with /vreload./vscoreboard Command: Toggle the vanish scoreboard on/off. Requires vanishpp.scoreboard.%world%, %tps%, %tps_raw%, %online%, %max_players%, %vanished_count%, %x%, %y%, %z%, %direction%, %biome%, %ping%, %gamemode%, %health%, %max_health%, %food%, %armor%, %level%/%vanish_level%, %player%, %displayname%, %memory_used%, %memory_max%, %entities%, %chunks%, %time%, %date%. PlaceholderAPI supported./vlist Interactive Player Names: Each player name in /vlist output is now clickable. Hovering shows the player's vanish level and world; clicking runs /vanish <player> to unvanish them instantly.vanishpp.update are notified without needing a server restart.vpp_schema_version and runs structured migrations on startup, allowing for future schema changes. Schema v2 adds created_at/updated_at columns for future audit trail features.vanishpp.admin or OP status are notified in-game (throttled every 5 minutes to prevent spam). Helps identify infrastructure issues without requiring log file access.sendJoinMessage()/sendLeaveMessage() methods, honouring the embed, colour, avatar, and webhook settings configured in DiscordSRV's messages.yml. Previously they were always plain bold text regardless of configuration.| separator are automatically padded so the separator lands at the same column on every line. Label widths are measured after stripping color codes. Works for any custom label length — no manual padding needed.NumberFormat.blank() API for a cleaner look.false/0 — now the intended default is always applied even on a stripped config file.removePlayerData() now uses transactions to ensure all-or-nothing deletion. Connection errors during cleanup are logged but don't partially corrupt data.BukkitSchedulerBridge instead of FoliaSchedulerBridge. Added Bukkit.getName() as a fallback detection method. Additionally, Folia forbids ScoreboardManager.registerNewTeam() on the startup thread — team setup is now deferred to the global region scheduler, and vanishTeam usages are null-guarded for the brief window before it completes.prevent-potion-effects Wrong Default: This setting defaulted to true in code, silently blocking all potion effects (including healing potions thrown by staff) on servers where the key was missing from config.yml. Corrected to false.vpp_acknowledgements table was missing from the MySQL/PostgreSQL schema. Persistent acknowledgements (ProtocolLib missing warning, config migration reports) were silently ignored for SQL storage users — they are now stored and respected correctly.removePlayerData Left Stale Acknowledgements: Removing a player's data via SQL did not delete their acknowledgement rows. Stale entries could suppress future notifications for that UUID. Now cleared along with rules and level data in a single transaction.getRules Returned Strings Instead of Booleans: getRules() returned raw SQL text values ("true", "false") instead of Boolean objects, breaking any code comparing rule values by type. Values are now parsed to Boolean before being returned.addAcknowledgement() Syntax Error: PostgreSQL ON CONFLICT clause was incomplete, missing the constraint columns. Now correctly uses ON CONFLICT (uuid, notification_id) DO NOTHING.ConcurrentModificationException in Folia's multi-region environment. Now uses immutable snapshots for safe iteration.init() multiple times (e.g., on reload) would fail with primary key violations. Now idempotent and safe to call repeatedly.AchievementMessagePreProcessEvent as a safety net in addition to DiscordSRV's native vanish check.DeathMessagePreProcessEvent as a safety net.
More Features than other plugins. Be truly invisible EVERYWHERE!