PhantomBans | Complete Moderation Suite 1.3.0
A complete GUI punishment suite: bans, mutes, warns, silent punishments, reports, and appeals.
Every message PhantomBans sends can now be written as a list of lines instead of one cramped string, so you can build boxed, detailed notices straight from config.
📝 Multi-Line Messages
Every key in messages.yml, plus format and format-silent on every broadcast in appearance.yml, now accepts either a single string exactly as before, or a list of lines. A list is sent as one chat message with a line break between entries.
Before
mute:
blocked: "<prefix> <red>You are muted.</red> <gray>Expires: <white>{expiry}</white></gray>"
After
mute:
blocked:
- "<dark_gray><strikethrough> </strikethrough></dark_gray>"
- "<color:#FF3A6E><bold>MUTED</bold></color> <gray>You cannot send messages right now.</gray>"
- ""
- "<dark_gray>|</dark_gray> <gray>Reason</gray> <dark_gray>»</dark_gray> <white>{reason}</white>"
- "<dark_gray>|</dark_gray> <gray>Staff</gray> <dark_gray>»</dark_gray> <white>{staff}</white>"
- "<dark_gray>|</dark_gray> <gray>Expires</gray> <dark_gray>»</dark_gray> <color:#1AFFB2>{expiry}</color>"
- "<dark_gray><strikethrough> </strikethrough></dark_gray>"
- An empty entry (
"") renders as a blank line - Put
<prefix>only on the line you want it on. A boxed layout usually drops it and uses a header line instead <newline>inside a single string does the same job, if you prefer one-liners- Single strings are untouched, so nothing breaks on upgrade
mute.blocked and warn.received now ship as boxed multi-line lists by default. Broadcast defaults stay on one line on purpose, since they reach every player online and a multi-line announcement there turns into chat spam quickly.
🔤 Richer Placeholders on Mute and Warnmute.blocked and warn.received now receive the full punishment placeholder set, not just {expiry} and {reason}:
| Placeholder | Fills in |
{player} |
The punished player's name |
{staff} |
Who issued the punishment |
{reason} |
The punishment reason |
{duration} |
The length of a temporary punishment |
{expiry} |
When the punishment expires |
{date} / {start_date} |
When the punishment was issued |
{server} / {scope} |
The server or network scope |
{id} |
The punishment ID |
{type} |
BAN, MUTE, WARN, and so on |
These are the same names the ban and kick screens and the broadcasts already used, so one placeholder vocabulary now covers every punishment-driven message.
📌 Where To Stay On One Line
- Row templates (
history.line,lists.line,alts.line,notes.line,general.audit-line,import.breakdown) accept a list too, but they repeat once per row, so a multi-line row will flood a paginated list - Broadcasts go to everyone online. Multi-line works, but keep it short
discord.*keys are embed titles rather than chat, and stay single-line
📝 Upgrade Notes
The new multi-line defaults will not appear on an existing server unless you regenerate messages.yml. The config updater adds new keys and removes obsolete ones, but it never overwrites a value you already have, so your existing single-line mute.blocked and warn.received are kept as they are.
To pick up the new defaults: stop the server, replace the jar in plugins/, delete plugins/PhantomBans/messages.yml so it regenerates, and start the server.
To keep your own wording: leave the file alone. Back it up and hand-edit just those two keys into list form, then run /phantombans reload. Any other key can be converted the same way, at any time.
mute:
blocked:
- "your first line"
- "your second line"
To do nothing at all: that is fine too. Every existing single-line value keeps rendering exactly as it did in 1.2.1. This release is additive, with no forced migration and no change to bans, mutes, warns, or the network sync layer.
📦 Downloads
| File | For |
PhantomBans-1.3.0.jar |
Your Paper or Spigot backend server. This is the plugin |
PhantomBans-Velocity-1.3.0.jar |
Optional Velocity proxy gate |
PhantomBans-Bungee-1.3.0.jar |
Optional BungeeCord or Waterfall proxy gate |
PhantomBans-All-1.3.0.zip |
All three, plus a README |
🧪 Compatibility
Minecraft 1.21 and newer, Java 21.
Multi-line messages guide | Documentation | Join the Discord
Enjoying the plugin? A ⭐ review goes a long way!
One config switch removes the report system completely, so another report plugin can take over cleanly.
🔕 Turn Reports Off Entirelyconfig.yml now has a features: block with one switch:
features:
reports: true
Set it to false and the report system is gone from PhantomBans:
/reportand/reportsare unregistered from the server- The Reports button disappears from the
/punishmenu - The report lines drop out of
/pb help - The reports Discord webhook stops firing
🔁 Clean Handoff to Another Report Plugin
The commands are properly unregistered, not just blocked, so another plugin that provides /report takes over the label cleanly. No command clash, no "unknown command", and nothing to rename on either side.
♻️ Reload, Not Restart
The toggle applies on /pb reload, so you can flip it either way without restarting. Existing report rows stay in the database and come back if you switch the feature on again.
📦 Install
Stop the server, replace the old jar in plugins/ with PhantomBans-1.2.1.jar, and start it again. The new features: block is added to your existing config.yml automatically.
Read the documentation | Join the Discord
Enjoying the plugin? A ⭐ review goes a long way!
Fully Configurable Menus & Customization Update
This update focuses on making every GUI fully configurable while introducing new placeholders, improved customization options, and moving several hardcoded messages into configuration files for easier editing. :contentReference[oaicite:0]{index=0}
✨ New Features
- Fully Configurable Menus
Every GUI is now loaded from the newmenus/folder, allowing you to customize:
- Inventory titles & rows
- Item materials
- Display names & lore
- Glow effects
- Stack amounts
- Custom Model Data
- Inventory slots
- Shared Menu Components
A newcommon.ymllets you edit shared UI elements such as borders, navigation buttons, target heads, banners, and close buttons in one place. - Custom Model Data Support
Every menu item now supportscustom-model-data, making resource pack integration much easier. - Per-Menu Filler Designs
Each menu can now have multiple filler designs with different materials and layouts instead of a single border pane. - New Punishment Placeholders
Added support for:
{date}/{start_date}{server}/{scope}
Additionally, punishment screens and broadcasts now expose:
{duration}{expiry}
- Configurable Alt Detection Alert
The alt-account detection message has been moved intomessages.yml, allowing full customization including hover text and prefixes. - Centralized Message Prefix
Editing the prefix inmessages.ymlnow updates it everywhere automatically, including alerts and broadcasts.
🛠 Improvements
- Gradient text now renders exactly as written throughout menu names and lore.
- Improved menu customization workflow with automatic shared component support.
- Invalid menu slots are safely ignored instead of causing errors.
- Player-supplied text is now escaped to prevent formatting and click-event injection.
- Configuration updater preserves existing values where possible.
📂 Installation
- Stop your server.
- Replace the plugin with
PhantomBans-1.2.0.jar. - Delete (or back up) your existing
messages.ymlso the new keys regenerate. - Start your server.
Thank you for using PhantomBans! ❤️
Punishments now sync across your whole network, with optional proxy support.
🌐 Network Sync
PhantomBans now works across a multi-server network, not just a single server. Ban, mute, unban, and unmute actions propagate to every backend automatically, so a punishment on one server takes effect everywhere.
- Instant cross-server enforcement: a banned player is kicked network-wide the moment the ban lands, no matter which server issued it
- Network-wide broadcasts: bans, mutes, and their reversals announce across all servers
- Server-wide commands propagate:
/mutealland/unmuteallapply across the network - Silent stays silent: silent (
-s) punishments remain hidden everywhere
Network sync is opt-in. Enable it in the new network.yml. Single-server setups are unaffected and need no changes.
⚠️ One Requirement: A Shared Database
For network sync, every backend server must point at the same shared MySQL or MariaDB database. SQLite or a separate database per server will not sync, and is the single most common setup mistake. One network, one database.
🛡 Proxy Support (Optional)
Two optional companion jars stop banned and IP-banned players right at the proxy, before they ever reach a backend. They read the same shared database, and the connection fails open, so a database hiccup never locks players out of your network.
- Velocity (recommended)
- BungeeCord (experimental)
Optional, the backend always enforces punishments on its own. The proxy jars just turn players away one step earlier.
🔧 Fixes & Hardening
- Plain bans and mutes no longer affect other accounts that happen to share an IP. Only
/ipbanand/ipmuteenforce by IP - Backends now always enforce bans even behind a proxy, closing an edge case where a player could slip through
- Added database indexes for faster punishment lookups on large histories
- Clearer database connection error messages to make setup mistakes easier to spot
- General stability and thread-safety improvements across the sync layer
📦 Install
- Replace the jar on every backend and restart.
- Point all backends at one shared MySQL or MariaDB database.
- Enable sync in
network.yml. - Optionally drop the Velocity or BungeeCord jar on your proxy for boundary-level blocking.
Need help setting up network sync? Join the Discord.
Read the documentation | Join the Discord
Enjoying the plugin? A ⭐ review goes a long way!
Statistics
Views
Purchases
Downloads
File size
Published
Updated
Info
Share & Earn
Share and earn part of the profits, an estimated €0.9 per product sale.