BanManager - An advanced punishment system

This is a discussion topic for the Ore project, BanManager. View the full project on Ore for downloads and more information.


Home BanManager

The defacto plugin for Minecraft to manage punishments and moderate more effectively

Home

Overview

  • Free. Open source and free to use
  • Robust. Used and battle tested by some of the largest Minecraft servers
  • Maintained. Actively developed since 2012, 10+ years
  • Cross platform. Supports Bukkit, Spigot, Bungeecord & Sponge
  • Feature rich. An advanced punishment system, reports, appeals, network friendly and website compatible
  • Flexible. Fully customisable with extensive player permissions

To learn more about configuration, usage and features of BanManager, take a look at the website or view the website demo.

Requirements

  • Java 8+
  • CraftBukkit/Spigot/Paper, BungeeCord or Sponge for Minecraft 1.7.2+
  • Optionally MySQL or MariaDB

Installation

  • Copy jar to mods (Sponge) folder
  • For further instructions on how to support multiple servers click here

Commands

View full list here

  • /ban <player> <reason> - Permanently ban a player, requires permission, requires permission bm.command.ban
  • /tempban <player> <timeDiff> <reason> - Temporarily ban a player, requires permission bm.command.tempban
  • /unban <player> [reason] - Unban a player, requires permission bm.command.unban
  • /mute <player> <reason> - Permanently mute a player, requires permission bm.command.mute
  • /tempmute <player> <timeDiff> <reason> - Temporarily mute a player, requires permission bm.command.tempmute
  • /unmute <player> [reason] - Unmute a player, requires permission bm.command.unmute
  • /banip <player || ip> <reason> - Permanently ban an ip address or ip of a player, requires permission bm.command.banip
  • /tempbanip <player || ip> <timeDiff> <reason> - Temporarily ban an ip address or ip of a player, requires permission bm.command.tempbanip
  • /unbanip <ip> [reason] - Unban an ip address, requires permission bm.command.unbanip
  • /muteip <player || ip> <reason> - Permanently mute an ip address or ip of a player, requires permission bm.command.muteip
  • /tempmuteip <player || ip> <timeDiff> <reason> - Temporarily mute an ip address or ip of a player, requires permission bm.command.tempmuteip
  • /unmuteip <ip> [reason] - Unmute an ip address, requires permission bm.command.unmuteip
  • /baniprange <cidr || wildcard> <reason> - Permanently ban a cidr or wildcard ip range, e.g. 192.168.0.1/16 or 192.168.., requires permission bm.command.baniprange
  • /tempbaniprange <cidr || wildcard> <timeDiff> <reason> - Temporarily ban a cidr or wildcard ip range, requires permission bm.command.tempbaniprange
  • /unbaniprange <cidr || wildcard || player> - Unban an ip range, requires permission bm.command.unbaniprange
  • /warn <player> <reason> - Warn a player, requires permission bm.command.warn
  • /tempwarn <player> <timeDiff> <reason> - Temporarily warn a player, requires permission bm.command.tempwarn
  • /dwarn <player> - Delete the last warning a player received, requires permission bm.command.dwarn
  • /addnote <player> <message> - Add a note against a player, requires permission bm.command.addnote
  • /notes [player] - View notes of all online players or a particular player, requires permission bm.command.notes
  • /kick <player> <reason> - Kick a player from the server, requires permission bm.command.kick
  • /nlkick <player> <reason> - Kick a player from the server without logging the kick if kick logging enabled, requires permission bm.command.nlkick
  • /bminfo [player] - Look up information of a player, requires permission bm.command.bminfo
  • /bmimport, Check the migration guides for more information, requires permission bm.command.import
  • /bmexport <players || ips> - Export bans to vanilla format, requires permission bm.command.export
  • /bmreload - Reload plugin configuration and messages (excludes database connection info), requires permission bm.command.reload
  • /banlist [players || ipranges || ips] - List all bans stored in memory, requires permission bm.command.banlist
  • /bmsync <local || external> - Force the server to syncronise with the database, requires permission bm.command.sync
  • /bmclear <player> [banrecords || baniprecords || kicks || muterecords || notes || warnings] - Clear all records of a player or specify a type, requires permission bm.command.clear
  • /bmdelete <banrecords || kicks || muterecords || notes || warnings> <ids> - Delete specific records for a player based on ids from /bminfo, requires permission bm.command.delete
  • /bmactivity <timeDiff> [player] - View recent activity of staff, or a particular player, requires permission bm.command.bmactivity
  • /alts <player || ip> - List players which have the same ip address, requires permission bm.command.alts
  • /report <player> <reason> - Report a player for rule breaking, logs their location and the actors location, as well as other data, requires permission bm.command.report
  • /reports - Report management, executes list by default, requires permission bm.command.reports
  • /reports assign <ids> [player] - Assign a report to a player, if none given assigns to self, requires permission bm.command.reports.assign
  • /reports close <ids> [/command || comment] - Marks a report as closed, with an optional comment or command, requires permission bm.command.reports.close
  • /reports list [page] [state] - Lists reports, requires permission bm.command.reports.list
  • /reports tp <id> - Teleports you to where the report was created, requires permission bm.command.reports.tp
  • /reports unassign <ids> - Unassigns reports from a player, requires permission bm.command.reports.unassign
  • /bmrollback <player> <timeDiff> [types] - Allows rolling back malicious actions by a staff member, requires permission bm.command.bmrollback
  • /banname <name> <reason> - Ban any players with the name specified, requires permission bm.command.banname
  • /tempbanname <name> <timeDiff> <reason> - Temporarily ban a name, requires permission bm.command.tempbanname
  • /unbanname <name> [reason] - Unban a name, requires permission bm.command.unbanname
  • /bmutils <duplicates||missingplayers> - Utility commands to aid with resolving issues, requires permission bm.command.bmutils
  • /bmutils duplicates [UUID] [newName] - Finds duplicate player names and allows manual updating of a player name, requires permission bm.command.bmutils.duplicates
  • /bmutils missingplayers - Finds missing player records associated to punishments and creates them, requires permission bm.command.bmutils.missingplayers

