COWMODSКаталог модов

Staff+

Advanced staff tools and punishment management in one easy-to-use plugin.

Автор: AyoSynk8211обновлён 25 сент. 2026 г.
Механики игрыУправлениеУтилиты

Описание

Staff+

Staff+

Staff+ is an enterprise-grade, high-performance moderation and utility plugin built for modern Minecraft networks. It ships as two platform-specific JARs — one for Paper/Purpur/Folia backend servers and one for Velocity proxies — sharing a unified core engine for consistent punishment management across your entire network.

Paper Edition runs on Paper/Purpur/Folia 1.20–1.21+ servers with full Folia multi-threaded region safety, and includes advanced staff tools like vanish, inventory inspection, and spectator monitoring.

Velocity Edition runs on Velocity 3.3.0+ proxies and enforces bans, IP-bans, and mutes at the network gateway before players even reach a backend server.

Both editions share the same database, configs, and migration system — deploy one or both depending on your setup.


Platform Comparison

FeaturePaper (Paper/Purpur/Folia)Velocity (Proxy)
Ban / TempBan / Unban✅✅
IP-Ban / TempIP-Ban / UnIP-Ban✅✅
Mute / TempMute / Unmute✅✅
Warn / Warns / Clear✅✅
History / StaffHistory✅✅
Staff Rollback✅✅
IP-Ban Exemption (/staffallow)✅✅
Punishment Migration (/staffimport)✅✅
Discord Webhook Logging✅✅
Warning Escalation Ladder✅✅
Hierarchy Protection✅✅
Alt-Detection (IP Matching)✅✅
SQLite / MySQL Storage✅✅
Vanish System✅❌
Spectator Monitor/Follow✅❌
Inventory Inspector (/invsee)✅❌
Gamemode Shortcuts✅❌
Flight Toggle (/fly)✅❌
Global Ban History (/bans)✅✅
Ban Leaderboard (/bansleaderboard)✅✅
Kick (/kick)✅✅
Unwarn (/unwarn)✅✅
Checkban (/checkban)✅✅
Live Reload (/staff reload)✅✅
Bedrock Geyser Forms✅N/A
Modrinth Update Notifier✅✅
bStats Metrics✅✅
Folia Scheduler Safety✅N/A
Proxy-Level Ban Enforcement❌✅
Limbo Kick Prevention❌✅
Transparent Backend Command Forwarding❌✅

Features

Cross-Platform Core

  • Shared Database: Both Paper and Velocity editions read and write to the same punishment database (SQLite or MySQL), enabling seamless network-wide moderation.
  • Shared Configs: config.yml and messages.yml use identical formats on both platforms via the Okaeri configuration framework.
  • Unified Migration Engine: Import punishments from 7+ plugins on either platform.

Folia Safety (Paper Edition)

  • Asynchronous Lifecycles: All commands, database transactions, and packet actions run on Folia-compliant regional or asynchronous schedulers.
  • Folia Teleportation Safety: Standard teleports are replaced with safe, non-blocking teleportAsync futures, completely preventing thread crashes.
  • Isolated Packet Loops: Visually toggling features (like Vanish hide/show packets) are scheduled on each recipient's specific regional thread, guaranteeing thread-safety.

Proxy Gateway Enforcement (Velocity Edition)

  • Pre-Login Ban Check: Intercepts login attempts at the proxy level and rejects banned players before they reach any backend server.
  • Network-Wide Mute Filter: Blocks chat messages from muted players across all connected servers.
  • IP-Ban Gateway: Enforces IP bans at the proxy gateway, preventing banned IPs from connecting to any server in the network.

Vanish (Paper Only)

  • Total Invisibility: Completely removes the player from the online count, player ping lists, tab completions, and visible lists.
  • Physical Interaction Bypass: Vanished staff bypass physical pressure plates and tripwire triggers entirely.
  • Silent Containers: Allows opening chest, furnace, and barrel interfaces silently without triggering container animations or audio.
  • Stealth Suppression: Prevents mob targeting, item pickups, and suppresses join/quit messages entirely while active.
  • Visual Action Bar Indicator: Real-time HUD showing vanished status via safe asynchronous repeating tasks.

Moderation (Both Platforms)

  • Comprehensive Actions: Integrated /ban, /tempban, /ip-ban, /tempip-ban, /mute, /tempmute, and /warn.
  • Warning Profiles: Track individual warning logs via /warns <player> [list/clear].
  • Dynamic Time Parsing: Sophisticated time parser supporting complex units (e.g. 1d, 12h, 45m) and infinite duration mappings (perm).
  • Relational Storage: Backed by a high-performance database manager supporting both local SQLite databases and remote MySQL servers, managed via a shaded, thread-safe HikariCP connection pool.
  • Linked Account Alt-Detection: On player login, automatically scans, logs, and broadcasts alternate accounts sharing the IP address, color-coding active (green) and banned (red) profiles.
  • Dynamic Command & History Parity: Multi-threaded /history <player>, /staffhistory <staff>, and /staffrollback <staff> commands supported by dynamic database-backed name tab completions.
  • Warning Escalation Ladder: Scale punishments dynamically (e.g. tempmutes scaling to permanent bans) based on active warning levels. Command dispatches execute safely on each platform's native scheduler.
  • Non-Blocking Discord Webhook Logs: Real-time embeds logging all mute, ban, and warning dispatches using modern non-blocking Java 21 HttpClient interfaces with zero impact on region ticks.
  • Administrative Overwrite Hierarchy Protection: Custom staff weight ranks (staff.hierarchy.weight.<number>) blocking junior staff from overriding, deactivating, or removing punishments placed by senior administrators or the Console (Integer.MAX_VALUE).
  • IP-Ban Exemption Bypass: Whitelist specific accounts (/staffallow) to connect and bypass active IP-bans without lifting the IP ban itself for other accounts sharing the IP.

