Paper 1.21.4 · Java 21 · SQLite

Vanguard

Advanced moderation plugin — one unified /mod GUI with full punishment, utility, and reporting tools.

Overview

🛡️
Single Entry Point
All moderation is done via /mod <player> — a clean paginated GUI.
🗄️
SQLite Storage
Punishments, warnings, IPs, chat logs, cases, and reports all persisted locally.
📋
Preset Reasons
Every punishment action comes with curated preset reasons, plus custom chat-input.
🔔
Discord Webhooks
Punishment events can be posted to a Discord channel via webhook (no bot required).

Commands

Staff utility commands available as direct slash commands.

Command Usage Description Permission Alias
/mod /mod <player> Opens the full moderation GUI for a player. Supports online and offline targets. vg.command.mod
/vanish /vanish Toggles vanish mode. Vanished players are hidden from non-staff, have no join/quit messages, and receive Night Vision. vg.command.vanish
/staffchat /staffchat [message] With a message argument: sends directly to staff chat. Without arguments: toggles staff chat mode (all chat goes to staff only). vg.command.staffchat /sc
/commandspy /commandspy Toggles command spy. When enabled, you will see every command run by any player in real time. vg.command.commandspy /cspy
/back /back Teleports you to your previously saved location. Location is saved automatically before each teleport. vg.command.back
/clearchat /clearchat Pushes 100 blank lines to every online player, effectively clearing the global chat. Announces who cleared it. vg.command.clearchat
/slowmode /slowmode <seconds|off> Sets a global chat cooldown. Players without vg.chat.bypass must wait the specified seconds between messages. Use off or 0 to disable. vg.command.slowmode
/globalmute /globalmute Toggles a server-wide chat mute. Only players with vg.chat.bypass can speak while active. Announces to all players. vg.command.globalmute
/report /report <player> <reason> Submits a report against an online player. All online staff are notified immediately. Reports are stored in the database. vg.command.report
/staffreports /staffreports Lists all unresolved player reports with IDs, reporter, target, reason, and timestamp. vg.command.staffreports
/vanguard /vanguard <reload|version|altexempt> reload — Reloads config.yml and messages.yml without restart. version — Displays plugin and server version. altexempt <p1> <p2> — Permanently exempts two players from each other's alt detection (useful for shared-IP households). vg.admin /vg

/mod GUI — Actions

Run /mod <player> to open the GUI. Only actions you have permission for are shown. The GUI flow is: Action → Reason → Duration (temp) → Confirm (destructive) → Execute.

⚔ Punishment

Warn
Reason required

Issues a formal warning logged to the database. Configurable auto-punish thresholds trigger temp-mutes, temp-bans, or permanent bans on repeat offences.

vg.command.warn
Kick
Reason required Online only

Instantly disconnects the player with a formatted kick message showing the reason and staff name.

vg.command.kick
Temp-Mute
Reason required Duration required

Prevents the player from chatting for the specified duration. Works on offline players. Durations: 10 min → 30 days.

vg.command.tempmute
Mute
Reason required

Permanently prevents the player from chatting until manually unmuted. Persists across restarts via database.

vg.command.mute
Temp-Ban
Reason required Duration required

UUID-based ban for a set duration. Player is kicked if online. Duration range: 10 min → 30 days via GUI picker.

vg.command.tempban
Ban
Reason required Confirm required

Permanent UUID-based ban. Requires confirmation step. Player sees a custom ban screen on reconnect attempt.

vg.command.ban
IP-Ban
Reason required Confirm required

Blocks all connections from the player's last known IP address. IP is resolved from the database or live connection. Requires confirmation.

vg.command.ipban
Shadow-Mute
Reason required

The player appears to be chatting normally but their messages are only visible to themselves and staff. Useful for catching spam bots.

vg.command.shadowmute

🔧 Staff Utilities

Freeze / Unfreeze
Online only

Completely halts the player's movement. Head rotation is still allowed. The player is notified they are frozen. The GUI button dynamically shows Freeze or Unfreeze depending on the player's current frozen state. Executes immediately on click.

vg.command.freeze
Spectate
Online only

Puts you in spectator mode and sets the target as your spectator camera focus. You are automatically vanished. Your previous location and game mode are saved — use /back to exit spectate and return, which restores your game mode and removes vanish if it was applied by spectate.

vg.command.spectate
Inventory
Online only

Opens the player's full inventory (including armor and off-hand) for inspection. Items can be taken or viewed.

vg.command.invsee
Ender Chest
Online only

Opens the player's ender chest for inspection without requiring them to be near an ender chest block.

vg.command.endersee
Teleport To
Online only

Teleports you to the target player's current location. Your previous location is saved for /back.