Permissions

View full list here

Development

git clone [email protected]:BanManagement/BanManager.git

Contributing

If you’d like to contribute, please fork the repository and use a feature branch. Pull requests are warmly welcome.

Help / Bug / Feature Request

If you have found a bug please open an issue with as much detail as possible, including relevant logs and screenshots where applicable

Have an idea for a new feature? Feel free to open an issue or join us on Discord to chat

License

Free to use under the Creative Commons Attribution-NonCommercial-ShareAlike 2.0 UK: England & Wales

A new version has been released for BanManager, it is available for download here.


Initial alpha release of an official BanManager port to Sponge

A new version has been released for BanManager, it is available for download here.


  • Breaking To support other servers API classes have been relocated moved and been updated. Plugins integrating with older BanManager versions must be updated.

  • Added H2 support and set as default storageType

  • Added BungeeCord and Sponge builds

  • Added IPv6 support (database schema changes will applied on start up) Backup your database before updating

  • Added DiscordSRV support (Bukkit only)

  • Added AdvancedBan importer

  • Added PlayerKickedEvent

  • Added clean up option to player history which will not remove history if the ip address is currently banned

  • Added bStats (can be disabled in bStats/config.*)

  • Fixed MaxMind Lite integration by adding license key support

  • Fixed silent punishments broadcasting on sync

A new version has been released for BanManager, it is available for download here.


  • Enable H2 by default, now works out of the box with no configuration needed
  • Added Discord support for Sponge via MagiBridge
  • Fixed Sponge command argument handling #845
  • Reduced ORMLite logging, no longer shows table creation and index logs on first start up

A new version has been released for BanManager, it is available for download here.


  • Removed unused dependencies and general clean up reducing overall jar size
  • Fixed global command reason parsing
  • Added missing addnoteall notify message
  • Stop invalid ip addresses from plugin starting up; this can be caused when running different BanManager versions against the same database/tables
  • Catch/log command registration failures for older Bukkit versions for better compatibility with other plugins
  • Downgraded bStats in Sponge as it was causing the server to crash on start up when BanManager was installed with other plugins using bStats

A new version has been released for BanManager, it is available for download here.


  • Fixed an issue with bans and mutes not broadcasting correctly

