• Essentials: "You do not have permission to perform this command." • WorldGuard: "You don't have permission." • LuckPerms: "You don't have permission to use this command." • Bukkit core: "I'm sorry, but you do not have permission..."
Players instantly see your server runs plugins. The "vanilla feel" is broken before they even build anything.
─── THE SOLUTION ───
VanillaGuard intercepts every permission-denied message at the Netty packet level and replaces it with the exact vanilla 1.8 response:
Unknown command. Type "/help" for help.
No prefix. No color. No plugin name. Identical to vanilla Minecraft.
─── KEY FEATURES ───
✓ Universal interception — works with ANY plugin (Essentials, WorldGuard, LuckPerms, WorldEdit, AuthMe, custom plugins) ✓ Multi-language — built-in English and Russian phrase lists, easily extensible ✓ Hides commands in tab-complete — players never see /worldedit:wand suggestions ✓ Hides commands in /help — clean help menu showing only what the player can use ✓ Blocks namespaced commands — /bukkitlugins and /minecraft:me are hidden ✓ Suppression window — contextual interception catches late async messages ✓ Public API — other plugins can integrate via SuppressionService ✓ Whitelisting + Blacklisting — fine-grained control ✓ Permission caching — LRU cache prevents performance hits on big servers ✓ Thread-safe — built for high-population servers ✓ Fail-safe — if NMS reflection fails, event-level protection still works ✓ Zero external dependencies — only Spigot API
─── BEFORE & AFTER ───
WITHOUT VanillaGuard:
/worldedit:wand > You don't have permission for this command.
/gm 1 > You do not have permission to perform this command.
/region info > You don't have permission.
WITH VanillaGuard:
/worldedit:wand > Unknown command. Type "/help" for help.
/gm 1 > Unknown command. Type "/help" for help.
/region info > Unknown command. Type "/help" for help.
─── COMPATIBILITY ───
Server versions: • Spigot 1.8.8 • PaperSpigot 1.8.8 • PandaSpigot 1.8.8 • Any 1.8.x build using NMS v1_8_R3
1. Download VanillaGuard-1.0.0.jar 2. Drop it into your plugins/ folder 3. Restart your server (do not use /reload) 4. Edit plugins/VanillaGuard/config.yml if needed 5. Run /vg reload to apply changes
That's it. Default settings work for 99% of servers.
─── COMMANDS ───
/vanillaguard reload — Reload configuration /vanillaguard status — Show plugin status /vanillaguard cache — Clear permission cache
Aliases: /vg, /vguard
─── PERMISSIONS ───
vanillaguard.admin — Access to admin commands (default: op) vanillaguard.bypass — Bypass all command hiding (default: op)
─── PERFORMANCE ───
• O(1) permission lookups via per-player LRU cache • Cached NMS reflection — no per-packet field iteration • Lock-free packet handling on Netty event loop • Tested on 200+ concurrent players with no measurable overhead • Memory-bounded — no leaks, no unbounded caches
─── DEVELOPER API ───
Other plugins can request VanillaGuard to suppress chat to a player:
This replaces the next ~400ms of chat to that player with the vanilla unknown-command response.
─── FAQ ───
Q: Does this break my admin commands? A: No. OPs and players with vanillaguard.bypass are exempt.
Q: My plugin uses a custom permission message — will it leak? A: Add the phrase to "phrases:" in config.yml. Or just rely on the suppression window — it catches messages right after the blocked command.
Q: Does it work with 1.12 / 1.16 / 1.20? A: This version targets 1.8.8 specifically. Higher version ports are planned.
Q: Will it conflict with ProtocolLib or PacketEvents? A: No. VanillaGuard installs its Netty handler at the tail of the pipeline, after other handlers — guaranteed last-chance interception.
Q: Does it support PlaceholderAPI or Folia? A: Not needed. VanillaGuard has no dependencies and ships as a single small JAR.