PLEASE KEEP IN MIND THAT THIS IS A FORK OF THE ORIGINAL ADVANCED BAN PLUGIN, DO NOT REQUEST SUPPORT IN THE ADVANCED BAN DISCORD, INSTEAD PLEASE GET SUPPORT ON THE GITHUB REPOSITORY ISSUES PAGE
AdvancedBanX is an updated and modernized version of the original AdvancedBan plugin made by Leoko. It is an All-In-One punishment system with warns, tempwarns, mutes, tempmutes, bans, tempbans, ipbans, and kicks. There is also player history to view players' past punishments. The plugin has configurable time & message layouts which automatically calculate and increase punishment times for certain reasons. AdvancedBanX provides a full message file so you can change and translate all messages. There is also a detailed main configuration file with a lot of useful options. At the moment, AdvancedBanX supports Bukkit (Spigot/Paper) and Bungeecord. It also supports MySQL and Local File saving as it's storage platform.
- Download the plugin from GitHub releases.
- Place the plugin in your plugins folder (Same for Bukkit & Bungeecord).
- Reload / Restart your server.
- Check with /advancedban if the plugin has loaded successfully.
- Configure it to your liking and enjoy.
Optionally, if there is an issue connecting to a database, please adjust the version of MySql to 5.X
See all commands
[NEEDED] <OPTIONAL> | = or -s = Silent punishemnt (no notification to others)/kick<-s> [PLAYER] <REASON | @LAYOUT> Kick a player
/ban /mute /warn /note <-s> [PLAYER] <REASON | @LAYOUT> Ban/Mute/Warn a player / Add a note to a player
/banip <-s> [PLAYER/IP] <REASON | @LAYOUT> Ban a player's IP. If you enter a name it will use the cached IP
/tempban /tempmute /tempwarn <-s> [PLAYER] [Xmo|Xd|Xh|Xm|Xs|#TIMELAYOUT] <REASON | @LAYOUT> Tempban/mute/warn a player for a given time or with a time-layout for automatic-time-calcualtion
/tempipban <-s> [PLAYER/IP] [Xmo|Xd|Xh|Xm|Xs|#TIMELAYOUT] <REASON | @LAYOUT> Temippban a player for a given time or with a time-layout for automatic-time-calcualtion Alias: /tipban
/change-reason [ID] [New reason] Change the reason for a punishment by id
/change-reason [ban/mute] [PLAYER] [New reason] Change the reason for a players punishment
/unban /unmute [PLAYER] Unban/mute a player
/unwarn /unnote [ID] Delete a warn/note
/unwarn /unnote clear [PLAYER] Delete all warnings/notes for a player
/unpunish [ID] Delete a punishment
/warns /notes <PLAYER> See your own or a player's warnings/notes.
/check [PLAYER] Get player-status: UUID/IP/Country/Ban-Status/Mute-Status/Warn-Count/Note-Count
/banlist <PAGE> See all currently active punishments
/history [PLAYER] <PAGE> See all currently active punishments To use the command - ab.history
/advancedban reload Reloads the messages from file and "some" settings
/advancedban help Shows a list of all commands and a brief explanation
/systemprefs Displays some System-Information which are useful for the configuration
All Permissions
ab.kick.use - /kick
ab.kick.exempt - Immune to kicking
ab.notify.kick - Receives notification
ab.ban.perma - /ban
ab.ban.temp - /tempban
ab.ban.undo - /unban
ab.ban.exempt - Immune to ban
ab.notify.ban - Receives notification
ab.undoNotify.ban - Receives notification when someone gets unbanned
ab.notify.tempban - Receives notification[/SPOILER]
ab.ipban.perma - /ipban
ab.ipban.temp - /tempipban
ab.notify.ipban - Receives notification
ab.tempipban.exempt - Immune to tempipban
ab.notify.tempipban - Receives notification
ab.mute.perma - /mute
ab.mute.temp - /tempmute
ab.mute.undo - /unmute
ab.mute.exempt - Immune to mute
ab.notify.mute - Receives notification
ab.undoNotify.mute - Receives notification when someone gets unmuted
ab.notify.tempmute - Receives notification
ab.warn.perma - /warn
ab.warn.temp - /tempwarn
ab.warn.undo - /unwarn
ab.warn.exempt - Immune to warn
ab.notify.warn - Receives notification
ab.undoNotify.warn - Receives notification when someone gets unwarned
ab.notify.tempwarn - Receives notification
ab.note.use - /note
ab.note.undo - /unnote
ab.note.exempt - Immune to receiving notes
ab.notify.note - Receives notification
ab.undoNotify.note - Receives notification when someone gets unnoted
ab.all.undo - /unpunish
ab.warns.own - /warns
ab.warns.other - /warns PLAYER
ab.notes.own - /notes
ab.notes.other - /notes PLAYER
ab.check - /check
ab.check.ip - Also shows IP
ab.changeReason - /change-reason
ab.banlist - /banlist
ab.history - /history
ab.reload - /advancedban reload
ab.help - /advancedban help
ab.systemprefs - /systemprefs
Limit punish duration
By default, the user will be able to punish an infinite amount of time if he has the perms to use the command. You can set the max-punishment-time with ab.tempban/tempmute/tempwarn.dur.X In the config, there is a section called "TempPerms". There you can configure how long which ID will be able to punish for example, you set 1: 3600 the player with the perms ab.tempban.dur.1 will only be able to ban 3600s -> 1h The amount is entered in SEC and if a player has more than one perms the higher numbers override. There is a second explanation in the config.yml.Layered exempt permissions
Servers with a large team and a complex hierarchy might need a more advanced approach to who can ban who:To achieve that, you can assign exempt levels per permissions to users with
ab.TYPE.exempt.X
TEMP = ban, tempban, ipban, tempipban, warn, tempwarn, kick, mute, tempmute X = 1 - 10 (10 being the most powerful)
If you do not provide x, the following is what the permission is interpreted as:
ab.TYPE.exempt = ab.TYPE.exempt.11
Note that exempt permissions only work when the targeted user is online (unless using LuckPerms!)
(Users on the same level cannot punish each other)
Example: Users with ab.ban.exempt cannot be banned by anyone. Users with ab.ban.exempt.4 cannot be banned by someone with ab.ban.exempt.3 but can be banned by someone with ab.ban.exempt.5
Spoiler
If you use this plugin on bungeecord you need to define the permissions in the config.yml of the Bungeecord Server or through a spcial bBungeecord Permission Plugin.The problem with bungeecord permissions is that there are not -Perms so a user with ab. won't have access to all commands. But to simplify the setup there is a setting in the advacnedban config called "EnableAllPermissionNodes" which allows you to use a .all instead of a .* so if enabled a user with ab.all will have access to all AdvancedBan commands. (There is another explanation in the config)
Config.yml:
The config.yml should be self explanatory, but explanations are provided for each option.
config.yml
# AdvancedBan v3 - Coded by Leoko, Update & Maintained by 2vY (hlpdev)
# For each setting, there is a small description.
# Please read each description carefully before changing anything.
# For more information visit: https://www.spigotmc.org/resources/advancedban.8695/
# If set to false all bans will be saved locally in a HSQLDB-Database
UseMySQL: false
MySQL:
IP: localhost
DB-Name: database-name
Username: admin
Password: superSecret
Port: 3306
Properties: 'verifyServerCertificate=false&useSSL=false&useUnicode=true&characterEncoding=utf8'
# Set to false if you want to have only short messages in the console
# On startup and on the shutdown.
DetailedEnableMessage: true
DetailedDisableMessage: true
# Whether to disallow connections to the server when there is an error
# with the database. (e.g.: if your MySQL Server goes down)
LockdownOnError: true
# This will be the default reason to be displayed if none is given
# !! You may use normal color codes or MiniMessage formatting (https://docs.advntr.dev/minimessage/format.html)
DefaultReason: "No reason provided."
# Change this if your server has a different time that your users.
# e.g.: ServerTime: 16:43 | Your Time: 13:43 | TimeDiff has to be set to -3
# You can check the server time with /systemPrefs
TimeDiff: 0
# This commands will be disabled for muted players
# A player wouldn't be able to bypass with eg "/minecraft:me"
MuteCommands:
- 'me'
- 'say'
- 'action'
- 'eaction'
- 'describe'
- 'edescribe'
- 'eme'
- 'w'
- 'm'
- 'pm'
- 'whisper'
- 'ewhisper'
- 'emsg'
- 'msg'
- 'etell'
- 'tell'
- 'er'
- 'r'
- 'reply'
- 'ereply'
- 'ac'
- 'eac'
- 'amsg'
- 'eamsg'
- 'ehelpop'
- 'p msg'
# These players will not be able to get punished in any way
# this also works if the player is offline
# Use Vault to make exempt permissions also work for offline players
ExemptPlayers:
- 'Leoko'
- 'md5'
- 'dutchy1001'
- 'ItzSomebody'
# The date-format which will be used for the %DATE% variable
DateFormat: "MM/dd/yyyy HH:mm"
# This is useful for bungeecord servers or server with permission systems which do not support *-Perms
# So if you enable this you can use ab.all instead of ab.* or ab.ban.all instead of ab.ban.*
# This does not work with negative permissions! e.g. -ab.all would not block all commands for that user.
EnableAllPermissionNodes: false
# If you use external REST-APIs they will have to respond in JSON
# The given APIs will only be used for NAME -> UUID
# For UUID -> NAME will either use the official MojangAPI or the InternFetcher
# To check if you can use the intern fetcher do /systemPerfs and compare your uuid
# to the one you can see online on http://NamesMC.com
# if they are similar we recommend using the InternFetcher
UUID-Fetcher:
# If dynamic it set to true it will override the 'enabled' and 'intern' settings
# and automatically detect the best possible uuid fetcher settings for your server.
# Our recommendation: don't set dynamic to false if you don't have any problems.
Dynamic: true
Enabled: true
Intern: false
REST-API:
URL: "https://api.mojang.com/users/profiles/minecraft/%NAME%?at=%TIMESTAMP%"
Key: "id"
BackUp-API:
URL: "https://api.minetools.eu/uuid/%NAME%"
Key: "id"
# These are the commands that will be performed on warns
# If you skip a number the command from before will be performed
# You can also use non-AdvancedBan-Commands like 'broadcast' or 'clear %PLAYER%
# Variables: %PLAYER%, %REASON%, %COUNT%
# !! You may use normal color codes or MiniMessage formatting (https://docs.advntr.dev/minimessage/format.html)
WarnActions:
3: "kick %PLAYER% &c&oYou have received your 3rd warning!"
4: "tempban %PLAYER% 30m &c&oYou have received your 4th warning!"
5: "tempban %PLAYER% 5h &c&oYou have received your 5th warning!"
6: "tempban %PLAYER% 7d &c&oYou have received your 6th warning!"
7: "tempban %PLAYER% 1mo &c&oYou have received your %COUNT%th warning!"
10: "ban %PLAYER% &c&oYou have received your 10th warning!"
# Here you can create permission-nodes for max-punishment-duration.
# The permission "ab.tempban.dur.1" would allow the player to ban max. for 600sec = 10min
# The permission "ab.tempwarn.dur.2" would allow the player to warn max. for 3600sec = 1h
# You can only create up to 10 perms. The perms can be overridden with "ab.COMMAND.dur.max"
TempPerms:
1: 600
2: 3600
3: 43200
# With this active will show more information in the console, such as errors, if
# the plugin works correctly is not recommended to activate it since it is
# designed to find bugs.
Debug: false
# This is the amount of days that we should keep plugin logs in the plugins/AdvancedBan/logs folder.
# By default is set to 10 days.
Log Purge Days: 10
# Removes the prefix of the plugin in every message.
Disable Prefix: false
# Register commands in a more friendly manner
# Off by default, so AdvancedBan can override /ban from other plugins
# This is a Bukkit-specific option. It has no meaning on BungeeCord
Friendly Register Commands: false
Messages.yml:
The messages.yml file contains all the strings that are presented to the end user. All strings can be changed. All regular color codes can be used, but MiniMessage formatting is preferred.
messages.yml
# AdvancedBan v3 - Coded by Leoko, Update & Maintained by 2vY (hlpdev)
# Normal Color Codes along with MiniMessage (https://docs.advntr.dev/minimessage/format.html) are available in all strings
General:
Prefix: "<bold><red>AdvancedBanX</red> <dark_gray>»</dark_gray></bold>"
NoPerms: "<red>You don't have perms for that!</red>"
LayoutNotFound: "<red>There is no layout called %NAME%</red>"
# This will be the replacement for the %DURATION% variable
TimeLayoutD: "%D%day(s) %H%h %M%min and %S%sec"
TimeLayoutH: "%H%hour(s) %M%min and %S%sec"
TimeLayoutM: "%M%min and %S%sec"
TimeLayoutS: "%S% seconds"
FailedFetch: "<red>Could not fetch the UUID of %NAME%! See console for details.</red>"
Ban:
Usage: "<red>Usage</red> <dark_gray>»</dark_gray> <gray><italic>/ban (-s) [Name] [Reason/@Layout]</italic></gray>"
Done: "<italic><red>%NAME%</red></italic> <gray>was successfully banned!</gray>"
AlreadyDone: "<italic><red>%NAME%</red></italic> <gray>has already been banned!</gray>"
Exempt: "<gray>You are not able to ban <red><italic>%NAME%</italic></red></gray>"
Layout:
- '%PREFIX% <gray>Permanently banned</gray>'
- ''
- ''
- "<red>Reason <dark_gray>»</dark_gray></red> <gray>%REASON%</gray>"
- ''
- '<dark_gray>Unban application in TS or forum</dark_gray>'
- "<yellow>TS-Ip <dark_gray>»</dark_gray></yellow> <red><underline>coming soon</underline></red>"
- "<yellow>Forum <dark_gray>»</dark_gray></yellow> <red><underline>coming soon</underline></red>"
Notification:
- "<red><italic>%NAME%</italic></red> <gray>got banned by</gray> <yellow><italic>%OPERATOR%<italic></yellow>"
- "<gray>For the reason <italic>%REASON%</italic></gray>"
UndoNotification: "<yellow><italic>%OPERATOR%</italic></yellow> <gray>unbanned</gray> <red><italic>%NAME%</italic></red>"
Ipban:
Usage: "<red>Usage</red> <dark_gray>»</dark_gray> <gray><italic>/banip (-s) [Name/IP] [Reason/@Layout]</italic></gray>"
Layout:
- '%PREFIX% <gray>Permanently banned</gray>'
- ''
- ''
- "<red>Reason <dark_gray>»</dark_gray></red> <gray>%REASON%</gray>"
- ''
- '<dark_gray>Unban application in TS or forum</dark_gray>'
- "<yellow>TS-Ip <dark_gray>»</dark_gray></yellow> <red><underline>coming soon</underline></red>"
- "<yellow>Forum <dark_gray>»</dark_gray></yellow> <red><underline>coming soon</underline></red>"
Notification:
- "<red><italic>%NAME%</italic></red> <gray>got banned by</gray> <yellow><italic>%OPERATOR%<italic></yellow>"
- "<gray>For the reason <italic>%REASON%</italic></gray>"
IpNotCashed: "<red>There is no saved IP for <italic>%NAME%!</italic></red>"
Tempban:
Usage: "<red>Usage</red> <dark_gray>»</dark_gray> <gray><italic>/tempban (-s) [Name] [Xmo/Xd/Xh/Xm/Xs/#TimeLayout] [Reason/@Layout]</italic></gray>"
MaxDuration: "<red>You are not able to ban more than %MAX%sec</red>"
Layout:
- '%PREFIX% <gray>Temporarily banned</gray>'
- ''
- ''
- "<red>Reason <dark_gray>»</dark_gray></red> <gray>%REASON%</gray>"
- "<red>Duration <dark_gray>»</dark_gray></red> <gray>%DURATION%</gray>"
- ''
- '<dark_gray>Unban application in TS or forum</dark_gray>'
- "<yellow>TS-Ip <dark_gray>»</dark_gray></yellow> <red><underline>coming soon</underline></red>"
- "<yellow>Forum <dark_gray>»</dark_gray></yellow> <red><underline>coming soon</underline></red>"
Notification:
- "<red><italic>%NAME%</italic></red> <gray>got banned by</gray> <yellow><italic>%OPERATOR%<italic></yellow>"
- "<gray>For the reason <italic>%REASON%</italic></gray>"
- "<gray><italic>This player got banned for <yellow>DURATION%</yellow></italic></gray>"
Tempipban:
Usage: "<red>Usage</red> <dark_gray>»</dark_gray> <gray><italic>/tempipban (-s) [Name/IP] [Xmo/Xd/Xh/Xm/Xs/#TimeLayout] [Reason/@Layout]</italic></gray>"
MaxDuration: "<red>You are not able to ban more than %MAX%sec</red>"
Layout:
- '%PREFIX% <gray>Temporarily banned</gray>'
- ''
- ''
- "<red>Reason <dark_gray>»</dark_gray></red> <gray>%REASON%</gray>"
- "<red>Duration <dark_gray>»</dark_gray></red> <gray>%DURATION%</gray>"
- ''
- '<dark_gray>Unban application in TS or forum</dark_gray>'
- "<yellow>TS-Ip <dark_gray>»</dark_gray></yellow> <red><underline>coming soon</underline></red>"
- "<yellow>Forum <dark_gray>»</dark_gray></yellow> <red><underline>coming soon</underline></red>"
Notification:
- "<red><italic>%NAME%</italic></red> <gray>got banned by</gray> <yellow><italic>%OPERATOR%<italic></yellow>"
- "<gray>For the reason <italic>%REASON%</italic></gray>"
- "<gray><italic>This player got banned for <yellow>DURATION%</yellow></italic></gray>"
Mute:
Usage: "<red>Usage</red> <dark_gray>»</dark_gray> <gray><italic>/mute (-s) [Name] [Reason/@Layout]</italic></gray>"
Done: "<red><italic>%NAME%</italic></red> <gray>was successfully muted!</gray>"
AlreadyDone: "<red><italic>%NAME%</italic></red> <gray>has already been muted!</gray>"
Exempt: "<gray>You are not able to mute <red><italic>%NAME%</italic></red>"
Layout:
- '%PREFIX% <gray>You are permanently muted</gray>'
- "<red>Reason <dark_gray>»</dark_gray></red> <gray>%REASON%</gray>"
Notification:
- "<red><italic>%NAME%</italic></red> <gray>got muted by</gray> <yellow><italic>%OPERATOR%</italic></yellow>"
- "<gray>For the reason <italic>%REASON%</italic></gray>"
UndoNotification: "<yellow><italic>%OPERATOR%</italic></yellow> <gray>unmuted</gray> <red><bold>%NAME%</bold></red>"
Tempmute:
Usage: "<red>Usage</red> <dark_gray>»</dark_gray> <gray><italic>/tempmute (-s) [Name] [Xmo/Xd/Xh/Xm/Xs/#TimeLayout] [Reason/@Layout]</italic></gray>"
MaxDuration: "<red>You are not able to mute more than %MAX%sec</red>"
Layout:
- '%PREFIX% <gray>You are muted for %DURATION%</gray>'
- "<red>Reason <dark_gray>»</dark_gray></red> <gray>%REASON%</gray>"
Notification:
- "<red><italic>%NAME%</italic></red> <gray>got muted by</gray> <yellow><italic>%OPERATOR%</italic></yellow>"
- "<gray>For the reason <italic>%REASON%</italic></gray>"
- "<italic><gray>This player got muted for <yellow>%DURATION%</yellow></gray></italic>"
Warn:
Usage: "<red>Usage</red> <dark_gray>»</dark_gray> <gray><italic>/warn (-s) [Name] [Reason/@Layout]</italic></gray>"
Done: "<red><italic>%NAME%</italic></red> <gray>was successfully warned!</gray>"
Exempt: "<gray>You are not able to warn</gray> <red><italic>%NAME%</italic></red>"
Layout:
- '%PREFIX% <red>You received a warning</red>'
- "<red>Reason</red> <dark_gray>»</dark_gray> <gray>%REASON%</gray>"
- '<gray>You have now <red><italic>%COUNT%</italic></red> warning(s) in total!</gray>'
Notification:
- "<red><italic>%NAME%</italic></red> <gray>got warned by</gray> <yellow><italic>%OPERATOR%</italic></yellow>"
- "<gray>For the reason <italic>%REASON%</italic></gray>"
Note:
Usage: "<red>Usage</red> <dark_gray>»</dark_gray> <gray><italic>/note (-s) [Name] [Reason]</italic></gray>"
Done: "<red><italic>%NAME%</italic></red> <gray>was successfully noted!</gray>"
Exempt: "<gray>You are not able to note</gray> <red><italic>%NAME%</italic></red>"
Notification:
- "<red><italic>%NAME%<italic></red> <gray>got noted by</gray> <yellow><italic>%OPERATOR%</italic></yellow>"
- "<gray>For the reason</gray> <italic>%REASON%</italic>"
Tempwarn:
Usage: "<red>Usage</red> <dark_gray>»</dark_gray> <gray><italic>/tempwarn (-s) [Name] [Xmo/Xd/Xh/Xm/Xs/#TimeLayout] [Reason/@Layout]</italic></gray>"
MaxDuration: "<red>You are not able to warn more than %MAX%sec</red>"
Layout:
- '%PREFIX% <red>You received a temp-warning</red>'
- "<red>Reason</red> <dark_gray>»</dark_gray> <gray>%REASON%</gray>"
- "<red>It will pass in</red> <dark_gray>»</dark_gray> <yellow>%DURATION%</yellow>"
- '<gray>You have now <red><italic>%COUNT%</italic></red> warning(s) in total!</gray>'
Notification:
- "<red><italic>%NAME%</italic></red> <gray>got temp-warned by</gray> <yellow><italic>%OPERATOR%</italic></yellow>"
- "<gray>For the reason <italic>%REASON%</italic></gray>"
- "<gray>This warning will pass in <italic>%DURATION%</italic></gray>"
Kick:
Usage: "<red>Usage</red> <dark_gray>»</dark_gray> <gray><italic>/kick (-s) [Name] [Reason/@Layout]</italic></gray>"
Done: "<red><italic>%NAME%</italic></red> <gray>was successfully kicked!</gray>"
NotOnline: "<red><italic>%NAME%</italic></red> <gray>is not online!</gray>"
Exempt: "<gray>You are not able to kick</gray> <red><italic>%NAME%</italic></red>"
Layout:
- '%PREFIX% <gray>You got kicked</gray>'
- ''
- "<red>Reason</red> <dark_gray>»</dark_gray> <gray>%REASON%</gray>"
- ''
Notification:
- "<red><italic>%NAME%</italic></red> <gray>got kicked by</gray> <yellow><italic>%OPERATOR%<italic></yellow>"
- "<gray>For the reason <italic>%REASON%</italic></gray>"
UnBan:
Usage: "<red>Usage</red> <dark_gray>»</dark_gray> <gray><italic>/unban [Name/IP]</italic></gray>"
NotPunished: "<red><italic>%NAME%</italic> is not banned!</red>"
Done: "<green><italic>%NAME%</italic></green> <gray>was successfully unbanned!</gray>"
Notification: "<yellow><italic>%OPERATOR%</italic></yellow> <gray>unbanned</gray> <red><italic>%NAME%</italic></red>"
UnMute:
Usage: "<red>Usage</red> <dark_gray>»</dark_gray> <gray><italic>/unmute [Name]</italic></gray>"
NotPunished: "<red><italic>%NAME%</italic> is not muted!</red>"
Done: "<green><italic>%NAME%</italic></green> <gray>was successfully unmuted!</gray>"
Notification: "<yellow><italic>%OPERATOR%</italic></yellow> <gray>unmuted</gray> <red><italic>%NAME%</italic></red>"
UnWarn:
Usage: "<red>Usage</red> <dark_gray>»</dark_gray> <gray><italic>/unwarn [ID] or /unwarn clear [Name]</italic></gray>"
NotFound: "<red>Could not find warning #%ID%</red>"
Done: "<gray>Warn <green><italic>#%ID%</italic></green> was successfully deleted!</gray>"
Notification: "<yellow><italic>%OPERATOR%</italic></yellow> <gray>unwarned</gray> <red><italic>%NAME%</italic></red>"
Clear:
Empty: "<red><italic>%NAME%</italic></red> <gray>has no warnings!</gray>"
Done: "<gray>Cleared <green><italic>%COUNT%</italic></green> warnings</gray>"
UnNote:
Usage: "<red>Usage</red> <dark_gray>»</dark_gray> <gray><italic>/unnote [ID] or /unnote clear [Name]</italic></gray>"
NotFound: "<red>Could not find note #%ID%</red>"
Done: "<gray>Note <green><italic>#%ID%</italic></green> was successfully deleted!</gray>"
Notification: "<yellow><italic>%OPERATOR%</italic></yellow> <gray>unnoted</gray> <red><italic>%NAME%</italic></red>"
Clear:
Empty: "<red><italic>%NAME%</italic></red> <gray>has no notes!</gray>"
Done: "<gray>Cleared <green><italic>%COUNT%</italic></green> notes</gray>"
UnPunish:
Usage: "<red>Usage</red> <dark_gray>»</dark_gray> <gray><italic>/unpunish [ID]</italic></gray>"
NotFound: "<red>Could not find punishment #%ID%</red>"
Done: "<gray>Punishment <green><italic>#%ID%</italic></green> was successfully deleted!</gray>"
Banlist:
Usage: "<red>Usage</red> <dark_gray>»</dark_gray> <gray><italic>/banlist (Page)</italic></gray>"
OutOfIndex: "<red>There is no page %PAGE%!</red>"
NoEntries: "<red><italic>There are no entries</italic></red>"
Header:
- "%PREFIX% <gray>Banlist:</gray>"
- "<red><italic>Player/IP</italic></red> <dark_gray>|</dark_gray> <yellow><italic>Duration</italic></yellow> <dark_gray>|</dark_gray> <gray><italic>Banned by</italic></gray>"
- "<red><italic>Type</italic></red> <dark_gray>></dark_gray> <gray><italic>Reason</italic></gray>"
- "&7"
Entry:
- "<dark_gray>[<yellow>%DATE%</yellow>]</dark_gray>"
- "<red>%NAME%</red> <dark_gray>|</dark_gray> <yellow>%DURATION%</yellow> <dark_gray>|</dark_gray> <gray>%OPERATOR%</gray>"
- "<red>%TYPE%</red> <dark_gray>|</dark_gray> <gray><italic>%REASON%</italic></gray>"
- ""
Footer: "<gray>Page <yellow><italic>%CURRENT_PAGE%</italic></yellow> of <yellow><italic>%TOTAL_PAGES%</italic></yellow> <dark_gray>|</dark_gray> Listed bans: <yellow><italic>%COUNT%</italic></yellow></gray>"
PageFooter: "<gray>Use <yellow><italic>/banlist %NEXT_PAGE%</italic></yellow> to see the next page</gray>"
History:
Usage: "<red>Usage</red> <dark_gray>»</dark_gray> <gray><italic>/history [Name/IP] (Page)</italic></gray>"
OutOfIndex: "<red>There is no page %PAGE%!</red>"
NoEntries: "<red><italic>Could not find the history of %NAME%</italic></red>"
Header:
- "%PREFIX% <gray>History for %NAME%:</gray>"
- "<red><italic>Name</italic></red> <dark_gray>|</dark_gray> <yellow><italic>Duration</italic></yellow> <dark_gray>|</dark_gray> <yellow><italic>Operator</italic></yellow>"
- "<red><italic>Type</italic></red> <dark_gray>></dark_gray> <gray><italic>Reason</italic></gray>"
- ""
Entry:
- "<dark_gray>[<yellow>%DATE%</yellow>]</dark_gray>"
- "<red>%NAME%</red> <dark_gray>|</dark_gray> <yellow>%DURATION%</yellow> <dark_gray>|</dark_gray> <gray>%OPERATOR%</gray>"
- "<red>%TYPE%</red> <dark_gray>|</dark_gray> <gray><italic>%REASON%</italic></gray>"
- ""
Footer: "<gray>Page <yellow><italic>%CURRENT_PAGE%</italic></yellow> of <yellow><italic>%TOTAL_PAGES%</italic></yellow> <dark_gray>|</dark_gray> Total entries: <yellow><italic>%COUNT%</italic></yellow></gray>"
PageFooter: "<gray>Use <yellow><italic>/history %NAME% %NEXT_PAGE%</italic></yellow> to see the next page</gray>"
Warns:
Usage: "<red>Usage</red> <dark_gray>»</dark_gray> <gray><italic>/warns [Name] (Page) <red>or</red> /warns (Page)</italic></gray>"
OutOfIndex: "<red>There is no page %PAGE%!</red>"
NoEntries: "<red><italic>%NAME% has no warnings yet</italic></red>"
Header:
- "%PREFIX% <gray>Warnings for %NAME%:</gray>"
- "<red><italic>Name</italic></red> <dark_gray>|</dark_gray> <yellow><italic>Duration</italic></yellow> <dark_gray>|</dark_gray> <yellow><italic>Operator</italic></yellow>"
- "<red><italic>#ID</italic></red> <dark_gray>></dark_gray> <gray><italic>Reason</italic></gray>"
- ""
Entry:
- "<dark_gray>[<yellow>%DATE%</yellow>]</dark_gray>"
- "<red>%NAME%</red> <dark_gray>|</dark_gray> <yellow>%DURATION%</yellow> <dark_gray>|</dark_gray> <gray>%OPERATOR%</gray>"
- "<red><bold>#%ID%</bold></red> <dark_gray>></dark_gray> <gray><italic>%REASON%</italic></gray>"
- ""
Footer: "<gray>Page <yellow><italic>%CURRENT_PAGE%</italic></yellow> of <yellow><italic>%TOTAL_PAGES%</italic></yellow> <dark_gray>|</dark_gray> Active warnings: <yellow><italic>%COUNT%</italic></yellow></gray>"
PageFooter: "<gray>Use <yellow><italic>/warns %NAME% %NEXT_PAGE%</italic></yellow> to see the next page</gray>"
WarnsOwn:
OutOfIndex: "<red>There is no page %PAGE%!</red>"
NoEntries: "<red><italic>You has no warnings yet</italic></red>"
Header:
- "%PREFIX% <gray>Your warnings:</gray>"
- "<yellow><italic>Duration</italic></yellow> <dark_gray>|</dark_gray> <gray><italic>Warned by</italic></gray>"
- "<red><italic>#ID</italic></red> <dark_gray>></dark_gray> <gray><italic>Reason</italic></gray>"
- ""
Entry:
- "<dark_gray>[<yellow>%DATE%</yellow>]</dark_gray>"
- "<red>%NAME%</red> <dark_gray>|</dark_gray> <yellow>%DURATION%</yellow> <dark_gray>|</dark_gray> <gray>%OPERATOR%</gray>"
- "<red><bold>#%ID%</bold></red> <dark_gray>></dark_gray> <gray><italic>%REASON%</italic></gray>"
- ""
Footer: "<gray>Page <yellow><italic>%CURRENT_PAGE%</italic></yellow> of <yellow><italic>%TOTAL_PAGES%</italic></yellow> <dark_gray>|</dark_gray> Active warnings: <yellow><italic>%COUNT%</italic></yellow></gray>"
PageFooter: "<gray>Use <yellow><italic>/warns %NEXT_PAGE%</italic></yellow> to see the next page</gray>"
Notes:
Usage: "<red>Usage</red> <dark_gray>»</dark_gray> <gray><italic>/notes [Name] (Page) <red>or</red> /notes (Page)</italic></gray>"
OutOfIndex: "<red>There is no page %PAGE%!</red>"
NoEntries: "<red><italic>%NAME% has no notes yet</italic></red>"
Header:
- ""
- "%PREFIX% <gray>Notes for %NAME%:</gray>"
- ""
Entry:
- "<gray>%DATE% <dark_gray>|</dark_gray> By <italic>%OPERATOR%</italic> (<red>#%ID%</red>)</gray>"
- "<dark_gray>></dark_gray> <yellow>%REASON%</yellow>"
- ""
Footer: "<gray>Page <yellow><italic>%CURRENT_PAGE%</italic></yellow> of <yellow><italic>%TOTAL_PAGES%</italic></yellow> <dark_gray>|</dark_gray> Notes: <yellow><italic>%COUNT%</italic></yellow></gray>"
PageFooter: "<gray>Use <yellow><italic>/notes %NAME% %NEXT_PAGE%</italic></yellow> to see the next page</gray>"
NotesOwn:
OutOfIndex: "<red>There is no page %PAGE%!</red>"
NoEntries: "<red><italic>You has no notes yet</italic></red>"
Header:
- ""
- "%PREFIX% <gray>Your notes:</gray>"
- ""
Entry:
- "<gray>%DATE% <dark_gray>|</dark-gray> By <italic>%OPERATOR%</italic> (<red>#%ID%</red>)</gray>"
- "<dark_gray>></dark_gray> <yellow>%REASON%</yellow>"
- ""
Footer: "<gray>Page <yellow><italic>%CURRENT_PAGE%</italic></yellow> of <yellow><italic>%TOTAL_PAGES%</italic></yellow> <dark_gray>|</dark_gray> Notes: <yellow><italic>%COUNT%</italic></yellow></gray>"
PageFooter: "<gray>Use <yellow><italic>/notes %NEXT_PAGE%</italic></yellow> to see the next page</gray>"
ChangeReason:
Usage: "<red>Usage</red> <dark_gray>»</dark_gray> <gray><italic>/change-reason [ID or ban/mute USER] [New reason]</italic></gray>"
Done: "<gray>Punishment <green><italic>#%ID%</italic></green> has successfully been updated!</gray>"
NotFound: "<red>Sorry we have not been able to find this punishment</red>"
Check:
Usage: "<red>Usage</red> <dark_gray>»</dark_gray> <gray><italic>/check [Name]</italic></gray>"
Header: "<gray>Checking <yellow><italic>%NAME%</italic></yellow> <dark_gray>(%CACHED%)</dark_gray></gray>"
UUID: "<red>UUID</red> <dark_gray>»</dark_gray> <gray>%UUID% <dark_gray>(%CACHED%)</dark_gray></gray>"
IP: "<red>IP</red> <dark_gray>»</dark_gray> <gray>%IP% <dark_gray>(%CACHED%)</dark_gray></gray>"
Geo: "<red>Country</red> <dark_gray>»</dark_gray> <gray>%LOCATION%</gray>"
Mute: "<red>Muted</red> <dark_gray>»</dark_gray> <gray>%DURATION%</gray>"
MuteReason: " <red>Reason</red> <dark_gray>»</dark_gray> <gray>%REASON%</gray>"
Ban: "<red>Banned</red> <dark_gray>»</dark_gray> <gray>%DURATION%</gray>"
BanReason: " <red>Reason</red> <dark_gray>»</dark_gray> <gray>%REASON%</gray>"
Warn: "<red>Warns</red> <dark_gray>»</dark_gray> <gray>%COUNT%</gray>"
Note: "<red>Notes</red> <dark_gray>»</dark_gray> <gray>%COUNT%</gray>"
NotFound: "<red>Sorry we have not been able to find %NAME%"
Cached: "<green><italic>cached<italic></green>"
NotCached: "<red><italic>not cached</italic></red>"
Layouts.yml:
Messages:
Here, you can define predefined reasons which can be used for (temp-)banning/muting/warning & kicking. You can use them by typing @layoutname instead of the reason. You can also provide a reason after defining the template which will replace the %REASON% variable in the layout.
Time:
Here you can define time layouts which can be used for temporary punishments. You can use them by typing #layoutname instead of the duration. The time increases every time a player gets punished with the same layout.
layouts.yml
# AdvancedBan v3 - Coded by Leoko, Update & Maintained by 2vY (hlpdev)
# Normal Color Codes along with MiniMessage (https://docs.advntr.dev/minimessage/format.html) are available in all strings
# The default layouts are in the Message.yml file!
# Message-Layouts can not only be used for bans but also for mutes and warns
# Currently available variables:
# %OPERATOR% - The user who dealt the punishment.
# %REASON% - Reason for punishment.
# %PREFIX% - Prefix set in Message.yml.
# %DURATION% - Amount of time left before a punishment expires (will be -1 for permanent punishments).
# %DATE% - Date punishment was issued on.
# %ID% - Displays the punishment ID (i.e. first punishment = 0, second punishment = 1, third punishment = 2, etc.)
# %HEXID% - Displays the punishment ID in base 16.
# For warns you have also the variable %COUNT% which will be
# replaced with the current amount of warns the player already received
# Example usage: /ban Leoko @ExampleLayout
Message:
ExampleLayout:
- '%PREFIX% &7Banned for Hacking'
- '&c&oBanned by %OPERATOR%'
- '&7'
- "&cIt seems like you are using a"
- "&chacked client please disable it!"
- "&cUnban in &8» &7%DURATION%"
- '&7'
- '&8Unban application in TS or forum'
- "&eTS-Ip &8» &c&ncoming soon"
- "&eForum &8» &c&ncoming soon"
ExampleLayout2:
- '%PREFIX% &7Banned for offensive language'
- '&7'
- "&cWe don't tolerate swearing on our server!"
- "&cYou got banned for the word '%REASON%'" # You can even use reasons in message layouts
# You would use this time-layout for example like this: "/tempban Leoko #ExampleLayout Hacking in FFA"
# Or with "/tempwarn Leoko #ExampleLayout Advertising" or even "/tempwarn Leoko #ExampleLayout No capslock please"
# You can also combine this with MessageLayouts like "/tempban Leoko #ExampleLayout @Hacking"
Time:
ExampleLayout:
- '30m'
- '2h'
- '1d'
- '1w'
- '1mo'
- '2mo'
- '4mo'
- 'perma'
- Ban-, Kick-, Mute- and Warn-System
- Excellent performance
- BungeeCord & Bukkit/Spigot/Paper plugin all-in-one
- Player history
- Advanced UUID Support
-
- Internal or External UUID fetcher
-
- Backup UUID fetcher if Mojang servers are offline
- MySQL or local embedded HyperSQL for storage
- Fully customizable
- Multiple lines in Kick and Ban messages
- Predefined reasons
- Automatic time calculation [1st-tempban -> 1h | 2nd-tempban -> 6h, etc]
- Custom time offset [change the timezone if the server has incorrect time]
- Automatic warn actions
- Check command [UUID, IP, Country, Ban/Mute/Warn]
- Full MiniMessage formatting support in all layouts & messages
If you have any problems with the plugin, make sure to check the console for any error messages with instructions on how to solve the issue. If you need additional support, please post an issue in our GitHub repository here.
We bStats for recording our metrics which tracks anonymous information about your server (player count, server version, online-mode, etc). The graph below may not be populated as this plugin build has just been released.
The API requires the AdvancedBanX plugin to be installed on the server. When making an addon, make sure to make it clear that the main AdvancedBanX plugin is also required!
Maven
<repositories>
...
<repository>
<id>hnt8</id>
<url>https://java.hnt8.net</url>
</repository>
...
</repositories>
<dependencies>
...
<dependency>
<groupId>net.hnt8.advancedban</groupId>
<artifactId>AdvancedBanX</artifactId>
<version>3.0.6</version>
<scope>provided</scope>
</dependency>
...
</dependencies>
90% of ad revenue goes to creators
Support creators and Modrinth ad-free with Modrinth+