MurphyBan
A complete, production-ready punishment management plugin for Spigot 1.21
GitHub
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
MurphyBan is a self-contained punishment system built to replace LiteBans and AdvancedBan with a single, clean solution. Every player-facing string is configurable via MiniMessage and every database operation runs fully async — the main thread is never blocked.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Punishments
- Permanent and temporary bans, IP bans, mutes, kicks, and warnings
- Full offline player support — punish players who aren't online
- IP bans accept a player name or a raw IP address
- Warn escalation — auto-punishes when a player hits the warning threshold
- Warns older than warns.expire-after (default 30 days) stop counting automatically
- /unban, /unbanip, /unmute, /unwarn to lift any active punishment
Enforcement
- Banned and IP-banned players blocked at the pre-login stage with a customisable disconnect screen
- Time-expired punishments auto-cleared on the next login — no manual cleanup needed
- Muted players blocked from chat and commands, with a configurable whitelist for auth plugins
- Muted players see their remaining mute time on every blocked action
- Background expiry sweeper runs every 5 minutes
Staff Tools
- /check — compact summary of a player's active ban, mute, and warn count
- /history — paginated chest GUI, colour-coded by type, with Active / Revoked / Expired status
- /blame — last 5 punishments printed in chat
- /staffhistory — paginated GUI of all punishments issued by a staff member
- /alts — paginated GUI of all accounts sharing an IP, with ban status per player head
- Staff alert channel notified on every ban, mute, kick, warn, and alt join
Alt Detection
- Every IP a player connects from is recorded automatically
- On join, the incoming IP is checked against all banned accounts — staff alerted instantly
- Optional auto-ban for alts of banned players (disabled by default)
- /alts shows every account that has ever shared an IP with the target
Database
- SQLite out of the box — zero configuration required
- MySQL support with HikariCP connection pooling
- All queries fully async via CompletableFuture — main thread never blocked
- Schema and migrations run automatically on startup
Other
- Full MiniMessage support for every player-facing message
- PlaceholderAPI expansion with 9 placeholders
- /murphyban reload hot-reloads config and messages without restart
- Debug mode toggled live via reload — no restart needed
- Revocation tracking — history GUI shows who lifted a punishment and when
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Requirements
- Java 21+
- Spigot / Paper 1.21
- PlaceholderAPI (optional)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Commands
/ban <player> [duration] [reason] — murphyban.ban — Ban a player. Permanent if no duration given.
/ipban <player|ip> [duration] [reason] — murphyban.ipban — Ban a player's last known IP or a raw IP.
/mute <player> [duration] [reason] — murphyban.mute — Mute a player from chat and commands.
/kick <player> [reason] — murphyban.kick — Kick an online player.
/warn <player> [reason] — murphyban.warn — Issue a formal warning.
/unban <player> — murphyban.unban — Lift an active ban.
/unbanip <player|ip> — murphyban.ipban — Lift an active IP ban.
/unmute <player> — murphyban.unmute — Lift an active mute.
/unwarn <player> [id] — murphyban.unwarn — List or remove active warnings.
/check <player> — murphyban.history — Show active ban, mute, and warn count.
/history <player> — murphyban.history — Open paginated punishment history GUI.
/blame <player> — murphyban.history — Print last 5 punishments in chat.
/staffhistory <staff> — murphyban.history — GUI of punishments issued by a staff member.
/alts <player> — murphyban.alts — GUI of accounts sharing an IP with the target.
/murphyban about — none — Show plugin version and database status.
/murphyban reload — murphyban.admin — Reload config and messages from disk.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Source Code
Full source available on
GitHub.