ZAdmin
ModrinthSpigotMCA admin helper plugin that help you freeze a player, vanish, and many more!
ZAdmin
A modern, modular, high-performance in-game administration platform for Paper 1.21.x servers.
ZAdmin is a standalone administration panel that works out of the box on any Paper server with
no dependency on private or third-party plugins. Every major feature is an independent module
that can be enabled, disabled and reloaded at runtime, and a clean public API lets other developers
extend the panel without ZAdmin ever depending on their plugins.
Features
| Area | What you get |
|------|--------------|
| Dashboard | A configurable inventory GUI hub (/admin) with MiniMessage text, configurable icons/slots, sounds, decorative panes and pagination. |
| Player Manager | Online player list → Player Inspector showing username, UUID, ping, health, hunger, saturation, XP, gamemode, world, coordinates, rotation, balance (Vault), prefix/suffix & group (LuckPerms), and optional IP. |
| Player Actions | Teleport, heal, feed, clear inventory, view inventory / ender chest, freeze, god mode, vanish, kick, ban, warn, mute, message, staff notes, alt detection, inventory snapshots, copy UUID. |
| Inventory Snapshots | Destructive actions (e.g. clear inventory) capture a restorable snapshot first. Browse a player's snapshot history and shift-click to roll back with one click. |
| Alt Detection | Optionally flags accounts sharing a last-known IP. Off by default (stores/compares IPs — a privacy-sensitive feature). |
| Chat Filter | Optional anti-spam (rate limit + duplicate suppression) and regex word/link blocklist, with configurable violation escalation. Bypassed by zadmin.chat.bypass. |
| Punishment Escalation | Configurable ladder (e.g. WARN → MUTE:1h → BAN:7d → BAN:perm) applied by offence count, plus one-click reason presets. |
| Cross-Server Sync | Over a shared MySQL/MariaDB datastore, propagates bans/mutes and staff broadcasts across a network. Off by default; no effect on SQLite. |
| Metrics | Anonymous, aggregate usage stats via bStats. Honors both ZAdmin's metrics.enabled and the global bStats opt-out. |
| Freeze System | Frozen players cannot move, break/place blocks, attack, interact, drop items or (optionally) run commands. Staff are alerted if a frozen player disconnects. |
| Staff Notes | Unlimited per-player notes with category/title/content, pagination, add & delete, database-backed. |
| Reports | Pending / Claimed / Closed queues with claim, close, teleport-to-target and history. |
| Punishments | Warn, kick, mute, tempmute, ban, tempban, blacklist — with history, durations, permanent storage and in-GUI revocation. |
| Economy Monitor | Tracks deposits/withdrawals, flags suspicious (large) transactions, filters & history. Gracefully disabled without Vault. |
| Logging | Async, batched audit log across commands, joins/quits, punishments, economy, teleports, staff actions, deaths and more — with category filters, pagination and export. |
| Scheduler | GUI editor for broadcasts, commands, saves, backups and restarts on interval or daily/weekly/monthly schedules. |
| Developer Tools | Plugin list & versions, world/chunk inspector, performance monitors (TPS/MSPT/RAM/threads), placeholder tester, PDC/metadata/permission inspector. No NMS. |
| Server Dashboard | Live TPS, MSPT, RAM, CPU load, worlds, chunks, entities, tile entities, players, plugins — auto-refreshing. |
| Modules | Enable/disable/reload every feature at runtime; state persists to config. |
| Notifications | In-game popups (TPS drops, new reports, frozen leavers, backups completed, punishments) with configurable sounds, plus an API for external providers. |
| Hooks | Auto-detects Vault, PlaceholderAPI, LuckPerms and Geyser/Floodgate; missing plugins simply disable their related functionality with no errors. |
Requirements
- Java 21+
- Paper 1.21.x (Bukkit Inventory API only — no external GUI framework)
Optional soft-dependencies: Vault, PlaceholderAPI, LuckPerms, Geyser/Floodgate.
Commands & Permissions
| Command | Aliases | Description |
|---------|---------|-------------|
| /admin | /zadmin, /adm | Open the dashboard |
| /admin reload | | Reload config & modules (zadmin.settings.edit) |
| /admin module <enable\|disable\|list> [id] | | Manage modules (zadmin.modules.manage) |
| /admin backup | | Run a manual backup (zadmin.settings.edit) |
| /admin version | | Show version |
Base permission: zadmin.use. Every action has its own node (e.g. zadmin.player.freeze,
zadmin.reports.claim, zadmin.logs.export, zadmin.developer.view). Grant zadmin.* for full
access. See plugin.yml for the complete list.
Configuration
All files live in plugins/ZAdmin/ and hot-reload with /admin reload:
config.yml— behaviour toggles, logging, economy, notifications, freeze, backups, chat filter, escalation, alt detection, cross-server sync, metrics, module flagsmessages.yml— every user-facing string (MiniMessage)gui.yml— dashboard icons, slots, names and loredatabase.yml— SQLite (default) or MySQL/MariaDB connection
Database
SQLite is the default and requires no setup. For MySQL/MariaDB, set type: mysql in database.yml
and fill in the connection details. All database access is asynchronous and connection-pooled via
HikariCP; the server thread is never blocked on I/O.
Public API
ZAdmin exposes a stable, generic API — it contains no references to any specific plugin.
Add ZAdmin as a softdepend in your plugin.yml, then:
import com.zadmin.api.*;
import com.zadmin.gui.Button;
import com.zadmin.util.ItemBuilder;
import org.bukkit.Material;
ZAdminProvider api = ZAdminAPI.get();
// 1. Add a button to the dashboard
api.registerDashboardButton(DashboardButton.of(31, "myplugin.use",
Button.of(ItemBuilder.of(Material.NETHER_STAR).name("<gold>My Feature").build(),
ctx -> ctx.player().performCommand("myplugin open"))));
// 2. Add a tab to the Player Inspector
api.registerPlayerInspectorTab(new PlayerInspectorTab() {
public String id() { return "myplugin_homes"; }
public String permission() { return "myplugin.homes"; }
public Button build(Player viewer, UUID target) {
return Button.of(ItemBuilder.of(Material.RED_BED).name("<aqua>Homes").build(),
ctx -> { /* open your homes GUI for target */ });
}
});
// 3. Register a named action
api.registerAction(new AdminAction() {
public String id() { return "myplugin:reset"; }
public String permission() { return "myplugin.reset"; }
public void execute(Player staff, UUID target) { /* ... */ }
});
// 4. Register a module (enabled/disabled/reloaded by ZAdmin)
api.registerModule(myModule);
// 5. Receive notifications (forward to Discord, a web panel, etc.)
api.registerNotificationProvider(n ->
getLogger().info("[" + n.severity() + "] " + n.type() + ": " + n.title()));
Prefer accessing the API from your own onEnable (or later) to guarantee availability. Use
ZAdminAPI.isAvailable() / ZAdminAPI.getOrNull() for null-safe access. The API is also registered
with Bukkit's ServicesManager as com.zadmin.api.ZAdminProvider.
PlaceholderAPI
When PlaceholderAPI is installed, ZAdmin registers the zadmin expansion:
%zadmin_tps%, %zadmin_mspt%, %zadmin_memory_used%, %zadmin_memory_max%,
%zadmin_frozen%, %zadmin_vanished%, %zadmin_god%, %zadmin_muted%.
Architecture
com.zadmin
├── api Public extension points (generic, plugin-agnostic)
├── command /admin command + tab completion
├── config YAML loading, message service
├── database Database abstraction (SQLite / MySQL via HikariCP), schema
├── gui Menu framework (Bukkit Inventory API only) + built-in menus
├── hook Soft integrations (Vault, PlaceholderAPI, LuckPerms, Floodgate)
├── listener Global event listeners (connection, freeze, state, economy)
├── model Immutable domain records + enums
├── module Module framework + built-in modules
├── placeholder PlaceholderAPI expansion
├── scheduler Async task executor (main-thread marshalling)
├── service Business logic (async, cached, thread-safe)
├── storage DAOs (pure JDBC, async-safe)
└── util Text/MiniMessage, ItemBuilder, TimeUtil, cooldowns
Design principles: SOLID, explicit composition root (dependency injection in ZAdminPlugin),
no duplicated logic, thread-safe services, fully asynchronous database & logging, intelligent
caching, and clean resource cleanup on disable. Built to comfortably serve 300+ concurrent players.
Privacy
Two features are disabled by default because they process player IP addresses:
- Alt detection (
alt-detection.enabled) stores and compares players' last-known IPs. - Cross-server sync (
sync.enabled) shares punishment data across servers on a common database.
If you enable them, you are responsible for disclosing the practice to your players and for
complying with applicable data-protection law (e.g. GDPR). ZAdmin never shows raw IPs through the
alt-detection UI (only the resulting account names) unless player.show-ip is separately enabled.
Anonymous usage metrics are sent to bStats by default. To opt out, set
metrics.enabled: false in config.yml, or disable bStats globally in plugins/bStats/config.yml.
License
Released for public use. Attribution appreciated.
Versions
FAQ
How do I install ZAdmin?
Download the file for your Minecraft version and loader from this page, then drop the .jar into your mods (or plugins) folder and launch the game.
Is ZAdmin free?
ZAdmin is free to download on Modgrid — we link straight to the official source, no paywall or bundled installer.
Which Minecraft versions does ZAdmin support?
Works with Paper, Spigot. Supports versions 1.21–1.21.11. See the download section on this page for the full list of supported versions and loaders.

Comments 0
No comments yet. Be the first to share your thoughts.