Punishment Importer & Migration (Both Platforms)

  • 7 Supported Platforms: Seamlessly import mutes, bans, warnings, and IP bans from:
    • Vanilla Minecraft: Direct imports from banned-players.json and banned-ips.json in the server root.
    • Essentials / EssentialsX: Automated scans of mutes and bans in user profiles under plugins/Essentials/userdata/*.yml.
    • LiteBans: Migrates bans, mutes, and warnings from H2/SQLite/MySQL databases. Supports auto-detection of the litebans.mv.db H2 file or manual JDBC parameters.
    • AdvancedBan: Integrates and normalizes legacy SQL Punishments tables from SQLite or MySQL.
    • MaxBans: Migration of bans, IP bans, mutes, and warnings from SQLite or MySQL.
    • BanManager: Integrates historical player bans, mutes, and warnings with configurable table prefixes.
    • BungeeAdminTools (BAT): Imports entries from database tables bat_ban and bat_mute.
  • Dynamic Auto-Scanning: Scans your server's active files on command, extracts SQLite paths or remote SQL database credentials, and allows zero-configuration migrations.
  • Batch Operations: Commits imported records inside a single transaction using batch inserts, migrating thousands of records instantly.
  • Non-Blocking Futures: Runs connection setups, configuration decodes, and database commits fully asynchronously on non-blocking thread pools.

Spectator Follow (Paper Only)

  • Cinematic Camera Tracking: Teleports staff in spectator mode to follow the target seamlessly.
  • Velocity-Predicted Follow: Computes target movements and velocity vectors (target.getVelocity()) to position the camera slightly ahead of the target, eliminating stutter and rubber-banding.
  • Throttled Teleports: Auto-updates run at a throttled 4-tick (200ms) interval with a 400ms cooldown, giving client-side predicted movements and Paper's async teleportation futures time to fully resolve.
  • Configurable Boundary Tether: Allows staff to orbit or move freely within a 10-block radius. Going beyond the boundary gently tethers the camera back into offset.

Inventory Inspector (Paper Only)

  • 54-Slot Live GUI: View and edit target players' main inventories (0-35), armor slots (helmet, chestplate, leggings, boots), off-hand items, and stats.
  • Live Stats & Shortcuts:
    • Golden Apple: Displays health, food levels, and experience dynamically.
    • Potion Bottle: Shows a live list of active potion effects and durations.
    • Ender Chest: Quick-access shortcut item to inspect their Ender Chest directly.
  • Unparalleled Folia Safety: Completely avoids asynchronous block-state reads (which crash under Folia when querying .getOpenInventory().getTopInventory().getHolder() on block-based inventories in other regions). Instead, it implements a thread-safe custom session registry that cleanly tracks active inspect views and propagates updates regionally.

Shortcuts (Paper Only)

  • Instant Gamemode Shifts: Rapid commands including creative (/gmc), survival (/gms), spectator (/gmsp), and adventure (/gma).
  • Flight Mode: Seamless command flight toggles via /fly.

Commands & Permissions

Network-Wide Commands (Paper & Velocity)

CommandDescriptionUsagePermission Node
/banBans a player from the server./ban <player> [reason]staff.ban
/tempbanTemporarily bans a player./tempban <player> <duration> [reason]staff.tempban
/unbanUnbans a player./unban <player>staff.unban
/ip-banIP-bans a player./ip-ban <player> [reason]staff.ipban
/tempip-banTemporarily IP-bans a player./tempip-ban <player> <duration> [reason]staff.tempipban
/unip-banUnbans an IP address or player./unip-ban <player/IP>staff.unipban
/muteMutes a player in chat./mute <player> [reason]staff.mute
/tempmuteTemporarily mutes a player./tempmute <player> <duration> [reason]staff.tempmute
/unmuteUnmutes a player./unmute <player>staff.unmute
/warnWarns a player./warn <player> [reason]staff.warn
/warnsView or clear warning history./warns <player> [list/clear]staff.warns
/historyView complete punishment logs (active/inactive) for players./history <player>staff.history
/staffhistoryView all punishments issued by a staff member./staffhistory <staff>staff.staffhistory
/staffrollbackRollback all active punishments placed by a staff member./staffrollback <staff> [confirm]staff.staffrollback
/staffallowExempt a player/UUID from active IP bans./staffallow <player> [remove]staff.staffallow
/staffimportImport punishments from other plugins./staffimport <source> [params...]staff.import
/bansView recent server bans (GUI / Geyser Form / Chat)./bans [page] [--chat]staff.bans
/bansleaderboardView staff leaderboard by bans issued./bansleaderboard [--chat]staff.bansleaderboard
/kickKick an online player with hierarchy validation./kick <player> [reason]staff.kick
/unwarnRemove a player's latest or specific warning./unwarn <player> [id]staff.unwarn
/checkbanAudit active ban/IP-ban status of player or IP./checkban <player/IP>staff.checkban
/staff reloadReload configuration files live without restart./staff reloadstaff.staff.reload

Paper-Only Commands

CommandDescriptionUsagePermission Node
/vanishToggle complete invisibility./vanishstaff.vanish
/invseeInspect a player's inventory live./invsee <player>staff.invsee
/monitorSpectate and smoothly follow a player./monitor <player/leave>staff.monitor
/flyToggle player flight./fly [player]staff.fly
/gmcSwitch to creative mode./gmc [player]staff.gmc
/gmsSwitch to survival mode./gms [player]staff.gms
/gmspSwitch to spectator mode./gmsp [player]staff.gmsp
/gmaSwitch to adventure mode./gma [player]staff.gma

Admin Wildcard: The permission node staff.admin grants access to all capabilities of the plugin by default. Bypass Node: Players with the permission staff.vanish.see can see vanished players in-game, in tab lists, and in commands.


Installation

Paper Edition (Paper / Purpur / Folia)

  1. Download StaffPlus-Paper-1.2.3.jar from Modrinth or GitHub Releases.
  2. Place the JAR in your server's plugins/ folder.
  3. Restart your server.
  4. Edit plugins/Staff/config.yml and plugins/Staff/messages.yml to your liking.

Velocity Edition (Proxy)

  1. Download StaffPlus-Velocity-1.2.3.jar from Modrinth or GitHub Releases.
  2. Place the JAR in your Velocity proxy's plugins/ folder.
  3. Restart your proxy.
  4. Edit plugins/staffplus/config.yml and plugins/staffplus/messages.yml to your liking.
  5. Permissions & Backend Forwarding:
    • If you use LuckPerms on Velocity, grant staff staff.admin (/lpv user <name> permission set staff.admin true).
    • If you manage permissions and OPs exclusively on your backend Paper servers, Staff+ automatically forwards commands executed on Velocity down to the player's connected Paper server (velocity-forward-to-backend: true), allowing Paper to evaluate LuckPerms and OP status seamlessly!

Shared Database (Network Mode)

To share punishments across your entire network, configure both editions to use the same MySQL or MariaDB database:

# config.yml (same on both Paper and Velocity)
storage-type: "mysql" # or "mariadb"
mysql-host: "your-db-host"
mysql-port: 3306
mysql-database: "staffplus"
mysql-username: "your-user"
mysql-password: "your-password"

Configuration

The plugin uses Okaeri Config to generate, validate, and auto-update clean YAML configuration structures. Both platforms share identical configuration formats.

config.yml

# Storage type: SQLITE, MYSQL, or MARIADB
storage-type: "sqlite"

# MySQL / MariaDB Connection Details (only used if storage-type is MYSQL or MARIADB)
mysql-host: "localhost"
mysql-port: 3306
mysql-database: "minecraft"
mysql-username: "root"
mysql-password: "password"
mysql-pool-size: 10
mysql-use-ssl: false

# Vanish settings (Paper only — ignored on Velocity)
vanish-silent-container-clicks: true
vanish-ignore-pressure-plates: true
vanish-disable-mob-targeting: true
vanish-disable-item-pickup: true

# Warning escalation ladder settings
warning-ladder-enabled: true

# Actions to run when a player reaches a specific number of active warnings
warning-ladder-actions:
  1: "tempmute {player} 1h [Warning Ladder] First warning"
  2: "tempmute {player} 12h [Warning Ladder] Second warning"
  3: "tempban {player} 3d [Warning Ladder] Reached 3 warnings"
  4: "ban {player} [Warning Ladder] Reached 4 warnings"

# Discord Webhook logging settings
discord-webhook-enabled: false
discord-webhook-url: ""
discord-webhook-username: "Staff+ Moderation"
discord-webhook-avatar-url: "https://i.imgur.com/8Qp49X0.png"

# Hex color codes for webhook embeds (without the #)
discord-webhook-color-ban: "FF5555"
discord-webhook-color-mute: "FFAA00"
discord-webhook-color-warn: "FFFF55"

# Update Checker settings (Modrinth)
update-checker-enabled: true
update-checker-notify-admins: true

# Staff Ban Leaderboard settings
bans-leaderboard-enabled: true

# Velocity Proxy Settings (Velocity only)
velocity-proxy-commands: true
velocity-forward-to-backend: true
velocity-disconnect-on-kick: true

messages.yml

Features full Adventure MiniMessage compatibility, enabling gorgeous native text styling, hex colors, and gradients (e.g. <gradient:#FF5F6D:#FFC371>Text</gradient>).

# Prefix for all plugin messages
prefix: "<color:#A0A0A0>[<color:#00E262>Staff+<color:#A0A0A0>] "

no-permission: "<color:#E20000>You do not have permission to execute this command."
player-only: "<color:#E20000>This command can only be executed by a player."
cannot-overwrite-punishment: "<color:#E20000>You cannot override a punishment placed by a higher-ranking staff member ({staff})."
player-allowed: "<color:#00E262>You have allowed {player} to bypass IP bans."
player-allowed-broadcast: "<color:#00E262>{player} has been exempted from IP bans by {sender}."
player-unallowed: "<color:#00E262>You have removed IP ban exemption for {player}."
player-unallowed-broadcast: "<color:#00E262>{player} is no longer exempted from IP bans."
player-not-found: "<color:#E20000>Player '{player}' has not been found or registered."
invalid-duration: "<color:#E20000>Invalid duration format! Use e.g. 1d, 12h, 30m or perm."

# Mutes
player-muted: "<color:#00E262>You have muted {player} for {time}. Reason: {reason}"
player-muted-broadcast: "<color:#E2B700>{player} has been muted by {sender} for {time}. Reason: {reason}"
you-are-muted: "<color:#E20000>You are muted! Remaining time: {time}. Reason: {reason}"

# Bans
player-banned: "<color:#00E262>You have banned {player} for {time}. Reason: {reason}"
player-banned-broadcast: "<color:#E20000>{player} has been banned by {sender} for {time}. Reason: {reason}"
ban-kick-message: "<color:#E20000>You have been banned from the server!\n\nReason: {reason}\nExpiry: {time}"

# Vanish (Paper only)
vanish-enabled: "<color:#00E262>You are now vanished."
vanish-disabled: "<color:#00E262>You are no longer vanished."
vanish-action-bar: "<color:#00E262>★ YOU ARE VANISHED ★"

Build & Compilation

Staff+ is a multi-module Gradle project producing two independent shaded JARs.

Requirements

  • Java 21 or higher
  • Gradle (installed or via wrapper)

Build Command

Compile and build both platform JARs:

./gradlew clean build

The compiled plugins will be located at:

staff-paper/build/libs/StaffPlus-Paper-1.0.0.jar    # Paper/Purpur/Folia servers
staff-velocity/build/libs/StaffPlus-Velocity-1.0.0.jar  # Velocity proxies

Project Structure

StaffPlus/
├── staff-core/          # Shared platform-agnostic library
│   └── src/main/java/   # Database, Punishment model, Configs, Migration, Utils
├── staff-paper/         # Paper/Folia backend plugin
│   └── src/main/java/   # Paper commands, listeners, vanish, monitor, invsee
├── staff-velocity/       # Velocity proxy plugin
│   └── src/main/java/   # Velocity commands, login/chat listeners
├── build.gradle          # Root configuration
└── settings.gradle       # Multi-module declaration

Note: The Gradle shadow configuration automatically relocates eu.okaeri, com.zaxxer.hikari, org.h2, and org.xerial libraries to private namespaces (me.ayosynk.staff.libs.*) to prevent conflicts with any other plugins on the classpath.


Continuous Integration

Staff+ implements a fully automated CI/CD pipeline via GitHub Actions to compile, validate, and distribute artifacts for both platforms.

Dev Builds

  • Frequency: Built automatically on every push to the master or main branches.
  • Release Target: Published under the rolling dev-latest pre-release tag on GitHub.
  • Rolling Policy: The pipeline automatically overwrites the previous dev-latest tag on every build, maintaining a clean releases page.
  • Artifacts: Both StaffPlus-Paper and StaffPlus-Velocity JARs are published in every release.

Stable Releases

  • Frequency: Generated whenever a semantic Git version tag matching v* (e.g., v1.0.0) is pushed to the repository.
  • Release Target: Published as a dedicated production release containing formal release notes and both platform-ready shaded JAR assets.

bStats Metrics

Both editions of Staff+ integrate with bStats to collect anonymous usage statistics. This helps us understand how the plugin is being used and guides future development.

  • Paper Edition: Uses bstats-bukkit for server-side metrics.
  • Velocity Edition: Uses bstats-velocity (Plugin ID: 31693) for proxy-side metrics.

If you wish to opt-out of anonymous metrics collection, you can disable it by navigating to the plugins/bStats/config.yml file on your server or proxy and setting enabled: false.


Developer Notes

For developers looking at the source code of Staff+, here is a summary of the architecture:

Multi-Module Architecture

  1. staff-core: Platform-agnostic shared library containing the database layer, punishment model, config system, migration engine, and utility classes. Uses ForkJoinPool.commonPool() for async operations — no platform-specific scheduler dependencies.
  2. staff-paper: Paper/Folia plugin implementing StaffPlatform interface. Contains all Paper-specific commands, listeners, vanish, monitor, invsee, and gamemode shortcuts. Uses Folia-safe regional schedulers.
  3. staff-velocity: Velocity proxy plugin implementing StaffPlatform interface. Contains proxy-level commands and login/chat event listeners for network-wide enforcement.

Folia Threading Rules (Paper)

  1. Async Teleportation: Never call Player#teleport() on Folia. Always use Player#teleportAsync() and queue dependent actions using .thenRun() or .thenAccept().
  2. Recipient Thread Safety: Action updates (like recipient.hidePlayer() or recipient.showPlayer()) must execute on the recipient's regional thread context. Wrap these calls in SchedulerUtils.runEntity(plugin, recipient, ...) to guarantee packet delivery.
  3. Avoid cross-region block state reads: Calling open.getHolder() on block-based inventories open in other regions throws threading exceptions. Instead, maintain an in-memory, thread-safe registry of InvseeSession objects.
  4. Cinematic Follow Damping: Use interval checking (≥4 ticks), velocity extrapolation, and a task cooldown to maintain smooth follower views.

Последние версии

Все версии →
release

Staff+ 1.2.3

1.2.3
25 сент. 2026 г.329Minecraft: 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2, 26.3folia, paper, purpur
Скачать
Что нового
## [1.2.3] - 2026-09-25 ### Added * **Velocity Backend Command Forwarding**: * Implemented automatic transparent command forwarding (`velocity-forward-to-backend: true`). If a staff member executes a moderation command (`/tempban`, `/ban`, `/mute`, etc.) on Velocity and lacks proxy-level permissions (e.g. LuckPerms and OPs are configured exclusively on backend Paper servers), Velocity automatically forwards the command down to their connected Paper server via `player.spoofChatInput(...)` instead of dropping it with a "no permission" error. * Added `velocity-proxy-commands` (default: `true`) in `config.yml`, allowing server administrators to optionally disable proxy command registration so backend Paper servers handle all moderation commands directly while Velocity focuses purely on gateway enforcement. * **Limbo Kick Prevention via `KickedFromServerEvent`**: * Subscribed to Velocity's `KickedFromServerEvent`. When a player is explicitly kicked (`/kick`) or banned by staff on a backend server, Velocity intercepts the event and executes `DisconnectPlayer.create(reason)`. * Completely eliminates the issue where kicked or banned players bounced into fallback or Limbo servers instead of being disconnected from the proxy network. * Preserved normal server restart and shutdown routing ("Server closed"), which continues sending players to the lobby. * Added `velocity-disconnect-on-kick` (default: `true`) in `config.yml`. * **Complete Alias Registration on Velocity**: * Registered all moderation command aliases with Velocity's `CommandManager`: `/ipban`, `/banip`, `/tempipban`, `/tempbanip`, `/unipban`, `/unbanip`, `/banleaderboard`, `/staffleaderboard`, `/bancheck`, `/staff+`, `/punishhistory`, and `/historylog`. ### Fixed * **Velocity Asynchronous Event Race Condition**: * Refactored `onLogin` and `onPlayerChat` listeners in `VelocityListeners` to return `EventTask` with continuations. Velocity now properly pauses event dispatch until database ban and mute queries complete, ensuring rulebreakers are reliably rejected at the gateway and muted players are blocked from chatting. * **Database Staff Hierarchy Weight Preservation**: * Updated `DatabaseManager.savePlayer` SQL upsert logic to preserve existing hierarchy weights when incoming weight is 0 (`weight = CASE WHEN VALUES(weight) > 0 THEN VALUES(weight) ELSE weight END`). * Fixes an issue where staff logging in through the Velocity proxy had their hierarchy weight reset to 0 in the shared database. * **Instant Online Target Resolution on Velocity**: * Added `resolveTargetUuid` across all punishment handlers in `VelocityPunishCommand`, immediately resolving online players via `plugin.getServer().getPlayer(...)` before falling back to database lookups. * **Unit Testing**: * Added unit test cases for hierarchy weight preservation and Velocity configuration defaults in `DatabaseManagerTest`. ### Changed * Bumped project version to `1.2.3` across all subprojects, build scripts, plugin descriptors, and documentation.
release

Staff+ 1.2.3

1.2.3
25 сент. 2026 г.30Minecraft: 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2, 26.3velocity
Скачать
Что нового
## [1.2.3] - 2026-09-25 ### Added * **Velocity Backend Command Forwarding**: * Implemented automatic transparent command forwarding (`velocity-forward-to-backend: true`). If a staff member executes a moderation command (`/tempban`, `/ban`, `/mute`, etc.) on Velocity and lacks proxy-level permissions (e.g. LuckPerms and OPs are configured exclusively on backend Paper servers), Velocity automatically forwards the command down to their connected Paper server via `player.spoofChatInput(...)` instead of dropping it with a "no permission" error. * Added `velocity-proxy-commands` (default: `true`) in `config.yml`, allowing server administrators to optionally disable proxy command registration so backend Paper servers handle all moderation commands directly while Velocity focuses purely on gateway enforcement. * **Limbo Kick Prevention via `KickedFromServerEvent`**: * Subscribed to Velocity's `KickedFromServerEvent`. When a player is explicitly kicked (`/kick`) or banned by staff on a backend server, Velocity intercepts the event and executes `DisconnectPlayer.create(reason)`. * Completely eliminates the issue where kicked or banned players bounced into fallback or Limbo servers instead of being disconnected from the proxy network. * Preserved normal server restart and shutdown routing ("Server closed"), which continues sending players to the lobby. * Added `velocity-disconnect-on-kick` (default: `true`) in `config.yml`. * **Complete Alias Registration on Velocity**: * Registered all moderation command aliases with Velocity's `CommandManager`: `/ipban`, `/banip`, `/tempipban`, `/tempbanip`, `/unipban`, `/unbanip`, `/banleaderboard`, `/staffleaderboard`, `/bancheck`, `/staff+`, `/punishhistory`, and `/historylog`. ### Fixed * **Velocity Asynchronous Event Race Condition**: * Refactored `onLogin` and `onPlayerChat` listeners in `VelocityListeners` to return `EventTask` with continuations. Velocity now properly pauses event dispatch until database ban and mute queries complete, ensuring rulebreakers are reliably rejected at the gateway and muted players are blocked from chatting. * **Database Staff Hierarchy Weight Preservation**: * Updated `DatabaseManager.savePlayer` SQL upsert logic to preserve existing hierarchy weights when incoming weight is 0 (`weight = CASE WHEN VALUES(weight) > 0 THEN VALUES(weight) ELSE weight END`). * Fixes an issue where staff logging in through the Velocity proxy had their hierarchy weight reset to 0 in the shared database. * **Instant Online Target Resolution on Velocity**: * Added `resolveTargetUuid` across all punishment handlers in `VelocityPunishCommand`, immediately resolving online players via `plugin.getServer().getPlayer(...)` before falling back to database lookups. * **Unit Testing**: * Added unit test cases for hierarchy weight preservation and Velocity configuration defaults in `DatabaseManagerTest`. ### Changed * Bumped project version to `1.2.3` across all subprojects, build scripts, plugin descriptors, and documentation.
release

Staff+ 1.2.2

1.2.2
17 сент. 2026 г.73Minecraft: 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2, 26.3folia, paper, purpur
Скачать
Что нового
## [1.2.2] - 2026-09-17 ### Fixed * **Database Driver Bundling & Connection Hardening**: * Shaded and relocated official `com.mysql:mysql-connector-j:8.3.0` and `org.mariadb.jdbc:mariadb-java-client:3.3.3` across Paper and Velocity editions, fixing `ClassNotFoundException` / `No suitable driver found` on proxies and bare server environments. * Added native support for `storage-type: "mariadb"` alongside `"mysql"` and `"sqlite"`. * Added essential JDBC properties to connection pools: `createDatabaseIfNotExist=true` (prevents `Unknown database` errors), `allowPublicKeyRetrieval=true` (fixes MySQL 8+ authentication), `serverTimezone=UTC`, and `characterEncoding=utf8`. * Implemented automated graceful fallback to local SQLite (`database.db`) with clear console warnings if a remote MySQL/MariaDB database cannot be reached, ensuring the plugin never disables itself and commands remain fully functional. * Dynamic database reconnection: `/staff reload` now automatically re-initializes and reconnects the database pool on both Paper and Velocity. * **Command Permissions & Operator Bypass**: * Added operator (`isOp()`) and `staff.admin` bypass to `DynamicCommand` and `StaffCommand` on Paper, guaranteeing OP players have access to `/bans`, `/banhistory`, `/staff reload`, and all moderation utilities. * Added top-level permission declarations with `default: op` in `paper-plugin.yml` and created `plugin.yml` for complete compatibility with LuckPerms and Spigot-based permission managers. * Fixed command permission mapping on Velocity: alias commands (`/banhistory`, `/banlist`, `/bancheck`) now resolve to their canonical permission nodes (`staff.bans`, `staff.checkban`), and `staff.admin` grants global access to all proxy moderation commands. * **Unit Testing**: * Added `DatabaseManagerTest` unit test suite covering SQLite initialization, player records, and remote database fallback. ### Changed * Bumped project version to `1.2.2` across all subprojects, build scripts, plugin descriptors, and documentation. ---
release

Staff+ 1.2.2

1.2.2
17 сент. 2026 г.8Minecraft: 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2, 26.3velocity
Скачать
Что нового
## [1.2.2] - 2026-09-17 ### Fixed * **Database Driver Bundling & Connection Hardening**: * Shaded and relocated official `com.mysql:mysql-connector-j:8.3.0` and `org.mariadb.jdbc:mariadb-java-client:3.3.3` across Paper and Velocity editions, fixing `ClassNotFoundException` / `No suitable driver found` on proxies and bare server environments. * Added native support for `storage-type: "mariadb"` alongside `"mysql"` and `"sqlite"`. * Added essential JDBC properties to connection pools: `createDatabaseIfNotExist=true` (prevents `Unknown database` errors), `allowPublicKeyRetrieval=true` (fixes MySQL 8+ authentication), `serverTimezone=UTC`, and `characterEncoding=utf8`. * Implemented automated graceful fallback to local SQLite (`database.db`) with clear console warnings if a remote MySQL/MariaDB database cannot be reached, ensuring the plugin never disables itself and commands remain fully functional. * Dynamic database reconnection: `/staff reload` now automatically re-initializes and reconnects the database pool on both Paper and Velocity. * **Command Permissions & Operator Bypass**: * Added operator (`isOp()`) and `staff.admin` bypass to `DynamicCommand` and `StaffCommand` on Paper, guaranteeing OP players have access to `/bans`, `/banhistory`, `/staff reload`, and all moderation utilities. * Added top-level permission declarations with `default: op` in `paper-plugin.yml` and created `plugin.yml` for complete compatibility with LuckPerms and Spigot-based permission managers. * Fixed command permission mapping on Velocity: alias commands (`/banhistory`, `/banlist`, `/bancheck`) now resolve to their canonical permission nodes (`staff.bans`, `staff.checkban`), and `staff.admin` grants global access to all proxy moderation commands. * **Unit Testing**: * Added `DatabaseManagerTest` unit test suite covering SQLite initialization, player records, and remote database fallback. ### Changed * Bumped project version to `1.2.2` across all subprojects, build scripts, plugin descriptors, and documentation. ---
release

Staff+ 1.2.1

1.2.1
14 сент. 2026 г.23Minecraft: 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2folia, paper, purpur
Скачать
Что нового
## [1.2.1] - 2026-09-14 ### Fixed * **Bedrock / Geyser Classloader Isolation**: * Decoupled `BedrockFormManager` into a zero-dependency facade, eliminating compile-only Cumulus and Geyser/Floodgate imports from the class verification path. * Isolated Cumulus form creation and API calls into internal `BedrockFormHandler`, `GeyserInvoker`, and `FloodgateInvoker` classes, classloaded strictly on-demand only when `Geyser-Spigot` or `floodgate` is enabled on the Paper server. * Resolved `NoClassDefFoundError: org/geysermc/cumulus/form/Form` that prevented `/bans`, `/banhistory`, and `/bansleaderboard` from opening on backend Paper servers operating without local Geyser or Floodgate plugins (e.g., proxy-only Geyser network architectures). * Backend Paper servers without Floodgate now gracefully fall back to native 54-slot Java chest inventory GUIs with zero console errors or stack traces. * Added `BedrockCompatTest` unit test verifying that Bedrock detection cleanly returns false without throwing classloading exceptions when dependencies are absent. ### Changed * Bumped project version to `1.2.1` across all subprojects, build scripts, plugin descriptors, and documentation.
release

Staff+ 1.2.1

1.2.1
14 сент. 2026 г.7Minecraft: 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2velocity
Скачать
Что нового
## [1.2.1] - 2026-09-14 ### Fixed * **Bedrock / Geyser Classloader Isolation**: * Decoupled `BedrockFormManager` into a zero-dependency facade, eliminating compile-only Cumulus and Geyser/Floodgate imports from the class verification path. * Isolated Cumulus form creation and API calls into internal `BedrockFormHandler`, `GeyserInvoker`, and `FloodgateInvoker` classes, classloaded strictly on-demand only when `Geyser-Spigot` or `floodgate` is enabled on the Paper server. * Resolved `NoClassDefFoundError: org/geysermc/cumulus/form/Form` that prevented `/bans`, `/banhistory`, and `/bansleaderboard` from opening on backend Paper servers operating without local Geyser or Floodgate plugins (e.g., proxy-only Geyser network architectures). * Backend Paper servers without Floodgate now gracefully fall back to native 54-slot Java chest inventory GUIs with zero console errors or stack traces. * Added `BedrockCompatTest` unit test verifying that Bedrock detection cleanly returns false without throwing classloading exceptions when dependencies are absent. ### Changed * Bumped project version to `1.2.1` across all subprojects, build scripts, plugin descriptors, and documentation.
release

Staff+ 1.2.0

1.2.0
13 сент. 2026 г.13Minecraft: 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2folia, paper, purpur
Скачать
Что нового
## [1.2.0] - 2026-09-13 ### Added * **Native Bedrock Geyser Forms**: * Implemented `BedrockFormManager` with dual detection for `GeyserApi` (`Geyser-Spigot`) and `FloodgateApi` (`floodgate`). * Bedrock players running `/bans` receive a native Bedrock `SimpleForm` with paginated ban list buttons, detailed ban modal inspections, and back navigation. * Bedrock players running `/bansleaderboard` receive a native Bedrock `SimpleForm` displaying top staff member statistics and ban counts. * Runtime soft-dependency isolation guaranteeing zero `NoClassDefFoundError` or crashes on servers without Geyser or Floodgate. * **Java Chest Inventory GUIs**: * Implemented `BansMenuHolder` 54-slot chest GUI on Paper for Java players with player heads, active/expired status badges, and clickable page navigation buttons. * Implemented `BansLeaderboardHolder` 54-slot chest GUI on Paper displaying top 10 staff with gold, silver, and bronze podium styling and player heads. * Full support for `--chat` / `-c` flag and automatic fallback to paginated chat text for Console and Velocity proxy execution. * **New Moderation Commands**: * `/kick <player> [reason]`: Online player kick enforcing administrative hierarchy checks, Folia entity-thread safety, and Discord webhook logging. * `/unwarn <player> [id]`: Deactivates a player's latest active warning (or a specific warning ID) with hierarchy weight validation against the issuing staff member. * `/checkban <player/IP>` (alias `/bancheck`): Status audit command displaying active ban or IP-ban status, expiry, issuing staff, and reason. * **Dynamic Configuration Reloading**: * Added `/staff reload` (and `/staffplus reload`) across both Paper and Velocity to dynamically reload `config.yml` and `messages.yml` without server restarts. * **Core Database Enhancements**: * Added `getLatestActiveWarning(UUID)` to `DatabaseManager` for quick warning resolution. * Added `removeWarningById(int)` and `removeLatestWarning(UUID)` for warning revocation. * Added `getPunishmentById(int)` for targeted punishment inspection. * Added `isPermanent()` and `getDuration()` helpers to `Punishment`. ### Changed * Bumped project version to `1.2.0` across all subprojects, build scripts, plugin descriptors, and documentation. * Added `staff.kick`, `staff.unwarn`, `staff.checkban`, and `staff.staff.reload` permission nodes to `paper-plugin.yml`.
release

Staff+ 1.2.0

1.2.0
13 сент. 2026 г.24Minecraft: 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2velocity
Скачать
Что нового
## [1.2.0] - 2026-09-13 ### Added * **Native Bedrock Geyser Forms**: * Implemented `BedrockFormManager` with dual detection for `GeyserApi` (`Geyser-Spigot`) and `FloodgateApi` (`floodgate`). * Bedrock players running `/bans` receive a native Bedrock `SimpleForm` with paginated ban list buttons, detailed ban modal inspections, and back navigation. * Bedrock players running `/bansleaderboard` receive a native Bedrock `SimpleForm` displaying top staff member statistics and ban counts. * Runtime soft-dependency isolation guaranteeing zero `NoClassDefFoundError` or crashes on servers without Geyser or Floodgate. * **Java Chest Inventory GUIs**: * Implemented `BansMenuHolder` 54-slot chest GUI on Paper for Java players with player heads, active/expired status badges, and clickable page navigation buttons. * Implemented `BansLeaderboardHolder` 54-slot chest GUI on Paper displaying top 10 staff with gold, silver, and bronze podium styling and player heads. * Full support for `--chat` / `-c` flag and automatic fallback to paginated chat text for Console and Velocity proxy execution. * **New Moderation Commands**: * `/kick <player> [reason]`: Online player kick enforcing administrative hierarchy checks, Folia entity-thread safety, and Discord webhook logging. * `/unwarn <player> [id]`: Deactivates a player's latest active warning (or a specific warning ID) with hierarchy weight validation against the issuing staff member. * `/checkban <player/IP>` (alias `/bancheck`): Status audit command displaying active ban or IP-ban status, expiry, issuing staff, and reason. * **Dynamic Configuration Reloading**: * Added `/staff reload` (and `/staffplus reload`) across both Paper and Velocity to dynamically reload `config.yml` and `messages.yml` without server restarts. * **Core Database Enhancements**: * Added `getLatestActiveWarning(UUID)` to `DatabaseManager` for quick warning resolution. * Added `removeWarningById(int)` and `removeLatestWarning(UUID)` for warning revocation. * Added `getPunishmentById(int)` for targeted punishment inspection. * Added `isPermanent()` and `getDuration()` helpers to `Punishment`. ### Changed * Bumped project version to `1.2.0` across all subprojects, build scripts, plugin descriptors, and documentation. * Added `staff.kick`, `staff.unwarn`, `staff.checkban`, and `staff.staff.reload` permission nodes to `paper-plugin.yml`.
release

Staff+ 1.1.0

1.1.0
9 сент. 2026 г.13Minecraft: 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2velocity
Скачать
Что нового
## [1.1.0] - 2026-09-09 ### Added * **Modrinth Version Notifier**: * Asynchronous update checker querying the Modrinth v2 API (`https://api.modrinth.com/v2/project/staff+/version`) using native Java 21 `HttpClient` and Gson. * Compares semantic versioning between running and published releases. * Automatically logs update availability to the server console upon enable. * In-game notifications for server administrators and OPs (`staff.admin`, `staff.update.notify`, or OP) upon joining, featuring interactive clickable links to [Modrinth Releases](https://modrinth.com/plugin/staff%2B/versions). * Configuration options `update-checker-enabled` and `update-checker-notify-admins` in `config.yml`. * **Global Ban History Command (`/bans`)**: * Cross-platform `/bans [page]` command (aliases: `/banhistory`, `/banlist`) available on both Paper/Purpur/Folia servers and Velocity proxies. * Displays paginated ban logs with `[ACTIVE]` and `[EXPIRED]` badges, target name/IP, staff member, reason, and timestamps. * Interactive pagination buttons (`[« Previous]` and `[Next »]`) enabling one-click page navigation. * Permission node: `staff.bans` (granted by default under `staff.admin`). * **Staff Moderation Leaderboard (`/bansleaderboard`)**: * Cross-platform `/bansleaderboard` command (aliases: `/banleaderboard`, `/staffleaderboard`) available on Paper and Velocity. * Displays the Top 10 staff members ranked by total bans and IP bans issued. * Configurable toggle `bans-leaderboard-enabled` in `config.yml` allowing server owners to enable or disable staff leaderboards. * Permission node: `staff.bansleaderboard` (granted by default under `staff.admin`). * **Core Database Enhancements**: * Added `getRecentBans(offset, limit)` to `DatabaseManager` for paginated ban retrieval. * Added `getTotalBanCount()` to `DatabaseManager` for dynamic page calculation. * Added `getStaffBanLeaderboard(limit)` and `StaffLeaderboardEntry` for staff ranking aggregation. * Statements tested and fully compliant with SQLite and MySQL `ONLY_FULL_GROUP_BY` strict modes. * **Testing & Platform**: * Added `UpdateCheckerTest` unit test suite covering semantic version parsing, release prefixes, and edge cases. * Added `StaffPlatform#getPluginVersion()` method for platform-agnostic version resolution. ### Changed * Bumped project version to `1.1.0` across root `build.gradle`, `paper-plugin.yml`, `StaffVelocityPlugin`, `package.json`, and documentation. * Configured JUnit test execution in `staff-paper/build.gradle` with ByteBuddy experimental property and dynamic agent loading for modern Java compatibility. * Updated documentation files (`README.md`, `commands.md`, `configuration.md`, `getting-started.md`) with the new commands, options, and download sources.
release

Staff+ 1.1.0

1.1.0
9 сент. 2026 г.24Minecraft: 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2folia, paper, purpur
Скачать
Что нового
## [1.1.0] - 2026-09-09 ### Added * **Modrinth Version Notifier**: * Asynchronous update checker querying the Modrinth v2 API (`https://api.modrinth.com/v2/project/staff+/version`) using native Java 21 `HttpClient` and Gson. * Compares semantic versioning between running and published releases. * Automatically logs update availability to the server console upon enable. * In-game notifications for server administrators and OPs (`staff.admin`, `staff.update.notify`, or OP) upon joining, featuring interactive clickable links to [Modrinth Releases](https://modrinth.com/plugin/staff%2B/versions). * Configuration options `update-checker-enabled` and `update-checker-notify-admins` in `config.yml`. * **Global Ban History Command (`/bans`)**: * Cross-platform `/bans [page]` command (aliases: `/banhistory`, `/banlist`) available on both Paper/Purpur/Folia servers and Velocity proxies. * Displays paginated ban logs with `[ACTIVE]` and `[EXPIRED]` badges, target name/IP, staff member, reason, and timestamps. * Interactive pagination buttons (`[« Previous]` and `[Next »]`) enabling one-click page navigation. * Permission node: `staff.bans` (granted by default under `staff.admin`). * **Staff Moderation Leaderboard (`/bansleaderboard`)**: * Cross-platform `/bansleaderboard` command (aliases: `/banleaderboard`, `/staffleaderboard`) available on Paper and Velocity. * Displays the Top 10 staff members ranked by total bans and IP bans issued. * Configurable toggle `bans-leaderboard-enabled` in `config.yml` allowing server owners to enable or disable staff leaderboards. * Permission node: `staff.bansleaderboard` (granted by default under `staff.admin`). * **Core Database Enhancements**: * Added `getRecentBans(offset, limit)` to `DatabaseManager` for paginated ban retrieval. * Added `getTotalBanCount()` to `DatabaseManager` for dynamic page calculation. * Added `getStaffBanLeaderboard(limit)` and `StaffLeaderboardEntry` for staff ranking aggregation. * Statements tested and fully compliant with SQLite and MySQL `ONLY_FULL_GROUP_BY` strict modes. * **Testing & Platform**: * Added `UpdateCheckerTest` unit test suite covering semantic version parsing, release prefixes, and edge cases. * Added `StaffPlatform#getPluginVersion()` method for platform-agnostic version resolution. ### Changed * Bumped project version to `1.1.0` across root `build.gradle`, `paper-plugin.yml`, `StaffVelocityPlugin`, `package.json`, and documentation. * Configured JUnit test execution in `staff-paper/build.gradle` with ByteBuddy experimental property and dynamic agent loading for modern Java compatibility. * Updated documentation files (`README.md`, `commands.md`, `configuration.md`, `getting-started.md`) with the new commands, options, and download sources.