vg.command.teleport
Bring Here
Online only

Teleports the target player to your current location. The player is notified they have been summoned.

vg.command.bring
Heal
Online only

Restores the target player's health to their maximum health value. Executes immediately on click.

vg.command.heal
Feed
Online only

Restores the target player's hunger and saturation to full. Executes immediately on click.

vg.command.feed
Clear Inventory
Confirm required

Clears ALL items from the player's inventory including armor. Requires confirmation. This action is irreversible.

vg.command.clearinv

📁 Information Lookup

History

Displays all past punishments for the player — bans, mutes, kicks, warns — with dates, staff names, and reasons. Works on offline players.

vg.command.history
Warnings

Displays only formal warning records for the player with reasons, dates, and issuing staff member. Works on offline players.

vg.command.warnings
Alt Accounts

Queries the IP history database for other accounts that have connected from the same IP. Accounts exempted via /vanguard altexempt are excluded from results.

vg.command.alts

Permission Nodes

All permissions are false by default unless noted. Assign them via your permissions plugin (e.g. LuckPerms).

★ Rank Bundles

vg.class.mod
Standard moderator — all basic tools included
vg.command.mod vg.command.vanish vg.command.staffchat vg.command.commandspy vg.command.back vg.command.clearchat vg.command.slowmode vg.command.staffreports vg.chat.bypass vg.command.warn vg.command.kick vg.command.tempmute vg.command.mute vg.command.tempban vg.command.freeze vg.command.spectate vg.command.invsee vg.command.endersee vg.command.teleport vg.command.bring vg.command.heal vg.command.feed vg.command.warnings
vg.class.admin
Senior admin — inherits vg.class.mod plus destructive powers
vg.class.mod ✓ vg.command.globalmute vg.admin vg.punish.override vg.command.ban vg.command.ipban vg.command.shadowmute vg.command.clearinv vg.command.alts vg.command.history

All Permission Nodes

Node Description Default
Moderation GUI Actions
vg.command.modOpen the /mod GUI for any playerOP
vg.command.warnIssue formal warnings via GUIOP
vg.command.kickKick players via GUIOP
vg.command.tempmuteTemporarily mute players via GUIOP
vg.command.mutePermanently mute players via GUIOP
vg.command.tempbanTemporarily ban players via GUIOP
vg.command.banPermanently ban players via GUIOP
vg.command.ipbanIP-ban players via GUIOP
vg.command.shadowmuteShadow-mute players via GUIOP
vg.command.freezeFreeze player movement via GUIOP
vg.command.spectateSpectate a player via GUIOP
vg.command.invseeInspect player inventory via GUIOP
vg.command.enderseeInspect player ender chest via GUIOP
vg.command.teleportTeleport to a player via GUIOP
vg.command.bringPull a player to you via GUIOP
vg.command.healHeal a player via GUIOP
vg.command.feedFeed a player via GUIOP
vg.command.clearinvClear player inventory via GUI (confirm required)OP
vg.command.historyView punishment history via GUIOP
vg.command.warningsView warning history via GUIOP
vg.command.altsCheck alt accounts via GUIOP
Staff Tools
vg.command.vanishToggle vanish modeOP
vg.command.staffchatToggle or use staff chatOP
vg.command.commandspyToggle command spy modeOP
vg.command.backTeleport to previous locationOP
vg.command.clearchatClear global chatOP
vg.command.slowmodeSet or disable chat slow modeOP
vg.command.globalmuteToggle server-wide chat muteOP
vg.command.reportSubmit a player reportAll
vg.command.staffreportsView pending player reportsOP
Special
vg.adminAccess to /vanguard reload, version, and altexemptOP
vg.chat.bypassBypass global mute and slow mode restrictionsOP
vg.exemptCannot be punished by sub-admin staff (no punish.override)false
vg.punish.overrideCan punish anyone regardless of rank or exempt statusfalse

Staff Hierarchy System

Vanguard enforces a rank-based hierarchy to prevent lower staff from punishing superiors.

How it works

  • The hierarchy list is defined in config.yml under hierarchy: as an ordered list of permission nodes (lowest → highest).
  • When a staff member opens /mod <target>, the target's rank is compared to the staff member's rank.
  • If the target has an equal or higher rank, destructive actions are blocked with a denial message.
  • Players with vg.exempt cannot be punished by anyone without vg.punish.override.
  • Players with vg.punish.override bypass all hierarchy checks and can punish anyone.

Example config.yml hierarchy

hierarchy:
  - vg.class.mod      # rank 1 (lowest)
  - vg.class.admin    # rank 2 (highest)

Add as many intermediate ranks as needed. A mod cannot punish another mod, and cannot punish an admin.