ZAdmin

ZAdmin

A admin helper plugin that help you freeze a player, vanish, and many more!

63 downloads 1 followers

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 flags
  • messages.yml — every user-facing string (MiniMessage)
  • gui.yml — dashboard icons, slots, names and lore
  • database.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.

No gallery available for this project.

Version Minecraft Loader Download

ZAdmin 1.1.0

1.1.0

1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11
paper, spigot
Download

ZAdmin 1.0.1

1.0.1

1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11
paper
Download