A new version has been released for BanManager, it is available for download here.


  • Added checks to console.yml name to prevent duplicate names

  • Added discord notifications on player kicks and ip bans

  • Added [players] variable to discord ip ban notification messages

  • Added baniprecords to /bmclear

  • Added tab completion to reasons (#reasons) and added a config option to block invalid reasons being used, thanks to JOO200 for the PR!

  • Added IP mute methods to BmAPI, thanks to mxs42 for the PR!

  • /reports list and reports on join now shows newest reports first

  • Added utitlity command, /bmutils duplicates [UUID] [newName], this is to assist with name duplicate issues, see FAQ | Ban Management for usage instructions

  • Raw JSON messages are now supported within messages.yml for further flexibility, thanks to mxs42 for the PR!

  • Removed INET6_NTOA from /bmactivity fixing compatibility with older MySQL/MariaDB versions

  • Fixed actor lookups when duplicate names present, now correctly UUID based

  • Fixed duplicate notification messages for ip bans and mutes when syncing changes

  • Fixed NPE when temp muting an offline player, thanks to mxs42 for the PR!

  • Fixed command blocking on mute/soft mute

  • Fixed /reports list and on join reports not querying the correct state value

  • Fixed player name tab completion not handling new players and name changes correctly, thanks to mxs42 for the PR!

  • Fixed chatPriority mapping for Sponge builds

A new version has been released for BanManager, it is available for download here.


  • Fixed not ignoring cancelled AsyncPlayerPreLoginEvent events, fixes compatibility issues with other plugins - thanks to mxs42 for the PR!

  • Fixed player being notified when a soft mute is unmuted - thanks to mxs42 for the PR!

  • Fixed command registration causing issues with commands.yml

  • Fixed invalid players in /alts throwing an NPE

  • Fixed /alts message colours

  • Fixed /alts name clicking, no longer executes /bminfo against the wrong player name

  • Fixed message colours in BungeeCord builds

  • Fixed duplicate join notifications in BungeeCord builds

  • Added [notes] to info.stats.player message

  • Added [player] to info.connection message

A new version has been released for BanManager, it is available for download here.


  • Added report support to hooks config

  • Added cooldowns for some punishment commands in config.yml

  • BREAKING report/warning cooldown options moved to cooldowns config area

  • Soft mute messages are now broadcasted to those with bm.notify.muted permission

  • Force bad ip values from v7 conversion to 127.0.0.1

  • Fixed temp player bans/mutes not always creating records on expiration

  • Fixed global sync duplicate errors

  • Fixed /bminfo with no args to run against player executing command

  • Fixed /unban and /unmute not showing usage

A new version has been released for BanManager, it is available for download here.


  • Fixed typo in temp ip ban causing affected players to be kicked outside the main thread
  • Save lastChecked values on shutdown, fixes global punishment sync creating duplicates on quick/repeated start/stops
  • Fixed ip unbans not being removed from memory correctly
  • Unban/unmute reasons are optional again, caused by a fix in previous release
  • Fixed global sync kick NPE in certain scenarios

A new version has been released for BanManager, it is available for download here.


  • Fixed issue preventing global temp bans from kicking players on sync
  • Fixed Discord warning notification errors
  • Fixed slf4j warnings on start up
  • Fixed BungeeCord mutes not blocking chat
  • Fixed duplicates name change validation issue
  • Fixed duplicates command usage showing /bmutils twice

A new version has been released for BanManager, it is available for download here.


  • Fixed report state missing a default value for some installations

A new version has been released for BanManager, it is available for download here.


  • Fixed /reports list running in a sync task
  • Fixed /bmrollback argument parsing
  • Expose connectionTimeout, maxLifetime, allowPublicKeyRetrieval connection options
  • Added discord notifications on unbans/unmutes
  • Fixed /bminfo command not always returning results for players consisting of numbers only - thanks to @lekro for the fix
  • Use webhooks for discord integrations, notifications show as actor (name/avatar)
  • Fixed /bminfo website not opening as a link on Sponge
  • Fixed unban/unmute commands broadcasting when silent

A new version has been released for BanManager, it is available for download here.


  • Fixed player name case sensitivity for H2 users
  • Fixed player name for report closed message - Thanks to @TrekkieEnderman for the PR
  • storageType in config is now case insensitive
  • Added BmAPI.toTimestamp method
  • Added ignoreSilent option to discord.yml, controls whether silent punishments should be sent, defaults to true
  • Bumped bStats to v2 to meet Sponge Ore guidelines
  • Added timeAssociatedAlts to ignore old ip address associations, disabled by default
  • Added PlaceholderAPI support, see Placeholders | BanManager | Ban Management for the full list
  • A message is now sent to players with the permission bm.notify.alts when an alt joins the server
  • Added punishment [id] token to messages
  • Fixed /reports info not running from the console
  • Removed unused warningCooldown option, use cooldowns instead
  • Removed unused incorrectFlagUsage message
  • Fixed /bminfo -ips history using the wrong dateTimeFormat message
  • Added api-version to remove legacy warning on newer Spigot versions, should not affect older versions
  • Block muted players from using signs (Bukkit & Sponge) and books (Bukkit only)
    • requires the following permissions to enable:
      • bm.block.muted.sign
      • bm.block.ipmuted.sign
      • bm.block.muted.book
      • bm.block.ipmuted.book
  • Fixed reports help not showing sub command correctly
  • Added option to configure a different uuid/name API

A new version has been released for BanManager, it is available for download here.


  • Fixed bStats preventing plugin enabling on Sponge builds

A new version has been released for BanManager, it is available for download here.


  • Fixed alt checking
  • Added /bminfo
  • Added support for geysermc names in /bminfo
  • Fixed alt notification on join from showing even when no alts found

A new version has been released for BanManager, it is available for download here.


  • Fixed bStat preventing plugin from starting in some scenarios, thanks to @Sir-Will for the PR!
  • Remove erroneous System.out
  • Fixed quick disconnects causing NPEs, thanks to @Kadeluxe for the PR!
  • Added report discord notifications
  • Bumped mysql/mariadb drivers and HikariCP
  • Fixed incorrect muteip disallowed message in default messages.yml, thanks to @MattW-source for the PR!
  • Empty messages from messages.yml are no longer sent to players, thanks to @Kadeluxe for the PR!
  • BanManager’s chat handling (including muting etc) can now be disabled by setting chatPriority to NONE in its config, thanks to @Kadeluxe for the PR!
  • Added baniprecords to /bmdelete, requires bm.command.delete.baniprecords permission to use
  • Added baniprange & tempbaniprange to exemptions.yml, so certain players can bypass range bans
  • Added exemption permissions to bypass maxOnlinePerIp & maxMultiaccountsrecently config options, requires bm.exempt.maxonlineperip and bm.exempt.maxmultiaccountsrecently permissions respectively

A new version has been released for BanManager, it is available for download here.


  • Added bm.command.unmuteip.own & bm.command.unbanip.own permissions
  • Add username in front of Muted messages to see who is writing muted messages, thanks @TomLewis for the PR
  • Added BmAPI.getPlayers(ip) method
  • Fixed a race condition on getPlayer Bungee implementation
  • Added [created] token to discord messages
  • Refactored build process to gradle (jars may be slightly bigger whilst we continue to optimise the new build system)
  • Fixed an NPE when specifying an unban ip reason
  • Added messagesFromActor in discord.yml to toggle messages from users in DiscordSRV

A new version has been released for BanManager, it is available for download here.


  • Fixed offline UUID lookups
  • Fixed MySQL driver loading in Sponge
  • Added new events PluginReloadedEvent & PlayerDeniedEvent to resolve issues with reloads and pin parsing in WebEnhancer addon

A new version has been released for BanManager, it is available for download here.


  • Fixed muted blacklist sub commands on bukkit builds
  • Fixed global sync to only remove local punishment if not a duplicate
  • Lowered default polling timings in schedules for new installations
  • Fixed Y2K38, temporary punishments past the year 2038 no longer cause an error
  • Added resource loading interference detection. Outputs an error message informing users of the plugin preventing BanManager loading its own resource files
  • Added [created] token to ban deny messages
  • Updated UTF8 collations (utf8mb4 & utf8mb4_unicode_ci) for new installations
  • Removed enabled config option for local database, this is always required
  • Fixed H2 /bmactivity incompatibility causing malformed results to show. This command now requires INET6_NTOA support in MySQL/MariaDB
  • Added fast IPv6 conversion mode for those updating from an older pre-IPv6 BanManager version
  • Fixed compatibility with older Minecraft versions (1.8) by shading slf4j for bukkit
  • Fixed exempt permissions for temp ip ban and mutes
  • Updated the default website default message for /bminfo with the new webui format, setting this to empty an empty string now also prevents it from showing
  • Added [actor] to deniedNotify messages
  • Fixed the silent flag in /kick command from being ignored