v1.3.0: 1.3.0 | Write any message as multiple lines
09 August 2026
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 Warn
mute.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 |
๐ 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!
v1.2.1: 1.2.1 | Turn the report system off with one switch
02 August 2026
One config switch removes the report system completely, so another report plugin can take over cleanly.
๐ Turn Reports Off Entirely
config.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!
v1.2.0: 1.2.0 | Fully Configurable Menus & Customization Update
21 July 2026
Every GUI is now fully configurable, with two new placeholders and the alt-detection alert moved into config.
๐จ Every Menu Is Now Configurable
A new
plugins/PhantomBans/menus/ folder gives you one file per GUI, punish.yml, history.yml, staffhistory.yml, lookup.yml, reports.yml, appeals.yml, staffnotes.yml, duration.yml, reason.yml, template.yml, confirmation.yml, plus a shared common.yml.- Every item is yours to shape: material, display name, lore, glow, stack amount, custom model data, and inventory slot
- Titles and row counts: configurable per menu
- Shared chrome:
common.ymlholds the border filler, brand banner, target head, close button, and page controls, edit once and every menu updates - Custom model data: every button takes a
custom-model-datakey so a resource pack can reskin any icon - Clean colors: the default menu italic is suppressed, so gradients and hex codes render exactly as you write them
๐ผ Per-Menu Filler Designs
Each menu has a
fillers block where you can stack as many named fillers as you like, each with its own material, so you can build layered pane designs per menu.fillers:
border:
material: BLACK_STAINED_GLASS_PANE
slots: border
accent:
material: PURPLE_STAINED_GLASS_PANE
slots: [3, 5]
slots accepts the keyword border, the keyword fill, or an explicit list of slot numbers. Fillers paint first, so buttons always sit on top. Remove the fillers block from a menu to fall back to the single border pane in common.yml.๐ Two New Punishment Placeholders
Available in the ban / temp-ban / IP-ban screens (
screens.yml), the kick screen, and the punishment broadcasts (appearance.yml):{date}(alias{start_date}) the date and time the punishment was issued{server}(alias{scope}) the server or network scope the punishment applies to, falling back to this server's name when unset
The ban screens and broadcasts also now expose
{duration} and {expiry} for convenience.๐จ Alt-Detection Alert Moved Into Config
The staff alt-detection alert on join was hardcoded (prefix and all). It now lives in
messages.yml as lookup.alt-detected with {player} and {count} placeholders, and ships with an editable hover tooltip. The same move fixed a bug where a few lines rendered a broken prefix.The message prefix is now a single source: editing
prefix in messages.yml changes it everywhere, alerts and broadcasts included.๐ก Security
Player-supplied text (report reasons, appeal messages, staff notes, evidence URLs, punishment reasons) is now escaped before it reaches a menu or broadcast, so a player can't inject color or click tags into what staff see.
๐ฆ Install
- Stop the server.
- Replace the old jar with
PhantomBans-1.2.0.jar. - Delete (or back up and delete) your
messages.ymlso the new keys and corrected prefix handling regenerate. The newmenus/folder is created automatically on start. - Start the server.
On an existing install,
messages.yml keeps your saved values, delete or regenerate it to pick up the new default wording.Read the documentation | Join the Discord
Enjoying the plugin? A โญ review goes a long way!
v1.1.0: 1.1.0 | Network sync: PhantomBans goes multi-server
30 June 2026
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.
Read the documentation | Join the Discord
Enjoying the plugin? A โญ review goes a long way!
v1.0.0: PhantomBans
23 June 2026
A complete GUI punishment suite: bans, mutes, warns, silent punishments, reports, and appeals
By zArrowTan, part of Arrow Plugins.
๐ Overview
PhantomBans is a full moderation suite for your staff team. Bans, IP-bans, mutes, warns, and kicks (permanent or temporary), silent punishments that only staff can see, a reports and appeals workflow, staff notes, deep player lookups, alt detection, GeoIP and VPN blocking, and Discord webhooks. Almost everything runs through clean paginated GUIs, every screen and message is editable, and the jar stays tiny by loading its libraries at runtime. Run a network? Punishments sync across all your servers, with optional proxy support. Switching from another plugin? Bring your punishment history with you.
The Active Reports menu
โ๏ธ Punishment Types
- Bans & IP-Bans: permanent or temporary, with custom ban screens
- Mutes & IP-Mutes: permanent or temporary, enforced in chat
- Warns: with configurable thresholds that auto-escalate (for example, 5 warns mutes, 10 bans for a week, 15 bans permanently, all editable)
- Kicks: with a custom kick screen
- Punishment templates: escalating ladders of steps per offence, so repeat offenders climb the punishment chain automatically
What a banned player sees
The kick screen
A muted player's notice
Spoiler: Command usage screenshots
/ban
/tempban
/ipban
/mute
/tempmute
/ipmute
/warn
/kick
๐คซ Silent Punishments
Punish without tipping off the server. Add
-s to a ban or mute, or use the /silentban and /silentmute aliases. The target sees the normal ban or mute, but the public broadcast is suppressed, and only staff with the right permission get a quiet heads-up about who issued it. Perfect for catching alts and rule-breakers without the audience.๐ IP Tools, GeoIP & Alt Detection
- IP punishments: ban or mute by IP to shut down ban evaders
- Alt detection: flags accounts sharing an IP, with
/altsto investigate and a ban-evasion auto-flag - GeoIP country control: block chosen countries with a dedicated screen, or flip to allow-list mode to permit only the countries you choose
- VPN blocking: turn away VPN and proxy connections
An IP-banned player's screen
The VPN block screen
/alts to investigate shared IPs
๐ฃ Reports & Appeals
- Player reports: players report rule-breakers with
/report, and staff review them in a live menu - Appeals workflow: review punishments and accept, deny, or escalate them, each with its own note
The active reports menu
The reports menu when it's all quiet
Reporting a player with /report
๐ Player Lookup
A single menu with everything you need on a player: first and last seen, play time, total bans, total mutes, name history, and their country.
The player lookup menu
Spoiler: Lookup detail items
First seen and last seen
Total bans
Total mutes
Name history
Country (GeoIP)
๐ History, Notes & Checks
- Punishment history: browse a player's full record in a paginated menu with
/history, or audit a staff member's actions with/staffhistory - Staff notes: leave private notes on players with
/note - Quick checks:
/checkbanand/checkmuteto see a player's active status at a glance
Browsing a player's punishment history
Checking a player's mute with /checkmute
๐ฅ GUI-Driven Everywhere
- Punish, history, lookup, reports, appeals, and staff notes all open as clean paginated menus
- Duration, reason, and template selectors so staff rarely need to type long commands
- Quick-pick preset reasons in the punishment GUI, fully editable
- Confirmation screens to prevent misfires
The player punish menu, staff open it to punish without typing commands
๐จ Custom Screens & Messages
- Editable screens: ban, tempban, IP-ban, kick, country-blocked, and VPN-blocked, all yours to reword
- Full message control: every player-facing string is editable, with MiniMessage formatting, hex, and gradients
- Safe updates: config and language files keep your edits while merging in new keys on update
๐ Integrations & Storage
- Discord webhooks: mirror punishments to Discord as rich embeds, with separate per-event webhooks for bans, mutes, kicks, warns, unbans, reports, appeals, staff notes, and the audit log, each toggled on or off independently. Silent punishments can be kept out of Discord too.
- PlaceholderAPI: placeholders like
%phantombans_is_banned_<player>%for scoreboards, tab, and chat - Storage: SQLite by default, or MySQL / MariaDB, all async so the main thread never blocks
- Tiny jar: around 300KB, with libraries downloaded at runtime instead of bloating the file
๐ Migrate From Your Old Plugin
Already running another punishment plugin? Bring your history with you. PhantomBans imports existing punishment data from LiteBans, AdvancedBan, and LibertyBans, so you keep every ban, mute, and warn on record when you switch.
- Safe by default: run
/pb import <source>for a dry-run preview that reads and reports counts but writes nothing, then addconfirmwhen you're ready - Clean re-runs: imported rows are tagged by source, so re-importing won't create duplicates
- File or network databases: reads each plugin's local database, or a live MySQL / MariaDB source
A dry-run preview, then the real import with confirm
๐ Network Sync
Running more than one server? PhantomBans syncs punishments across your whole network. Ban, mute, unban, and unmute on any server and it applies everywhere, with banned players kicked network-wide the instant the punishment lands. Silent punishments stay silent across every server too.
- Cross-server enforcement: bans and mutes propagate to every backend automatically
- Optional proxy support: companion jars for Velocity (recommended) and BungeeCord (experimental) reject banned players right at the proxy, before they reach a backend
- Opt-in: enable it in
network.yml. Single-server setups are unaffected - One requirement: every server must share one MySQL or MariaDB database for sync to work
โจ๏ธ Commands
Main command
/pb (alias /pbans) opens a paginated, clickable help menu.Punishments
/ban,/tempban,/ipban(alias/pban)/mute,/tempmute,/ipmute/warn,/kick(alias/pkick)/unban,/unmuteto lift punishments- Add
-sto a ban or mute, or use/silentbanand/silentmute(plus/unsilentban,/unsilentmute)
Staff Tools
/report <player> <reason>report a player/lookup <player>open the player lookup menu/history(alias/hist) and/staffhistory <staff>/alts <player>investigate shared IPs/note(alias/notes) leave a staff note/checkban <player>,/checkmute <player>/pb import <litebans|advancedban|libertybans> [dry|confirm]import punishments from another plugin
The in-game help menu
๐ Permissions
All nodes use the
phantombans.* prefix, with phantombans.admin as a grant-all parent. Silent punishments are gated separately: phantombans.silent.use to issue them and phantombans.silent.see to receive the quiet staff notices.๐งช Requirements
- Server: Paper 1.21+ or a Paper fork (Purpur), supporting 1.21.x and newer
- Java: 21 or higher
- Storage: SQLite out of the box, MySQL or MariaDB optional (a shared MySQL/MariaDB is required for network sync)
- Networks: optional Velocity or BungeeCord proxy support
- Optional: PlaceholderAPI and Vault
๐ฆ Installation
- Drop the jar into your
plugins/folder. - Start the server once to generate the config and screen files.
- Edit to taste, then reload, and your staff are ready to go.
๐ Metrics
This plugin uses bStats to collect anonymous usage stats. You can opt out anytime in
plugins/bStats/config.yml.๐ฌ Support & Docs
Full setup and configuration guides are in the documentation. Need help, found a bug, or want to suggest a feature? Join the Discord.
PhantomBans | Complete Moderation Suite
zArrowTan
A complete GUI punishment suite: bans, mutes, warns, silent punishments, reports, and appeals.
$4.49
Digital product, delivered instantly, no refunds · Terms
No versions available
Share and earn
How referrals work
- Your link is remembered for 30 days.
- 10% of each sale, paid to you as points.
- Yours to spend 30 days later.
- Ask your buyer to turn a VPN off, or the sale will not count.
Earn on every sale you send here
10%
135 pts / sale