LiteBans icon

LiteBans -----

A complete, modern, cross-server banning solution (Spigot, Bungee, Velocity).




Improvements:
  • Added automatic banning of linked accounts. The new `ban_alts` option accepts four different values with escalating levels of enforcement: Disabled, Enabled, Enhanced, and Extreme. By default, it is disabled.
  • Added configurable filter duration for linked accounts (`dupeip_scan_filter_duration: 7d`), which is intended to prevent or reduce false positives by ensuring that only recent IP addresses are scanned with /alts, or when banning accounts automatically as mentioned above.
  • Added template flags, which can be used to automatically add command flags and server scopes to specific templates and/or ladder steps. For example, you can make a template always execute global and silent punishments by setting `flags: '-g -s'`.
  • Added support for webhook inline fields for embeds (optional).
  • Added /checkwarn command which allows you to check specific warnings by player name or UUID.
  • Added /warnlist command which allows you to scroll through all warnings.
  • Added unwarn messages & entries to /history and /staffhistory.
  • Added `online_mode` option to config.yml (to specify whether players who have never joined the server before should be handled as premium or non-premium players).
  • Added `mode:deactivate` and exclude options for `/litebans reset-database`.
  • (BungeeCord) Optimized ServerConnectEvent listener - database queries will no longer be performed in this context under any conditions.
Fixes:
  • Fixed unban/unmute/unwarn webhooks inheriting silent state from the punishment instead of checking whether the operation is silent.
  • Fixed hex colours not working in lockdown kick messages - reconnect messages unaffected.
  • Fixed variables such as `playerBans` not working in webhook embed messages.
Minor improvements:
  • Added new reset_database messages to messages.yml.
  • Added messages for unsuccessful loading of templates.yml. If templates.yml is invalid, you will receive a message each time commands are used, as a reminder to fix your configuration.
  • Added error handling for incorrectly configured URLs from webhooks.yml.
  • When a name-banned or name-muted player attempts to join, their punishment ID will be logged to console.
  • The `litebans cleariphistory` command has been replaced with the `litebans unlink` command which serves the same purpose.
  • When the console receives a click event JSON message, the command or URL will be sent to console with the message.
  • Chat event priority used by LiteBans is now low (instead of lowest) on all platforms.
Minor fixes:
  • Fixed /banlist and /mutelist displaying one less page (page #0).
  • Fixed unban queueing not unbanning accounts when `ban_names` is enabled, a player has a banned name and the UUID joining the server was not banned.
  • Fixed permission error message not being updated on reload under Bungee.
  • Fixed hex colours not being translated for permission error messages sent by the platform.
  • Fixed bracket character being added to `start_no_ip` dupeip-on-join messages (/alts unaffected).
  • Fixed a harmless warning message on newly created MariaDB databases.
  • Fixed timezone offsets not applying correctly to $timeSince in unban/unmute/unwarn messages.
  • Fixed an error caused by empty commands specified in the configuration (none by default).
  • Fixed an error caused by server names or scopes that are configured or specified above the already documented 32 character limit.

2.16.1:


Fixes:
  • Fixed login timestamps not being updated if the IP is unchanged (missing alts fix).
  • Fixed /alts or /dupeip not showing the original account if they haven't joined within `dupeip_scan_filter_duration`.
  • Fixed webhook routes handling 'on' / 'true' as an invalid URL.
  • Fixed webhook embed messages interpreting colour codes & hex colours which made it impossible to tag channels.
  • Fixed a mute bypass involving cheat clients (Velocity only).
  • Fixed some notifications being throttled indefinitely (until next reload/restart) if throttling is enabled and the plugin was reloaded.
Minor fixes:
  • Fixed /banlist sometimes showing an empty page (only if the number of bans is divisible by the number shown per page) since version 2.16.
  • Fixed some caches being kept a few hours longer than intended if the plugin was reloaded.

2.16.2:



Fixes:
  • Fixed error on warning modification (`/warn -m`) for players that lack `litebans.group.unlimited` or similar permissions. (Console unaffected)
  • Fixed cross-server kicks (via /kick command only) not working as intended on Bedrock users.
  • Fixed messages combining hover text and click events (run/url) having bugged text. (Velocity unaffected)
Minor improvements:
  • Support MySQL 9.x for creating database indexes (if you recently upgraded from MySQL 8.x, the indexes have likely been created already). This does not impact MariaDB.
  • When excluding tables from database reset, the history and config tables will be kept.
  • Added additional data limits to prevent errors from incorrect usage of commands. For example, usernames larger than the username character limit will be truncated.
  • Embeds can now have no content if inline fields are specified.
  • Support player variables in GeoIP messages.
  • If delete_warnings_after_action is enabled, warnings will only be cleared upon the final action being executed rather than the first.
  • If messages.yml failed to load, you will be notified of this each time a command is used, not only on startup.
  • Improved robustness of table upgrade check on servers that cannot upgrade normally under very rare, unknown circumstances (possibly DB crash or hardware error related).
Minor fixes:
  • Fixed reset chat colour (&r) appearing specifically in webhook fields when referencing the executor variable.
  • Fixed chat colours not being removed (generally from prefixes/suffixes) specifically in embed messages.
  • Fixed random ID hex colour prevention (#$id) applying to webhook embed messages, which do not use colours.
  • Fixed colour codes not being removed in webhook embed inline fields.
  • Fixed IP addresses which have never joined the server before being displayed as #offline# instead of ip_hidden.

2.16.3:

Important fixes:
  • Fixed new global punishments not being applied correctly since version 2.16.2 (Velocity unaffected)
Fixes:
  • Fixed proxy_switch_banned chat messages not being delivered under Bungee for server scoped bans.

2.16.4:

Fixes:
  • Fixed `litebans reset-database` not working since version 2.16.2.
  • Fixed disabled webhooks using the default webhook on Bungee/Velocity.
Minor improvements:
  • The `litebans reset-database` confirm message now quotes all arguments for confirmation, not just the server scope.
  • Added warning message for unrecognized settings (ban_alts)
Minor fixes:
  • Fixed hex colour codes not being removed in webhook messages.
----------, Sep 30, 2024

Improvements:
  • Webhook routes: Added `webhooks.yml` - this configuration allows you to set webhook URLs for each type of punishment. For example, you can send silent mutes to #silent-mutes and temporary IP bans to #tempipbans.
  • Silent punishments and alts scanning (dupeip) notifications will now be broadcasted using Discord Webhooks, if configured to do so.
Fixes:
  • Fixed /lockdown error under Spigot since version 2.14 (Folia/Bungee/Velocity unaffected)
  • Fixed /lockdown using `kick_message_global` instead of `kick_message` under Bungee/Velocity for local scopes.
  • Fixed /unban returning a permission error message if the target is not currently banned and group weights are enabled.
  • Fixed exempt weights being checked for non-player non-console senders such as rcon.
  • Fixed limit parameter in history commands being ignored if a type was specified.
  • Fixed `litebans reset-database` requiring a reload or server restart if the global scope was cleared since version 2.14.
  • Fixed pinging roles in Discord embed messages. (`<@&roleID>`)
Minor improvements:
  • Improved performance of template group calculations.
  • Exempt bypass permissions will be automatically enabled when group weights are enabled, as these are only required to remove or modify punishments issued by console and are not checked when banning exempt players.
  • Added slow database detection & warnings ("Database is slow! Establishing connection took 70 seconds.")
  • Raised the default pool timeout from 25 seconds to 95 seconds. As some people are stuck with database servers that only work approximately half of the time, this will give LiteBans the time to reconnect when your server goes down for one minute every two minutes.
  • Improved message consistency: replaced instances of `$bannedPlayer`/`$mutedPlayer`/`$warnedPlayer` in messages.yml with `$playerDisplayName`. The former variables will be migrated automatically.
  • Renamed `round_down` option to `reduce_to_limit`.
  • Further simplified database error messages.
  • Added options to disable the /warn and /lockdown commands.
  • Improved sync performance for databases that have 1000+ servers.
Minor fixes:
  • Fixed the `--` flag not working correctly in certain commands.

2.15.1:

Fixes:
  • Fixed specific webhook routes (ban, mute, warn, kick) always using the default webhook.
  • Fixed mute notifications being sent to players if local messages are disabled. This issue only causes double mute messages if you have LiteBans installed under both Velocity and the backend servers.
  • Fixed unban permissions being required to modify punishments.
Minor improvements:
  • Added hex colour support to lockdown messages.
  • Unwarning players will no longer remove the database entry.
Minor fixes:
  • Fixed the `/litebans servers` command not showing newly installed servers until they have been reloaded for the first time, due to an optimization made in version 2.15.
----------, Mar 27, 2024

Screenshot_2024-01-29_11-37-10.png

Improvements:
  • Added customizable Discord webhook embed messages.
  • When exempt group weights are enabled, punishments created by higher groups cannot be removed or modified by lower groups.
  • Added `litebans.notify.broadcast.<server>.<type>` permissions - this allows you to set server and/or type specific broadcasts for specific groups, and the local scope is also checked, which allows you to set up broadcasts to only display on their origin server. For more details, have a look at Notify Permissions.
  • Server switch message for banned players (proxy_switch_banned) will now send template messages instead, if applicable.
  • The /history & /staffhistory commands now support listing specific types - for example, you can now view mute history via `/history <user> mutes`.
  • Added templateName & templateStep variables to messages.yml.
Fixes:
  • Fixed a cooldown bypass exploit.
  • Fixed JSON features such as hover text not working on recent Velocity builds (#306 and above) due to upstream changes (minor version API breakage).
  • Fixed template group ladders not being able to specify messages.
  • Fixed server-scoped warnings being marked as sent if the player is online on a server the scoped warning is not applicable to while LiteBans is installed under a proxy instance.
  • Fixed `/litebans servers` command not giving any results.
  • Fixed overridden punishments showing as removed by the one who originally created the punishment instead of the one overriding it.
  • Fixed variables like playerName not working specifically in the `banned_message_base` message.
API changes:
LiteBans API version 0.5.0 has been released.
  • Added several methods for retrieving punishment data from the database by punishment ID or by UUID/IP with server scopes.
  • Added `getPlayerName(UUID)` method to retrieve the last player name for a given UUID.
Minor improvements:
  • The `bungee_switch_banned` message has been renamed & split into two messages: proxy_switch_banned & proxy_switch_tempbanned.
  • Added socket timeout error detection - this will indicate if your database stopped responding or slowed down significantly, without logging unnecessary details.
  • Warnings now require a reason to be specified, rather than being left blank when unspecified.
  • The banlist and mutelist commands will now only display active punishments by default.
  • Added $commandArgs variable for capturing what the sender originally typed ($command $commandArgs).
  • Resetting the database globally via `/litebans reset-database server:global` will now also clear login records (IP history).
  • Messages with "#$idRandom" will now display the ID in all cases.
Minor fixes:
  • Fixed numeric usernames causing templates to not work on them if the numeric named player has never joined the server before.
  • Fixed empty broadcast messages causing errors with Discord webhooks (none are blank by default).
  • Fixed `notify.muted_player_chat` option not taking effect if disabled.
  • Fixed a harmless warning message when running versions < 1.19.

2.14.1:

Fixes:
  • Fixed webhook ban embed being sent for kick broadcasts.
  • Fixed hex colors not working in certain messages (mainly ones without variables) since version 2.14.
Minor fixes:
  • Fixed a very rare Bungee error when sending messages to players that have disconnected before the message could be sent.
  • Fixed a startup error with unknown cause which could not be replicated and doesn't seem to occur for most users.
----------, Jan 29, 2024

Important changes:
  • The clearchat, mutechat, and togglechat commands have been removed due to being out of scope. If you are relying on these commands, you will need to find a chat management plugin that provides them.
Improvements:
  • Discord Webhook Support has been added. To enable, see wiki.
  • Template Groups have been added. These allow for templates to share progression with other templates using decimal weights (each template can be weighted differently). Example shown on wiki.
  • Added exempt group weight support - if you enable the new `use_group_weights` option, players with a lower group weight will be unable to punish higher groups. Currently this feature supports LuckPerms, and may support other permission systems later.
  • Added --modify flag (-m), which lets you alter the reason and/or duration of an active punishment without creating a new one! Example: `/ban --modify BannedPlayer new-ban-reason 10d`
  • Added `effective_ipban_duration` option, which is useful for dynamic IP addresses with frequent IP bans. This gives you the ability to define an upper bound, whereafter IP bans will automatically become regular account bans, no longer affecting the IP address involved.
  • The /checkban command will now automatically run `/litebans allow check` if the player was IP banned, which will indicate whether the IP-banned player can still join the server.
  • Added /mutelist command.
  • Added support for alternative hex colour format: "&#AABBCC"
  • Improved reliability of Spigot command blocking for servers running 1.19+.
  • Mutes are now also checked across other accounts with the same username, if `ban_names` is enabled.
  • When `punish_ip` is enabled, only the base permissions (e.g. `litebans.ban`) will be required to use commands, for example, /ban will no longer require `litebans.ipban`.
  • Added three new security options for restricting functions to console - prunehistory, modify, and sender_custom. `prunehistory` prevents players from using /prunehistory, `modify` prevents players from using `--modify`, and `sender_custom` prevents players from using --sender flags. Only `sender_custom` is enabled by default.
Fixes:
  • Fixed unban/unmute/unwarn-by-ID affecting the last active punishment of the targeted player instead of the specified one.
  • Fixed ServerListPlus integration not working under Velocity.
  • Fixed players that have been IP-banned and permitted to join the server via `/litebans allow`, and then muted, not being muted when they re-join the server after the mute has taken place.
  • Group limits specified as permanent will now be checked first rather than last. This allows for specific groups to have permanent limits without requiring other permissions such as `litebans.unlimited.ban`.
  • Templates will no longer be matched in commands if a punishment reason is typed before it (the template must be specified first).
Minor improvements:
  • Added `litebans.server.<server>.<type>` permissions (e.g. `litebans.server.global.ban`), which allows you to separately grant global bans and global mutes, for example.
  • Improved accuracy of `ban_names` option in config.yml when players have multiple UUIDs per username, which can happen in various rare circumstances - for example, offline-mode (Geyser) + offline-mode (Java Edition) + online-mode account would grant three separate UUIDs for the same username.
  • $id & $idRandom will no longer become hex colours when `#` is followed by a >=6 digit ID (e.g. `#$idRandom` -> `#ABC123`)
  • Added $target variable for iphistory.error_no_history message.
  • Improved performance of database queries by ensuring that more queries are cached.
Minor fixes:
  • Fixed error when using `/litebans allow` on an IP address which has never joined the server before.
  • Fixed UnsupportedOperationException errors while disconnected from database.
  • Fixed a ClassCastException when loading malformed/invalid configurations.
  • Fixed a LiteBans import error with unknown cause, likely very rare as it could not be replicated during regular testing.

2.13.1:

Improvements:
  • Discord webhook will now show silent broadcasts if punishments are silent by default.
Fixes:
  • Fixed all commands being blocked for muted players under Spigot 1.19+ since version 2.13.
  • Fixed Discord webhooks not working under Bungee/Velocity.

2.13.2:

Fixes:
  • Fixed circular dependency with AuthMe/Essentials since version 2.13 due to a fix for tab completion issue caused by Essentials.
  • Fixed a bug that caused players to sometimes receive a duplicate broadcast message since version 2.13.
  • Fixed /unmute not taking effect on online players since version 2.13. Expiration unaffected.
Minor improvements:
  • Added "user:" targeting prefix which can be used in /checkban to specify that the target is a username and not an ID when the specified target is a number that also matches the ID of an existing active punishment. Example: `/checkban user:1234`

2.13.3:

Improvements:
  • Discord Webhook will now escape markdown characters to prevent undesired formatting.
Fixes:
  • Fixed ServerListPlus integration not working under Velocity.
  • Fixed MySQL database error (MariaDB unaffected by default) with the ban_names option enabled since version 2.13.
  • Fixed blank table prefix being considered invalid as of version 2.13.
----------, Nov 3, 2023

Improvements:
  • Added Folia support - disclaimer: since Folia is a work-in-progress, things could break with future updates of Folia, but I will try my best to keep everything up to date as development progresses.
  • Added LuckPerms prefix, suffix, and exempt support for Bungee & Velocity. Variables like executorPrefix and executorSuffix from messages.yml can now be used under a proxy instance of LiteBans, and offline players will be exempt from punishments if they have the required permissions.
  • Added IP templates - any template with "ip_template: true" set in templates.yml will track each template ladder across all accounts on the same IP. All bans under an IP template will automatically become IP bans.
  • Added new variables for messages.yml - $playerBans, $playerMutes, $playerWarnings, $playerKicks. These variables allow you to indicate the total number of punishments for each type tied to the affected player.
  • Added template requirements for group limits - if you set `require_template: true` for a group, players from that group must specify a template in order to create a punishment, and will receive an error message otherwise.
Since this is group-based, you can have lower groups that are template-restricted and higher groups that can create custom punishments.
  • Updated the AdvancedBan importer for the latest release to support tempbans, IP bans, and punishment history.
Fixes:
  • Fixed Bedrock usernames starting with "*" being considered wildcard IP addresses by the new `ipban_command` security option that prevents players from placing wildcard IP bans.
  • Fixed certain randomized IDs not working correctly with /checkban, /checkmute, or /unban.
  • Fixed the new JSON features (Run Command, Open URL) requiring "litebans.json.hover_text" permission even if the message has no hover text.
  • Fixed a startup error which could rarely occur under certain conditions due to a bug in older server versions (1.7 <-> 1.10.2 affected).
API changes:
  • Added RandomID class, which allows you to convert random ID strings into numbers and vice versa.
  • Added a method to Entry which returns the random ID of the punishment.
Minor improvements:
  • Added support for viewing IP bans matching no specific account (e.g. wildcard IP bans) in /history & /staffhistory. By default, only console can view the IP addresses, and players will see ip_hidden instead of the actual IP address.
  • Added permission node `litebans.newline` for using newlines ("\n") in punishment reasons.
  • Small performance improvements for some commands (/kick, /dupeip, /history, /staffhistory, /checkban, and more).
  • The "-g" flag (shortcut for "server:*") now works with all commands that accept server scopes.
Minor fixes:
  • Fixed variables such as totalBans not working in /banlist (not configured by default).
  • Fixed custom command senders having unbans/unmutes not showing up in /history, and fixed them not being targetable in other commands such as /staffhistory or /staffrollback.
  • Fixed server UUIDs being generated twice when server.yml has been created for the first time. This has no major side effects.

2.12.1:

Fixes:
  • Fixed playerPrefix/playerSuffix not working under Bungee & Velocity.
  • Fixed AdvancedBan importer converting temporary bans into permanent bans.

2.12.2:

Improvements:
  • Added support for running template actions as the server console. These actions will automatically be displayed as if they are being run by the player who issued the original template punishment, but this can be overridden if necessary.
  • Cleared the default global warning actions in config.yml, as they cause confusion for those setting up warning templates for the first time.
Fixes:
  • Fixed playerPrefix/playerSuffix only working when the targeted player is offline in specific messages.
  • Fixed suffixes (playerSuffix/executorSuffix) fetching prefixes.
  • Fixed a bug which could make it more difficult to ban specific players since version 2.12.

2.12.3:

Improvements:
  • Added Minecraft 1.20 support.
  • Expanded template requirements support (require_template) to warnings & kicks.
Fixes:
  • Fixed the "-g" flag not working in certain commands since version 2.12.
Minor improvements:
  • Added player variables (e.g. `playerPrefix`) to previous_ban_removed/previous_mute_removed/kick exempt messages.

2.12.4:

Improvements:
  • Added support for hex colors in disconnect messages when kicking from Bungee using LiteBans on the backend servers. (Upstream support pending now included in Bungee build #1711)
Fixes:
  • Fixed errors under 1.20 Paper builds.
2.12.5:

Fixes:
  • Fixed kick command requiring a reason to work, and fixed ban usage message being sent instead of kick usage since version 2.12.
  • Fixed timestamp conversion error with MySQL->H2 and MySQL->MySQL LiteBans imports.
Minor improvements:
  • The command `/litebans reset-database` will now quote the server scope initially used rather than stating `server:global` for the confirmation example command.
  • Console name will be limited to 16 characters instead of logging an error message when it is above 16 characters.
----------, May 15, 2023

idRandom.jpg

Improvements:
  • Added randomized punishment IDs ($idRandom), with configurable seed and a unique algorithm. These reversible and unpredictable IDs can be used in /checkban, /checkmute, or you can use "/litebans reveal" to convert a random ID into a real ID. This feature has practically no overhead for servers not using it, as only the sequential ID is stored in the database, and server resources (CPU/memory) required to obscure these numbers are only claimed upon use of this feature.
  • Added unban/unmute/unwarn by-ID support (example: `/unban 1234`). This supports regular punishment IDs, but also directly supports randomized IDs which are added in this update.
  • Added the ability to run commands when clicking on messages. Variables that are included in the command will be substituted as well. Example: "Test {run: /command $playerName}"
  • Added the ability to open URLs when clicking on messages. Example: "Test {url: https://example.com/}". This is only supported for chat messages, as the equivalent JSON in disconnect messages would have no effect if clicked - alas, a client side limitation.
  • Added "expire_ladder" template option. Each template of any type can now have a ladder duration. This allows you to set precisely how long a template ladder will last for. For example, if you set `expire_ladder: 50d`, any punishments older than 50 days will not count towards the template's ladder anymore. This is separate from punishment expiry - when the template ladder expires, all of its issued punishments may still be active.
  • Added /namehistory command. This command displays usernames and the last login date of each username linked to each account. This can also be used on IP addresses to get a list of usernames per IP (like /alts, but with a login date for each username).
  • Added "punish_ip" option to config.yml. When enabled, all punishments will be IP-based by default, so you can IP-ban players by using the /ban command.
  • Added automatic SHA-256 checksum verification for all library dependencies. Note that all dependencies have always been downloaded from the official Maven repository over HTTPS.
  • Added support for importing from LibertyBans (supported: temporary bans, permanent bans, IP bans).
  • Tab completion will now work for all commands even if Essentials is installed, without additional configuration under Spigot.
Fixes:
  • Fixed template steps with permanent duration creating punishments that expire instantly.
  • Fixed kick templates not supporting colours & variables in the kick messages.
  • Fixed permitted players (via "/litebans allow") being able to join the server even if they have a ban matching their account directly. There was a check for this, but it didn't trigger as intended.
  • Fixed short-format durations in the configuration specified in days (e.g. `30d`) being processed as 0 seconds. Other duration units unaffected, and long format (e.g. `30 days`) unaffected.
  • Fixed /staffrollback & /prunehistory removing all of the user's punishments if an invalid duration was provided, instead of giving an error message.
  • Fixed PostgreSQL startup error ("Something unusual has occurred to cause the driver to fail") due to a bug in the database driver (negative timeout caused by driver calculated integer overflow)
Minor improvements:
  • Added locale setting to messages.yml. This option controls the language which dates are represented with, so if your host machine has a different system locale than you wanted and you are unable to change that system locale, you can set it manually instead.
  • Templates with no duration option will now permit the duration to be specified manually through the command.
  • Under Bungee & Velocity, disabling mutes in the configuration will now let the backend servers handle mute commands instead. This can serve as a workaround for the issue where muted players get kicked if they try to chat while muted under 1.19.2+, if you still need LiteBans to be installed under the proxy.
Minor fixes:
  • Reduced unnecessary on-demand Mojang API requests.
  • Fixed /ipban requiring `litebans.ban` permission in addition to `litebans.ipban`.
  • Fixed JSON hover text not functioning in messages when hover text is configured on a new line with no spaces after the new line.
  • Fixed /tempbanip and /tempmuteip checking inconsistent permissions (litebans.tempbanip instead of litebans.ipban) under Bungee & Velocity.
  • Fixed mutechat bypass permission only applying when chat messages are sent and not when blacklisted commands are used.
  • Fixed an error which could occur specifically under BungeeCord if another plugin stops the server while the server hasn't loaded yet, while LiteBans is attempting to load.
  • Fixed punishments of the same type submitted at the exact same time possibly reporting incorrect IDs in immediate post-punishment messages (e.g. broadcasts)
  • Fixed "temporary players" error under Spigot again - this error has no side effects and it should also be exceedingly rare.
  • Fixed errors caused by having an invalid duration format configured. A warning will be logged, and the default format will be used if the duration format is invalid.
  • Fixed malformed configurations causing errors in specific cases.
  • Fixed two types of startup errors with unknown causes which could not be replicated. Neither of these errors were reported to occur under Bungee or Velocity.

2.11.1:

Fixes:
  • Fixed kicks matching `ignored_kick_messages` not being processed correctly (kick was broadcasted, and not added to database, but player wasn't kicked).
API changes:
  • Fixed punishment IDs being set to -1 on the event API. Entries in-database unaffected.

2.11.2:

Improvements:
  • Added support for setting timezones (/litebans timezone) under local H2 database.
  • Updated database driver: MariaDB (3.0.7 => 3.1.2). Notably, 3.1.2 includes a fix for an ArrayIndexOutOfBoundsException driver bug.
Fixes:
  • Fixed MySQL->H2 self-import searching for uppercase tables that don't exist (H2->MySQL unaffected).
  • Fixed templates with names consisting of numbers not working correctly.
  • Fixed an edge-case bug with imported bans having invisible staff history until the staff have joined the server for the first time after import.
  • Fixed `obscure_seed` not updating correctly when `/litebans reload` is used.
Minor fixes:
  • Further reduced unnecessary on-demand Mojang API requests.
  • Attempted another fix for an error with unknown causes which could not be replicated.
  • Fixed an error which could randomly occur on shutdown ("Interrupted during connection acquisition")
  • Fixed short-format durations specified in days (e.g. "30d") not working specifically with the `expire_after` option in config.yml. Long format is used by default ("7 days").

2.11.3:

Fixes:
  • Fixed GeoIP checksum error with new configurations.
  • Fixed GeoIP failing to initialize if the database file (GeoLite2-Country.mmdb) was downloaded manually.
  • Fixed templates being suggested in tab complete results for /unban, /unmute, and /unwarn.
  • Fixed randomized IDs being initialized on startup instead of on-demand since version 2.11.2.

2.11.4:

Improvements:
  • Added tab completion for server scopes.
  • Added security option (`ipban_command: 1`, enabled by default) to restrict the ability to perform wildcard IP bans (e.g. "/ban 192.168.1.*") to console only.
  • Added security option (`ipban_command: 2`, not enabled by default) to restrict the /ipban and /ipmute commands to console only.
Fixes:
  • Fixed `/banlist` showing empty pages when `banlist_show_active_only: true` is set and there are recently expired punishments.
  • Fixed players with two or more active mutes (due to server scopes and/or IP mutes) being considered fully unmuted if only one of their mutes is removed.
  • Fixed non-global server-scoped mutes under Bungee/Velocity not applying correctly if LiteBans is not installed under the backend servers (Unrelated to the issue where 1.19 chat signing prevents mutes from working as intended under Velocity).
  • Fixed certain hexadecimal usernames causing errors on /checkban or /checkmute since version 2.11 (other commands unaffected).
  • Fixed console login history being removed & re-added in the database on each startup when `delete_previous_history: true` is set.
  • Fixed /unban taking effect on recently expired punishments, which gives credit to the one who used /unban instead of expiry.
  • Fixed error when using `/litebans timezone` to alter the timezone across servers.
Minor improvements:
  • messages.yml: Added full duration formatting for cooldown messages (e.g. "you need to wait 20 days, 5 hours, 25 minutes") with "$duration" variable.
  • messages.yml: Added $playerServer variable to indicate the server of an online player.
  • Imported bans will now use the default server scope instead of global, and they will inherit the server origin of the importing server.
  • When a punishment occurs, players will no longer have their login recorded if their server is configured under `ignored_iphistory_servers`.
Minor fixes:
  • Fixed offline warning notifications not being queued if "sync_notifications: false" is set and the player is warned while online on a different server.
  • Fixed double logging of "LiteBans will use the default messages until errors have been fixed."

2.11.5:

Improvements:
  • Added support for importing mutes from LibertyBans, AdvancedBan, and BanManager v7. Warnings will also be imported from LibertyBans.
  • Added a new cooldown named "cooldown_redo", which will apply when someone removes their last punishment and places a new one. This allows you to place a cooldown on players performing `/ban` -> `/unban` -> `/ban` either as a way to kick players repeatedly, or simply banning the wrong players by accident.
  • Added "-g" flag for punishment commands (/ban, /mute, /unban, /unmute, ...). This flag sets the server scope to global - a shortcut for "server:global".
Fixes:
  • Fixed time zones applying incorrectly to specific messages while `use_database_time` is enabled (e.g. `UTC-2` when `UTC+2`).
  • Fixed JSON features like hover-text not being available in mute messages (muted, muted_permanent)
  • Fixed punishment ID lookups not matching the server scope of the punishment of that ID (affects /unban, /unmute, /unwarn, /checkban, /checkmute).
  • Fixed server scope tab completions not starting with "server:".
Minor improvements:
  • Added import_table_prefix option.

2.11.6:

Improvements:
  • Optimized MaxBans import handling.
Fixes:
  • Fixed Rcon unbans/unmutes not showing up in /history, and fixed Rcon not being targetable in other commands such as /staffhistory or /staffrollback (Console unaffected).
  • Fixed `error_no_loginrecord` message being cached on startup, making translation impossible for this message.
  • Fixed empty records being added on import (only when name->UUID conversion required) if the UUID could not be found and there is no IP ban.
  • Fixed an error when viewing imported punishments under specific conditions since version 2.11.5.
  • Fixed file-based import from BanManager v7 not working due to SQLite being used for the import instead of H2.
Minor fixes:
  • Fixed a ClassCastException when loading malformed/invalid configurations.

2.11.7:

Fixes:
  • Fixed H2->MySQL LiteBans import error due to a timezone fix in version 2.11.5.
----------, Jan 9, 2023

This release supports all Minecraft versions from 1.7 to 1.19.

Discord: https://discord.gg/axzSDsDpHn

Improvements:
  • Added template actions - like warning actions, you can specify commands to run. This can be applied to any ladder step of templates, and any number of commands can be specified.
  • Added command completion for templates (tab complete support).
  • Added warning template support. With template actions, you can now have custom warning categories with a unique set of ladder-based warning actions per category. The custom messages under the template will reach online & offline warned players based on ladder progression.
  • Added kick template support (reason & message templates)
  • Templated mutes will now send the template message each time a muted player tries to chat, and not only as the initial message.
  • Players who have been allowed to join the server via "/litebans allow" are no longer exempt from direct bans. They will only be allowed to join the server if the IP ban which affects them was used against a different account.
  • Added staffrollback security option to restrict the /staffrollback command to console, enabled by default.
  • Added server scope support for "/litebans reset-database", which allows you to clear all punishments specifically for one server instead of globally. A server scope must now be provided to use the command, and it will instruct you on how to do so when confirming the database reset.
  • Optimization: Removed Spigot secondary player login listener, this now runs async. This event listener was reported to cause high timings on certain servers, which I could not replicate.
  • Updated database driver: MySQL (8.0.18 => 8.0.29)
  • Updated database driver: MariaDB (2.5.2 => 3.0.6)
  • Updated database driver: PostgreSQL (9.4-1201 => 42.4.0)
Fixes:
  • Fixed a startup error which could sometimes occur when specific plugins lacking library relocation are installed under Java 18.
  • Fixed a startup error which could rarely occur when other plugins stop the server asynchronously immediately on startup (while plugins are still busy loading) due to errors unrelated to LiteBans.
  • Fixed previous IP addresses not being scanned if they were involved with a previous username no longer in use (when `dupeip_scan_all_ips` is enabled).
  • Fixed /lockdown not working under Bungee/Velocity specifically when used from the console without specifying a non-default server scope.
  • Fixed kicks not being removed by /prunehistory.
  • Fixed removalReason not working in /unwarn broadcasts, and fixed API unwarn events not having removal-related information either. This does not affect unbans or unmutes.
  • Fixed a startup error with unknown causes which does not occur on my testing servers under 1.19.
  • Fixed database upgrades not working in specific cases affecting under 1% of users due to unknown causes. This issue has never been replicated, and the steps to replicate it are a complete mystery, so the fix isn't guaranteed to work, but it should work. Hopefully. Try it and see.
Minor improvements:
  • Added helper for Public Key Retrieval related connection errors.
  • The warning expire_after option can now be configured as "permanent", which is more user-friendly than "-1" and doesn't require quotes to work.
  • Added limit function to /warnings, like /history & /staffhistory
  • Added environment configuration (LITEBANS_CONFIG) for container usage. Example: LITEBANS_CONFIG='{"sql.address":"localhost:1234"}'
Minor fixes:
  • Fixed permission_error message from messages.yml not being shown instead of the builtin no_permission message from messages.properties in all cases under BungeeCord (Spigot version unaffected)
  • Fixed kicks being shown as active.
  • Fixed a rare error which could occur on shutdown or when the plugin has been disconnected from the database.
  • Fixed a rare error which could occur on shutdown when commands are busy running while the server is stopping.
  • Fixed hover text errors when a message is configured in a way that causes a single word to be placed directly after the } (closing the hoverText definition with trailing text without spaces) whether directly or indirectly.
  • Offline players with dots in usernames (not as prefixes, those are already supported for Geyser/Floodgate. Specifically offline-mode servers which permit invalid usernames) will no longer be seen as IP addresses, unless their name consists of numbers and dots.

2.10.1:
Important fixes:
  • Warning templates will no longer count expired warnings towards the ladder.
  • Warning templates no longer inherit `expire_after` duration in config.yml.
  • Fixed database errors related to Unicode messages by setting the correct character encoding for MySQL servers which don't use Unicode by default (this fix only affects databases created by older versions).
Fixes:
  • Fixed hex colors within hover text not working correctly.
  • Fixed startup error when ProtocolLib is not present since 2.10.0 (no side effects).
  • Fixed MariaDB specific startup warnings since 2.10.0 (no side effects).
  • Tab completion will no longer suggest player names past the first argument.
Minor improvements:
  • Added dupeip end message, blank by default.
2.10.2:
Important fixes:
  • Fixed broken import function since 2.10.0.
Fixes:
  • Fixed H2 database startup error since 2.10.1.
  • Fixed index creation not working on older MySQL database servers due to changes in 2.10.1.
2.10.3:
Improvements:
  • Templates assigned permissions now also require that permission for the template to be used or tab completed.
  • Added ladder support for kick templates.
Fixes:
  • Fixed certain Unicode characters causing database errors, because `utf8_unicode_ci` was the default encoding instead of `utf8mb4_unicode_ci`. This fix drops support for older 5.x MySQL servers which don't support this encoding.
  • Warning templates will no longer present the `message` node based on the ladder step above the one it was intended for. Other nodes (reason, permission, duration, actions) unaffected.
  • Fixed error handling for invalid configurations under Bungee/Velocity broken since 2.10.0.
  • Fixed errors related to switching database types without restarting the server.
Minor improvements:
  • Players without "litebans.admin" permission will no longer be able to close hover text using "}" in ban reasons.
Minor fixes:
  • Fixed Public Key Retrieval error helper not running if the connection fails on startup.

2.10.4:

Improvements:
  • Added a `console_cooldown` option for specific use cases (e.g. throttling anticheat bans), one second by default. Unlike player cooldowns, this does not stop the console from punishing multiple players at once, it only protects players from double punishments.
  • Updated database driver: MariaDB (3.0.6 => 3.0.7)
Fixes:
  • Fixed ban & mute templates presenting the `message` node based on the ladder step above the one it was intended for. For ban templates, the initial disconnect message was unaffected.
  • Fixed `ignored_kick_messages` not working as intended since version 2.10.3.
  • Fixed /lockdown kicking players who have litebans.lockdown.bypass (Bungee and Velocity instances are unaffected).
  • Fixed kick templates not respecting template permissions.
  • Fixed IP bans overriding other IP bans when the same account is already banned but a different IP address is targeted for the IP ban. (only IP bans matching identical UUID+IP will override now)
  • Fixed startup errors when upgrading very large databases (> 1M bans) caused by timeout.
  • Fixed a J9VM specific error.
Minor improvements:
  • Added "afk" to the default ignored_kick_messages list.
  • The "tempbanip" and "tempmuteip" command aliases are now supported under Bungee & Velocity.
  • The "/litebans allow" command can now be used to allow UUIDs which have never joined the server before, not just names.
  • Exempt messages now support more variables (e.g. playerDisplayName).
Minor fixes:
  • Fixed a startup warning that occurs under MySQL (but not MariaDB).
  • Fixed console bans from proxy instances showing server origin as the network name rather than the target's server name if they are online.
  • Fixed ProtocolLib error when using very outdated versions of ProtocolLib.
  • Fixed again: permission_error message from messages.yml not being shown instead of the builtin no_permission message from messages.properties in all cases under BungeeCord (Spigot version unaffected)
  • Fixed "/litebans allow" error when attempting to allow a user who has never joined the server and doesn't exist either (this operation would fail regardless of the fix).
----------, Jul 14, 2022

Improvements:
  • Added Java 18 support.
  • Added a powerful punishment template system for bans and mutes, which allows you to specify incremental punishment durations, specific punishment messages, permission-guarded punishments, and more. Templates are explained on the wiki.
  • Added "/litebans allow" command, which allows you to permit specific players to join while IP-banned or GeoIP-blocked. This is UUID-based, not IP-based, so each account must be permitted separately.
  • Optimized cross-server synchronization - when a punishment is issued, each server that the punished player is not present on will no longer perform a database check.
  • Optimized mutes and IP mutes - removed a database check on each involved player when a new mute is applied.
  • Changed default ipreport_minimum_accounts (1 => 2) in line with previous default behaviour before version 2.8.13. Previously, online accounts were not counted against this option.
  • Added "require_kick_reason" option to enforce requirement of kick reasons.
  • Added "dateRemoved" variable to messages.yml to indicate when a punishment was removed.
  • Durations in the configuration can now be specified in short form (e.g. "7d" instead of "7 days").
Fixes:
  • Fixed "/litebans unlink" only unlinking the last IP address that a user joined with (all IP addresses will be unlinked now).
  • Fixed kick cooldowns not working as expected.
  • Fixed "/banip" alias requiring "litebans.banip" permission instead of "litebans.ipban" under Bungee/Velocity. Also fixed other alias permissions (ban-ip, muteip)
  • Fixed cross-instance synchronization not working under PostgreSQL. (This issue mainly affects the Spigot version, Bungee/Velocity versions are less impacted)
Minor fixes:
  • Fixed "$timeSince" in unban/unmute history indicating the time since the ban was placed instead of when the unban was performed (this variable is not configured by default)
  • Fixed /prunehistory not working on recently expired punishments.
  • Fixed "temporary players" error under Spigot - this error has no side effects and it should also be exceedingly rare.
  • Fixed "duration:permanent" possibly not working as intended
2.9.1:

Important fixes:
  • Fixed database error on first startup with new databases.
2.9.2:

Important fixes:
  • Fixed database error which specifically occurs after the second startup on a fresh install, and not on upgraded existing installations.
2.9.3:

Fixes:
  • Fixed /prunehistory & staffrollback errors when no duration argument is given.
  • Fixed database error involving kicks (/history, /kick).
  • Fixed /tempmute & /tempban giving duration error when templates are used.
2.9.4:

Improvements:
  • The "/litebans allow" command can now be used on players who have never joined the server before.
Fixes:
  • Fixed PostgreSQL database error.
2.9.5:

Fixes:
  • Fixed another PostgreSQL specific database error triggered upon creating punishments.
----------, Apr 29, 2022

Important fixes:
  • Fixed "Queue full" configuration error occurring on recent builds of Spigot. This error was caused by a recent breaking Spigot change ("Comment support for YAML files") on 20 December 2021, because LiteBans depended on the old behaviour to add comments to the configuration.
Improvements:
  • Optimization: Velocity version of LiteBans now performs login handling asynchronously via Continuation API. This only affects ban & GeoIP checks, as all other tasks fired upon server switch are already handled by other threads.
Fixes:
  • Fixed tab completion for certain commands (not all commands) not working under Velocity if the backend server does not have LiteBans installed. ** Properly fixed and tested.
Minor improvements:
  • LiteBans won't log the database connection info on successful startup at debug level 0. Only the database type (e.g. MySQL) will be logged. This makes it easier to share log files without worrying about sensitive information.
Minor fixes:
  • Fixed time_format in messages.yml not being updated on "/litebans reload".
2.8.12:

Fixes:
  • Fixed a database related error which, under Spigot, could sometimes occur on shutdown (but not on reload) under certain conditions.
  • Fixed another startup error which does not occur on my testing servers.

2.8.13:

Fixes:
  • Fixed a Java 18 specific startup error which didn't occur under Java 17.
  • Fixed /ipreport and dupeip-on-join only counting offline players when checking account thresholds.
  • Fixed MySQL import error under Velocity.
  • Fixed /mutechat broadcast not being sent when "local_messages: false" is set.
Minor improvements:
  • Added command aliases (/checkalts => /dupeip; /banip, /ban-ip => /ipban; /muteip => /ipmute) for Bungee/Velocity.
  • The `ignored_history_servers` option has been renamed to `ignored_iphistory_servers`.
  • Further simplified database connection error messages.
----------, Jan 2, 2022

Important fixes:
  • Fixed various tasks not resuming correctly after "/litebans reload" has been used (issue persisted until server restart).
This caused various problems, like alts not being scanned on join or players randomly not showing up in history or on the web interface.

2.8.2:

Fixes:
  • Fixed a startup error which could occur under very specific conditions.

2.8.3:

Fixes:
  • Fixed a startup error specific to Cauldron/Thermos.
2.8.4:

Fixes:
  • Fixed the specific startup error fixed by version 2.8.2 but also specific to older versions of Java.
2.8.5:

Important fixes:
  • Fixed alts scanning (dupeip on join) not firing under Bungee/Velocity with notification throttle enabled.
Fixes:
  • Fixed an error related to hover text that only occurs outside of my testing server.

2.8.6:

Fixes:
  • Fixed another startup error which occurs on Crucible but not on a default Crucible testing server.
2.8.7:

Fixes:
  • Fixed /mutechat related errors since version 2.8.0.
  • Fixed /banlist displaying recently expired (<12h) bans as active bans.
  • Fixed lockdown not sending broadcast correctly when `local_messages: false` is set on the instance it is run from.

2.8.8:

Fixes:
  • Fixed a database related startup error when setting up a MySQL database for the first time.
  • Fixed tab completion for certain commands (not all commands) not working under Velocity if the backend server does not have LiteBans installed.
Minor improvements:
  • Added "duration:permanent" specification for cases where you want to permanently ban someone but also mention a phrase like "15 days" without it affecting the duration.
  • Added /hist and /staffhist aliases for Bungee/Velocity.
Minor fixes:
  • Fixed permission_error message not being updated on /litebans reload (only affects Spigot version)

2.8.9:

Important fixes:
  • Fixed a startup error under Bungee since version 2.8.8.
Fixes:
  • Fixed more /mutechat issues.

2.8.10:

Important fixes:
  • Fixed alts scanning (dupeip on join) not firing under Bungee/Velocity when `ignored_history_servers` is empty.
Minor improvements:
  • Added option (security.ipban) for automatically hiding IP addresses from IP ban broadcasts when IP-banning an IP which has never joined the server before (or wildcard IP). Enabled by default.
Minor fixes:
  • Dupeip on join will now run against the player UUID instead of name (making the check case-sensitive)
----------, Dec 11, 2021

This update has been tested against Minecraft 1.18 & Java 17.

Improvements:
  • Added Velocity support (Tested against Velocity 3.1.0).
  • Added default unban/unmute/unwarn reasons to messages.yml.
  • Further optimizations & refinements to low priority tasks.
  • Added "muted_player_chat" setting (under notify) which allows disabling the notification for muted players trying to chat.
Fixes:
  • Fixed & optimized alts scanning on join. The previous implementation may have sometimes failed to scan players when they are joining the server for the first time, and used more resources than necessary. Fixed banned players being scanned under the Bungee version since version 2.7. Fixed messages being formatted incorrectly in some cases. Alts scanning is now treated as a low priority task so that more important tasks (e.g. ban/mute checks) can run more efficiently and allow players to join the server quicker, even if hundreds of players are joining the network all at once.
  • Fixed RGB colors in JSON hover text messages.
  • Fixed banned-player-join notification not being synchronized when "local_messages: false" is set.
  • Fixed "/litebans reset-database" not working under the Spigot version.
  • Fixed ban_names not working as intended (only if ignored_history_servers does not include the server being joined) due to restructuring in version 2.7.5.
  • Fixed some inconsistencies with server scoped bans and mutes. Players should not be kicked or muted if the server which they are currently on issues a scoped ban or mute for a different server.
  • Fixed clearchat broadcast not being sent to players who have clearchat bypass permissions.
  • Fixed /iphistory not working on wildcard IP addresses.
  • Fixed database error when unbanning players while having a display name longer than 128 characters.
  • Fixed server origin being undefined when the Bungee console bans offline players.
  • Fixed 65535 server overflow detection not working in cases where all servers are temporary and never get reloaded at any point during their lifespan.
API changes:
  • Added removalReason
  • When a custom sender name or UUID is specified (--sender, --sender-uuid), the custom sender will automatically be given a login record (for /history, /staffhistory, /staffrollback, web interface support, etc) if it does not already have one.
Minor improvements:
  • Added command alias (/dupeip -> /alts) for Bungee & Velocity.
  • All server priorities are now considered when attempting to find a fallback server for players joining a network under lockdown to be sent to, not only the first two servers. (Only affects local lockdown, not global lockdown)
  • Improved database error handling: reduced the amount of additional errors resulting from a lost connection (e.g. "Connection is closed") caused by the first error.
  • Added a warning on startup when local_messages is disabled, because disabling broadcasts will make broadcasts stop working which is sometimes unexpected behaviour.
Minor fixes:
  • Fixed logins not being recorded correctly if the player joined for the first time very shortly before the plugin is reloaded or before the server shuts down.
  • Fixed an edge case preventing players with numeric names from being tempbanned if they haven't joined the server before and the duration is specified as one word. (Permanent bans worked fine)
  • Fixed an error when using "/litebans timezone" on a single-server database.
  • Fixed players being kicked after being unbanned if they rejoin on a server which the unban command was not executed on immediately after the unban occurs.
----------, Dec 9, 2021

Important fixes:
  • Fixed a strange connection error which occurs under high load ("Connection is not available, request timed out ...") - this was a deadlock caused by a regression in version 2.7.
Improvements:
  • Optimized player login handling. Reduced the amount of database connections and threads allocated to low priority tasks.
Fixes:
  • Possibly fixed certain commands requiring the incorrect permission ("litebans.ban") under Bungee in unknown situations that I cannot replicate myself.
  • Offline player names starting with '.' are no longer interpreted as IP addresses (Geyser/Floodgate issue?)
----------, Jul 19, 2021

2.7.2:

Important fixes:

  • Fixed dupeip-on-join message being formatted incorrectly since version 2.7.

2.7.3:

Fixes:
  • Fixed hex colors not showing up correctly in the disconnect reason when kicking online players under the BungeeCord version. (Login disconnect messages unaffected, Spigot version unaffected)
  • Fixed /tempipmute and /tempipban having no tab complete permission under the BungeeCord version.
  • Fixed unban/unmute/unwarn broadcasts inheriting the silent flag from the punishment they are affecting rather than what was specified.
Minor improvements:
  • Configuration errors have been greatly simplified to reduce confusion and make it easier to find the problem you're looking for.
  • Added [CONSOLE] alias as a reference to the actual console which cannot refer to a player.
2.7.4:

Important fixes:
  • Fixed many commands giving no response when used (mainly regarding error messages) since version 2.7.3.
Minor improvements:
  • The permission "litebans.*" is no longer explicitly checked for; this is redundant since version 2.7 as your permission system should handle it.
----------, Jun 13, 2021

Important fixes:
  • Fixed RejectedExecutionException error since version 2.7
  • Fixed imports not working since version 2.7
  • Fixed ProtocolLib error on shutdown/reload
----------, Jun 13, 2021

This release is compatible with Minecraft 1.7.10 to 1.17, and works with Java 8 to 16.

Improvements:
  • Added unban/unmute reasons - the new "$removalReason" variable indicates what reason players were unbanned for. The new "require_unban_unmute_reason" option allows you to make unban and unmute reasons a requirement.
  • Added group-based cooldowns for bans, mutes, warnings, and kicks. The "ban_cooldown" and "warning_cooldown" options have been removed and will no longer apply. Cooldown bypass permissions are still in effect.
  • The clearchat command now supports server scopes, and defaults to local, so chat will not be cleared across the entire network anymore (under Bungee) unless specified.
  • Added tab completion permission support for the BungeeCord version, which prevents players without permission from seeing LiteBans commands that they can't use. Note that /ban and /mute now have a hard requirement of the "litebans.ban" / "litebans.mute" permissions (tempban permissions won't work alone). Limits will still apply.
  • /alts will now show IP-banned players who don't have a matching account ban in yellow (configurable).
  • Added "disable_login_ban_check_servers" option for the BungeeCord version - with this, you can allow banned players to join specific servers on your network.
  • Optimized the BungeeCord version to perform less database queries on login.
Fixes:
  • Fixed "null" showing in place of undefined prefixes/suffixes when Vault is not installed.
  • Fixed calculation of the last page in /banlist.
  • Fixed "Deadlock found when trying to get lock" error handling not working as intended since 2.6.10.
  • Fixed server scoped unbans/unmutes/unwarns matching and removing global punishments when a non-global server scope is specified. (Only specifically global punishments were matched, other server scopes were not.)
  • Fixed server scoped warnings not notifying the warned player if they were offline at the time of warning under the Spigot version. This does not affect the Bungee version, nor does it affect global warnings.
  • Fixed a very rare bug where banned players could, in some cases (and not with 100% success rate) switch servers during a very small window of time the moment before they are banned (not after). They could not rejoin nor switch servers after leaving or being kicked from the server they switched to. This does not affect the BungeeCord version.
  • Fixed an (unlikely) error that could happen under very high loads ("OutOfMemoryError: unable to create new native thread") - note, this error can still occur if caused by other factors.
  • Fixed a timezone-related error ("HOUR_OF_DAY: 2 -> 3") when importing from MySQL databases with certain timezones.
  • Fixed duplicate IP bans being added when importing twice into the same database.
  • Fixed extra silent kicks sending unprocessed messages to console.
  • Fixed placement of the `unwarn_broadcast` message in messages.yml (was under "mute", now under "warn").
API changes:
  • Fixed broadcastSent() not firing for extra-silent broadcasts.
Minor improvements:
  • Lockdown will now be broadcasted when a previous lockdown is loaded on startup.
  • The cross-server listing function of "/litebans info" has been moved to a separate sub-command, "/litebans servers".
  • Added mute reason to default muted messages.
  • Added error handling for invalid Bungee group configurations.
  • Removed unused "history_time_format" to simplify configuration of messages.yml. (Only time_format was used)
Minor fixes:
  • Fixed a specific error "execute() is called on closed connection" which could occur on disable (this error has no side effects).
----------, Jun 12, 2021

Important fixes:
  • Fixed timezone offsets being applied twice - for example, if your timezone was UTC+2, the time was calculated as 2 hours + 2 hours (4 hours) instead of 2 hours. This fix affects the "use_timezone" and "use_database_time" options if your system timezone is not UTC+0. This fix only affects the displayed dates and not the actual duration of punishments.
  • Fixed an issue where if server.yml was copied across servers, affected instances would generate more servers than necessary (this would stop as soon as the instances are reloaded or restarted for the first time). LiteBans will now automatically reset the servers table if it has reached the server limit (65535 servers) - all of the unused server entries will be deleted in order to fix synchronization. No intervention required.
Improvements:
  • Added 1.16 hex color support (simple format: #000000 - #FFFFFF) - hex colors are now supported in all messages, including disconnect messages, punishment reasons, and broadcasts.
  • Added "/litebans unlink" command. This command can be used to unlink all IP addresses from a specific user for /alts. It serves a similar function to "/litebans cleariphistory" but allows punishment history to remain accessible without requiring "/litebans fixhistory" and only targets one user at a time.
  • Optimized /history and /staffhistory commands for large databases.
  • The `litebans.exempt.bypass` permission is now locked behind a config option. If you want certain ranks to be able to punish exempt players, set "allow_exempt_bypass: true" in config.yml. This change addresses a common case where people are concerned about operators banning other operators, all of whom would have exempt bypass permissions by default. Console can still ban exempt players regardless of this option. Note that this option will be enabled if it hasn't been added to your configuration yet, so this permission will only be locked for new configurations.
  • Added "silent" config option to make punishments silent by default.
  • Added "-p" (public) flag which makes punishments non-silent even if the silent flag is specified (or implied) before it.
  • The `ignored_history_servers` option (which allows disabling IP history recording for specific servers under BungeeCord) now also supports Spigot-side instances - if you add 'local' to the list, the configured server will not record IP history on login. This is useful for networks which have an authentication server but don't use AuthMe.
  • Staffrollback will now rollback unbans and unmutes, reactivating punishments that were deactivated by the target player.
  • Added /unwarn broadcast
Fixes:
  • Fixed a very old issue: when a duration is displayed for a recent punishment, it would say "59 minutes" rather than "1 hour", for example. Recent punishments will now have their duration rounded up towards the original duration. This means that if a player is punished for 3 days, they will see "3 days" remaining instead of "2 days, 23 hours, 59 minutes" remaining with the initial disconnect message.
  • Fixed chat prefixes/suffixes (executorPrefix / playerPrefix) not showing chat colors correctly in certain messages.
  • Display names longer than 128 characters will now be shortened to 128 characters rather than giving an error.
  • Importing from LiteBans will no longer allow duplicate entries (except for IP bans).
API changes:
  • When LiteBans cancels a chat event, instead of replacing the entire message with "[event cancelled by LiteBans]" it will prefix the message so that the original message can still be extracted from the event.
Minor improvements:
  • The default database timeout is now 25 seconds rather than 30 seconds. Why an odd value? This brings it out of line with the built-in server crash timeout threshold of 60 seconds which makes it less likely for LiteBans to log an error precisely when the thread dump is logged to console - this can make the thread dump render incorrectly and/or mislead people into thinking that LiteBans is somehow involved with a server crash when it's not.
  • LiteBans will now show a warning on startup if duration limits are configured incorrectly. The limits, when unconfigured, will now default to 27 seconds instead of 10 days (this prevents the misconfigured group from being checked first).
  • Added executor variables (prefix/suffix support) to mutechat broadcast.
  • LiteBans will now prefix cancelled chat events under BungeeCord in order to properly indicate that misbehaving chat plugins are processing cancelled chat events. Previously this was only done for Spigot-side plugins.
  • Some commands (e.g. /checkban and /warnings) will now show the targeted user's last recorded name, if their old name is given, for online-mode servers.
  • Added "totalKicks" variable which represents the total amount of kicks in the database.
  • Added debugging messages for exempt permissions at debug level 1.
  • Added debugging messages for /unban, /unmute, /unwarn at debug level 1. (This is to help confirm cases where servers have both online-mode and offline-mode UUIDs being used simultaneously)
Minor fixes:
  • Fixed "/litebans info" skipped sync events counter displaying the wrong value.

2.6.1:

Fixes:
  • Fixed an error when checking history for a player who has no punishment history.

2.6.2:

Fixes:
  • Fixed $activeBans, $activeMutes, and $activeWarnings not working as intended since version 2.6.
Minor improvements:
  • The permission error message from messages.yml will now be used for all permission errors. (Only affects Spigot)

2.6.3:

Fixes:
  • Fixed PostgreSQL connection error "Properties for the driver contains a non-string value for the key connectTimeout". This does not affect any other drivers (MySQL, MariaDB, H2).

2.6.4:

Improvements:
  • Added "dupeip_scan_limit" option - this allows you to limit the number of accounts scanned in /dupeip or /alts per IP address. The default is 20 accounts per IP. Accounts are sorted by last login date (in descending order), which means that the oldest accounts will disappear first.
  • The /dupeip command now supports a limit argument like /history and /staffhistory. If no limit argument is provided, the configuration limit is used.
Fixes:
  • When changing timezones towards a timezone with a negative offset, LiteBans will no longer consider punishments made in the "future" for ban cooldowns. (This caused players without cooldown bypass permissions to be unable to create punishments for up to 24 hours since the timezone was changed) - this does not affect positive timezone offsets.
  • When resetting the database with "/litebans reset-database", the ID counter for new punishments will be reset to 0.
  • Fixed an issue that could (very rarely) randomly cause LiteBans to prevent the server from shutting down properly under certain conditions.
Minor fixes:
  • Fixed some errors which could rarely occur on disable due to async events from unregistered listeners still running after the plugin has been fully disabled.
2.6.5:

Important fixes:
  • Fixed an error which always occurred on startup under the Spigot version since version 2.6.4.
Fixes:
  • Fixed the new `silent` configuration option not applying to kicks.
2.6.6:


Improvements:
  • Optimized unban/unmute commands for very large databases.

2.6.7:

Important fixes:
  • Fixed a startup error (ConcurrentModificationException) which could occur randomly in rare cases since version 2.6.6.
Fixes:
  • IP bans which affect players who have never joined the server before (no IP mapped to IP ban) will no longer unban all such players (banned players with no IP recorded) when the IP ban is removed or overridden.
2.6.8:

Improvements:
  • IP bans targeting already-banned IPs will no longer override each other when a different account is targeted.
  • Added support for importing from BanManager v7 (tested against version 7.2.2)
Fixes:
  • Fixed non-global punishments overriding global punishments if executed in a specific order (first global, then non-global).
  • Fixed old player names being shown in certain cases when more recent player names are recorded.
  • Fixed offline-mode UUIDs being used as fallback when an online-mode account is not found when targeting a player who has never joined the server before (only affects the Spigot version).
  • Fixed LiteBans->LiteBans import reporting zero bans imported (bans were still imported successfully, and console was notified of the correct amount).
API changes:
  • Fix: entryRemoved() didn't fire when a punishment was overridden rather than being removed directly.
Minor improvements:
  • Added `litebans.notify.warned.offline` permission - players without this permission will no longer receive a list of warnings given while they were offline.

2.6.9:

Improvements:
  • Optimized the /unmute command: it will now only check online players that are known to be muted rather than checking / refreshing all online players.
  • Exempt permissions and exempt bypass permissions now default to `false` instead of defaulting to operators.
Fixes:
  • Fixed a crash when using LiteBans commands with command blocks.
  • Fixed /staffrollback not unmuting or re-muting online players until they re-join the server.
Minor fixes:
  • Fixed the first ban ID being shown as ban #0 instead of ban #1 in certain messages. Subsequent bans are unaffected and reconnect messages are unaffected.
  • Fixed /banlist showing an empty last page in certain cases.
  • Fixed warning actions calculating recently expired warnings as active ones in rare cases.
  • Fixed executorPrefix/executorSuffix not working as intended in /mutechat broadcasts (no other broadcasts affected).
  • Fixed database initialization time being calculated incorrectly in certain cases (e.g. when resetting the database)
2.6.10:

Improvements:
  • Updated HikariCP dependency: 2.6.3 => 4.0.3. This should help with certain database related errors on certain MySQL server configurations.
Fixes:
  • Fixed /staffrollback error with H2 database since version 2.6. MySQL users unaffected.
  • Fixed non-global server-scoped mutes being removed incorrectly in certain cases (when unmuting a player from a different server scope, but they are still muted on the current server scope, they could be unmuted until next login) since version 2.6.9.
  • Fixed a bug which could cause a startup error under certain conditions. Possibly fixed some different startup errors that I can't replicate myself.
Minor improvements:
  • Added permission to use the "-p" flag ("litebans.public")
  • Drivers are now placed in "plugins/LiteBans/lib/" rather than "plugins/LiteBans/" - drivers in use will be moved automatically after updating.
  • Added "max_lifetime" option, default 30 minutes. In most cases, this does not need to be changed.
Minor fixes:
  • Fixed /warnings showing expired warnings as active in certain cases where the 12-hour expiry timer hasn't triggered yet.
2.6.11:

Improvements:
  • Added "keepalive" option for database pool configuration, disabled by default.
----------, Dec 2, 2020

Important fixes:
  • Fixed a mute bypass bug affecting the BungeeCord version, and some other bugs with blacklisted commands.
Improvements:
  • Added "litebans.ipban.wildcard" and "litebans.ipmute.wildcard" permissions for wildcard IP bans/mutes.
Fixes:
  • Fixed importing IP bans from BungeeAdminTools.
API changes:
  • Added methods to check if a player is banned or muted on a specific server scope, instead of checking only global/default scope.
  • Fixed PlayerProvider.set() not working as intended, since it was cached on startup.
Minor improvements:
  • Hover-text now supports being placed on a new-line without a space before it (e.g. "Message\n{hoverText: ...}"
  • "/litebans broadcast" now supports global variables (e.g. $totalBans, $totalMutes, $totalWarnings)

2.5.5:

Important fixes:
  • Fixed "/litebans import" error. (regression in 2.5.4)
2.5.6:

Fixes:
  • Fixed "/litebans import" saying that it imported zero bans / IP bans since version 2.5.4/2.5.5. (It was successful, but the correct number wasn't shown)
2.5.7:

Fixes:
  • Reverted "Hover-text now supports being placed on a new-line without a space before it" from version 2.5.4, as that broke newlines contained within the hover-text itself.

2.5.8:

Important fixes:
  • Fixed hover-text under the BungeeCord version causing errors due to breaking BungeeCord changes after build #1515 (Spigot hover-text unaffected, and older BungeeCord builds unaffected)
API changes:
  • LiteBansAPI version 0.3.4
  • Added API method: Database.getUsersByIP(String ip) (#31)
2.5.9:

Fixes:
  • Fixed an error on player login when using CloudNet v3 under the BungeeCord version. (Spigot version unaffected)
----------, Jun 14, 2020

Important fixes:
  • Fixed MySQL error "Illegal mix of collations ..." which occurred on startup under certain MySQL server versions.
Improvements:
  • Added option to trigger dupeip check on muted account: `dupeip_on_muted_account` (default: false)
Fixes:
  • Fixed Turkish locale bug which caused various issues, including that tables were being generated with the incorrect names (e.g. "litebans_warnıngs" instead of "litebans_warnings") which the web interface doesn't recognize. Any incorrectly named tables will be renamed after updating automatically.
Minor fixes:
  • The /banlist command now handles unban/unmute entries like /history and /staffhistory (separate, not appended)
  • LiteBans will now automatically attempt to re-download corrupted dependencies if the download fails under certain rare conditions.
----------, May 24, 2020

Important fixes:
Fixed per-server mutes not working under the Spigot version since version 2.5 (Bungee version unaffected, and per-server bans unaffected)

Fixes:
Fixed per-server punishments targeting "local" instead of the actual local server as a fallback, when a player doesn't have the permission to use the scope and the default server scope is local.
----------, May 6, 2020

Important fixes:
Fixed blacklisted mute commands not being blocked under the BungeeCord version.

Fixes:
Fixed silent kicks ("/kick -s") not being silent since version 2.5. Cross-server kicks can now also have silent/extra-silent broadcasts, and extra-silent kicks will now have the silent prefix.

Fixed Java 9+ reflective access warnings on startup.

GeoIP will now give the appropriate warning message with older configurations as well, not only new configurations.
----------, May 5, 2020

Important fixes:
Fixed unban entry messages in /history being shown above the ban entry instead of below it. (Also applies to mutes)

Improvements:
LiteBans will now detect if server.yml has been copied across servers and correct the problem automatically (by regenerating server.yml), with no intervention required.

Removed the "/litebans sqlexec" command entirely.

Added "/litebans reset-database" command as an implementation of the most common use case of sqlexec, which was removed.
This command clears all punishments from the database, including active and inactive punishments. (Only console can run this command)

Added an option which resolves the problem of duplicate broadcasts and notifications ("local_messages") when running LiteBans under Spigot and BungeeCord simultaneously.
Setting this to false on a BungeeCord instance prevents it from sending broadcasts, but they will still reach the backend Spigot servers through synchronization as intended, which will result in a single copy of the messages being sent rather than two copies.

Added "disable_login_ban_check" option to config.yml since more people wanted this functionality (previously a hidden option) - this lets you allow banned players to join specific instances.

GeoIP now supports the license-key download method (it can extract the ".tar.gz" format automatically).
The GeoIP database download URL no longer influences the filename, it will always be saved as "GeoLite2-Country.mmdb".

Fixes:
Fixed per-server mutes under the BungeeCord version not being isolated correctly - mutes will now respect server scope when players switch between servers, instead of being global.
This doesn't affect the Spigot version since Spigot instances don't contain multiple server scopes per instance.

Fixed GeoIP command's error message not being shown correctly if download failed on startup.

Fixed a GeoIP library conflict with EssentialsGeoIP.

Fixed LiteBans API listeners being cleared by `/litebans reload`

Fixed playerPrefix/playerSuffix variables not working in kick broadcasts.

The "-s" flag can now only be used by players who have permission to see silent punishments.

Fixed playerPrefix/playerSuffix variables causing messages to be rendered incorrectly under BungeeCord. (Since it requires Vault, it will now render as blank instead of being replaced incorrectly)

Fixed playerDisplayName/playerPrefix/playerSuffix and other variables not working in punishment response messages (broadcasts unaffected).

Fixed cross-server kicks (from /kick) not generating broadcasts.

API changes:
New API release (version 0.3.2):
- Added PlayerProvider API which allows overriding target player name.

Minor improvements:
A link to ServerListPlus latest stable development build will now be provided when LiteBans fails to hook into ServerListPlus since non-development builds lack the needed API.

Added "$serverScope" variable for lockdown messages.

The database driver version used will now be logged on startup (e.g. MySQL 8.0.18).
----------, Apr 30, 2020

Important fixes:
Fixed cross-server synchronization being broken since version 2.4 (Bans would work, but players weren't being kicked/muted across servers until re-login, and "/litebans info" returned no servers)

Improvements:
Re-arranged config.yml and moved less important settings to the bottom of the configuration.
----------, Dec 25, 2019

Important fixes:
Fixed an issue preventing LiteBans from being loaded on 1.14 and earlier (I set api-version to 1.15, but forgot that it disables backwards compatibility, so I changed it back to 1.13)

Late edit: This only affects 1.13 and 1.14 users, versions 1.7-1.12 should be unaffected since they don't process api-version.
----------, Dec 21, 2019

Important fixes:
Fixed unban/unmute broadcasts showing the name of the player who placed the ban as the executor instead of the one who removed the ban (regression in version 2.4).
----------, Dec 21, 2019

Important fixes:
Downgraded H2 driver: 1.4.200 -> 1.4.197

(This doesn't affect MySQL users) The latest H2 driver isn't reverse compatible and doesn't automatically upgrade older databases, which results in a "Unsupported type 17" error.
https://github.com/h2database/h2database/issues/2078

Fixes:
Fixed a CancellationException error which could happen on reload or on shutdown.

2.4.3:

Fixes:
The "prevent_bypass" option will no longer prevent muted players from using non-blacklisted commands containing ":". Only blacklisted commands will be blocked, regardless of which plugin provides the commands.
(If /apples is blocked, then /fruit:apples will also be blocked, along with non-existent commands like /minecraft:apples or /bukkit:apples, but "/essentials:afk" will work fine)
Previously it would block every single command that contained ":", which caused trouble for a few plugins that run commands automatically through menus or clickable text.

2.4.4:

Minor fixes:
Fixed version number inconsistency issue from 2.4.3 (For some reason, the auto-generated bungee.yml had version 2.4.2, although plugin.yml, which was also auto-generated by the same tool, had version 2.4.3).
----------, Dec 19, 2019

Important fixes:
Fixed a regression in version 2.4 which prevented LiteBans from recording IP history if `delete_previous_history` is set to true (default).
----------, Dec 15, 2019

The permission list is now hosted on the wiki. It has been fully restructured into table format.

All Minecraft server versions from 1.7.10 to 1.15 (both inclusive) are currently supported with this release.

Improvements:
2019-12-15_11.14.37.png

Added chat prefix/suffix support (requires Vault) - new variables: $playerPrefix, $playerSuffix, $executorPrefix, $executorSuffix
(If you were already using display-names support for prefixes/suffixes, no changes are required)

Wildcard permission "litebans.*" no longer grants exempt bypass permissions - this makes it easier to negate litebans.exempt.bypass

Permission "litebans.unban" no longer grants "litebans.override".

Cross-server kicks (from /kick) now require "litebans.kick.global" permission.

Improved performance (reduced timings) under Spigot with 100+ players online. BungeeCord version unaffected.

Updated MySQL driver: 8.0.15 -> 8.0.18
Updated MariaDB driver: 2.4.0 -> 2.5.2
Updated H2 driver: 1.4.197 -> 1.4.200

Fixes:
When "delete_previous_history" is disabled, players who join using a known previous account and IP will now update the login entry's date so that /dupeip and IP bans will affect the IP address tied to the account which last joined the server rather than the last IP address which was mapped to the account.

/dupeip (and dupeip scanning on join) will now skip previous names from renamed accounts, only the most recent account will be shown per UUID.

If `sync_notifications` is disabled, mute/warn notifications will no longer be synchronized.

Hover text will now function as expected when a newline follows {hoverText: ..} directly after (notably, in history messages, but not by default).

Reverted change "Clearchat is now implemented more efficiently, it will now send a single message with 100 newlines instead of 100 separate empty messages."
Old behavior is back, 100 separate messages will be sent instead. This is because 1.7.10 doesn't support newline characters in chat.

When config option "default_server_scope" is set to "local", it will no longer require the permission "litebans.server.<scope>" when the effective server scope is the same as origin.

Minor improvements:
Added exception handling specifically against plugins that use the LiteBans API incorrectly (resulting in SQLTransientConnectionException after 10 calls) -- this doesn't fix the underlying issue (since it's not my fault) but does allow for the cause of the problem to be pinpointed far more quickly and accurately.

Added "(Async)" as a name suffix to certain background threads that could show up in crash reports. These threads practically never cause the server to crash since they don't do anything intensive.
I've noticed that some people like to read crash reports by scrolling down way past the main server thread and just blaming the first innocent plugin in the list which happens to be running a thread in the background (like LiteBans or LuckPerms or LogBlock) even if it's not blocking or interacting with the main server thread at all, ever. (Just search "luckperms crash" on Spigot for a few examples)
This suffix might help the issue.

Optimization: Improved performance of /dupeip (and dupeip on join) in cases with large amounts of accounts per IP

Optimization: Servers with no players online will no longer query bans/mutes/warnings from the database when synchronization occurs, since there won't be any players to apply them to

When multiple flags are specified with one command (e.g. "/ban -sN"), specifying any unknown flags will make the whole argument part of the ban reason (while ignoring all of its valid flags) rather than processing the arguments and ignoring the unknown flags passed.
This allows for arguments like "-stuff" or "-john" to be included in ban reasons without unintended consequences.

Removed the unused "[Hidden IP]" message from messages.yml.

Added support for target player variables (e.g. $playerName) to unban_fail, unmute_fail, unwarn_fail messages.

Changed the default import option to "vanilla", since that always works by default.

The "override_lower_duration" option in config.yml is now false by default.

Added "-s" flag support to /clearchat for silent broadcasts.

Database exception handling will now skip redundant "Communications link failure" messages.

The messages "unban_entry" / "unmute_entry" are now separate messages instead of being appended to the ban_entry or mute_entry. This allows for separate hover-text.

Minor fixes:
Fixed non-fatal "Interrupted during connection acquisition" error that could happen on shutdown. ** Attempt #2. This error is hard to replicate but it should be fixed this time.

Fixed /unban, /unmute, /unwarn commands returning usage messages instead of permission errors to players who don't have permission under the BungeeCord version of the plugin.
(Players who were able to see the usage messages were still unable to actually use the commands if they didn't have permission, and this didn't affect the Spigot version of LiteBans.)

Two hover-text instances in one message will no longer result in an error. (Only the first one will be used, though.)
----------, Dec 15, 2019

Important fixes:
Fixed MySQL error: "The server time zone value ... is unrecognized" by adding "&serverTimezone=UTC" option to config defaults.
( See FAQ on how to add it to an existing configuration if you experience this error)

Improvements:
Added "litebans.unban.own", "litebans.unmute.own", and "litebans.unwarn.own" permissions, which allow staff to remove punishments they have created but not of others.
These permissions are not true by default, in order to prevent regular players from seeing /unban, /unmute, /unwarn in tab completion results even if they've never banned a player before.
Staff *will require* these new permissions in order to use these commands, even if they already have litebans.unban, because commands can only be bound to one permission node at a time, and litebans.unban.own is the lesser permission.

Added ServerListPlus support (Spigot + BungeeCord).

Fixes:
Fixed LiteBans not working under Java 7 (due to a mistake, it would only work on Java 8 and above, which most people are using)

Fixed offline exempt permissions not being checked properly with cross-server kicks.

Fixed "litebans.exempt" not granting "litebans.exempt.kick" permission.

Fixed a bug where "/litebans broadcast" with broadcast-type argument would use "litebans.notify.broadcast" permission across servers rather than the specific permission node given.

API changes:
Implemented Entry.getId(); it will no longer return -1. Changed getId() return type from `int` to `long`.
If you were using this unimplemented function, you'll have to re-build your plugin against the latest API due to the type change.

Minor improvements:
Added the "executor" variable to cross-kick response messages.

Added "total" variable for /history and /staffhistory to represent the total number of matching entries.

Added "/ban-ip" and "/pardon-ip" aliases.

Added "litebans.cleariphistory.wildcard" permission for commands like "/litebans cleariphistory %". "litebans.cleariphistory" itself no longer allows wildcard clearing.

Minor fixes:
Fixed the new "default_history_limit" option not working as expected.

Fixed non-fatal "Interrupted during connection acquisition" error that could happen on shutdown

Fixed rare "Unhandled exception occured in onPacketReceiving" error that I can't replicate

Fixed "unbanned by null" issue that should only happen if the database columns are set to a blank string rather than NULL

Notes:
If you are using the "/litebans broadcast" command with the broadcast-type argument, you'll need to update all LiteBans instances (not just the sender) in order for them to handle the broadcasts.

Latest ServerListPlus dev build is required if you want integration. https://ci.codemc.org/job/Minecrell/job/ServerListPlus/
Older versions of SLP do not have the ban provider API.

2.3.17:

Fixes:
Fixed errors with ServerListPlus under BungeeCord

Fixed errors with old, unsupported versions of ServerListPlus (LiteBans will skip it if it's too old instead of failing to start)

2.3.18:

Fixes:
Fixed ServerListPlus issue: permanent bans will now show "never" as %ban_expiration_date%
----------, Jun 9, 2019

Improvements:
By popular demand, I have added options (enabled by default) to prevent players from viewing IP addresses.
By default, it will no longer be possible for ingame players to use "/litebans sqlexec", /iphistory, or for players to see IP addresses in /dupeip, even if they have permissions.

Fixes:
Exempt checks no longer apply to unbans / unmutes.

Fixed "$command" not being replaced in /dupeip usage message.

Fixed MySQL->H2 imports failing due to uppercase table names ( #62).

Minor fixes:
Commands will no longer malfunction when provided redundant spaces (double spaces, triple spaces, etc). Blank arguments are ignored.

Notes:
New options in config.yml:
Code (Text):
security:
        # If enabled, only the console can see IP addresses in /dupeip output.
        # This does not prevent players from using /dupeip. It only prevents them from seeing IP addresses.
        dupeip: true
        # If enabled, only the console can use /iphistory.
        iphistory: true
        # If enabled, only the console can use "/litebans sqlexec".
        sqlexec: true
2.3.11:

Minor improvements:
Added compatibility for pre-1.7.10 versions of BungeeCord (before commit https://github.com/SpigotMC/BungeeCord/commit/cf722de1d25b092c745eae7d1acabf702683c71e)

2.3.12:

Fixes:
Fixed plugin failing to start under Spigot if ProtocolLib wasn't installed since version 2.3.11 (last version).

2.3.13:

Improvements:
Added full support for 1.13 command suggestions; commands that players don't have permission to use will no longer be suggested to them.
This also prevents players from viewing most LiteBans commands via "/help" or "/?" or tab completion.
^ Minor caveat: the /ban and /mute commands may still be suggested to all players if you are using ViaVersion (untested).

2.3.14:

Fixes:
Fixed the "unbanned by name" always being shown as the creator of the punishment instead of the one who removed it.

2.3.15:

Improvements:
The `litebans.clearchat.bypass` permission is now locked behind a config option due to the immense amount of confusion caused by its existence. Out of the box, players with OP or * permission now will have their own chat cleared by /clearchat.

Database driver updates. These will occur automatically after updating LiteBans.
Updated MySQL driver: 8.0.11 -> 8.0.15
Updated MariaDB driver: 2.0.3 -> 2.4.0
Updated H2 driver: 1.4.196 -> 1.4.197

Minor fixes:
Possibly fixed a rare bug involving plugin conflicts when another plugin provides an outdated version of a database driver (e.g. H2) -- as Java does not provide any useful relevant information when class loading conflicts occur (such as the jar file paths of both classes in the conflict if they differ), I do not know which plugins create such conflicts, so I can't replicate this and check if it's been fixed or not.

Fixed warning `Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'.`.

Fixed "$command" in "/litebans import" usage message.
----------, Nov 14, 2018

Improvements:
Added configurable permission-based ban duration and mute duration limits.

Added JSON hover text support for all messages.

Added support for importing from AdvancedBan (MySQL only, for now)

Added cooldown for the /ban command. Changed the way cooldowns work, within cooldown, the same executor cannot use /ban or /warn on the same player twice and they cannot use it on two separate players.
Added bypass permissions for cooldowns.

Fixes:
Added response to the BungeeCord version of the plugin when players attempt to switch to a server that they are banned on, previously no message would be sent.

Fixed muted players being able to bypass blacklisted commands that have arguments, e.g. "/mail send", by using more than one space between arguments ("/mail__send")
(This exploit doesn't apply to simple blacklists like "/msg")

Fixed server scope 'local' not working as expected when configured as default server scope.

API changes:
Added "--sender-uuid=" option for commands which allows overriding the sender UUID.

Minor improvements:
When using a H2 database, the username/password of your database will be stored in h2.yml on first load for future use.
This change mainly affects people who change the driver to MySQL, change the login details, then switch back to H2 and wonder why their database stops working with an "invalid username/password" error.

Commands like "/ipban" will now be correctly described in usage messages with the new "$command" variable.

Added command aliases: tempbanip, tempmuteip, ipunban, unmuteip, iptempban, iptempmute.

Updated default MySQL driver: 6.0.6 => 8.0.11 (MySQL 8)

Rewrote large parts of the plugin. Everything seems fine, hopefully no bugs.

Minor fixes:
Fixed mutechat response not being sent in some cases.

Fixed a rare startup error which caused cross-server synchronization to stop working under BungeeCord.

Other minor bugfixes.

Notes:

New options will not be added automatically to config.yml. If you don't add them, there will be no permission limits. Otherwise, default options take effect if not present.
No action regarding config.yml is needed unless you want to use the new limits, in which case you can add them if you want to.

You can view the updates here:

https://gitlab.com/ruany/LiteBans/commit/b4160ef7ef8f6c3f311e69ac9831c436dd2c2ce0
https://gitlab.com/ruany/LiteBans/raw/master/config.yml

Yes, the new duration limits also apply to IP bans and IP mutes.

The new duration limits:
Code (Text):
# The highest limit matched by permissions will be used for duration limits.
# If a player has "litebans.group.unlimited", they will bypass these.
limits:
  moderator:
    permission: litebans.group.moderator
    tempban: 1 month
    tempmute: 1 month
  helper:
    permission: litebans.group.helper
    tempban: 15 days
    tempmute: 7 days
  other:
    permission: none
    tempban: 7 days
    tempmute: 1 day
Viewing hover text requires the "litebans.json.hover_text" permission.
JSON hover text examples:
Code (Text):
message: 'Test message {hoverText: Hover text here!}'
2.3.1:

Fixes:
Fixed the new $command variable in new message configurations.

2.3.2:

Fixes:
Fixed the $date variable in /iphistory not working after 2.3 update.

2.3.3:
Improvements:
Improved compatibility with versions of BungeeCord older than 1.11.

Minor fixes:
Fixed error handling regarding certain unexpected situations

2.3.4:

Improvements:
Added configurable options for duration formats and separators in messages.yml.

Fixes:
Fixed the "$duration" variable (and others) not being available in the banned_player_join message since 2.3.3.

Fixed errors when attempting to ban, mute, or warn an online player but affecting a different server under Spigot (ban executed on Server1 + player online on Server1, ban only matches Server2, not Server1) -- default global scope unaffected, and BungeeCord version unaffected

/dupeip will now show online muted players as muted, not only offline players.

Minor improvements:
Optimized ban/mute commands regarding cooldown calculation.

Notes:
New options in messages.yml:
Code (Text):
duration:
  format: '%d %s'
  separator: ', '
These options allow you to change the way durations are formatted. Chat colors are supported so you can now configure separate colors for numbers ("8" in 8 days) and strings ("days" in 8 days).
Duration text like "8 days, 3 hours, 22 minutes" is formatted as "%d %s, %d %s, %d %s" by default.
This can also be represented as "FSFSF" where F=format and S=separator.
All durations follow this format.

2.3.5:

Improvements:
Updated for 1.13 API (api-version: 1.13). LiteBans is still fully compatible with older versions (1.7 - 1.12).
This update is not required for 1.13 support.

Removed "Thread starvation or clock leap detected" debug message as it causes clueless people to think that LiteBans is somehow involved with a server crash when it occurs.

Fixes:
Fixed "bungee_switch_banned" message variables not being replaced.

Fixed warning actions not inheriting silent state with new messages.yml (also fixed some warning actions always being silent)

Fixed warning action reason lists having inconsistent colors due to list_entry in messages.yml.

Minor improvements:
Added kick variables (like executor) to kick response message.

Extra-silent kicks will now respect "notify_console".

Clearchat is now implemented more efficiently, it will now send a single message with 100 newlines instead of 100 separate empty messages.

Added server ID and sync stats to `/litebans info`.

Added "mo" as valid duration specifier for "months"

Added "litebans.cleariphistory" permission for /litebans cleariphistory.

Minor fixes:
The `litebans.admin` permission is now required to add hover-text tokens to punishment reasons. (This won't work by default)

Fixed /staffrollback and /prunehistory showing the wrong type of errors when given invalid formats

Possibly fixed certain errors on /reload (untested)

Cross-server kick requests no longer require kicked players to have valid IP addresses.


2.3.6:

Improvements:
Performance improvements for databases with very large amounts of active IP-bans (>100K bans), and some other query optimizations have been made for large databases in general.

2.3.7:

Fixes:
Fixed BungeeCord error: "Cancelled ServerConnectEvent with no server or disconnect.", which could occur in rare situations.

Fixed database indexes for new columns not being generated as intended on existing databases (this fix improves performance)

Minor improvements:
Added warning if a player joins when LiteBans hasn't finished loading yet if late-bind isn't enabled in spigot.yml.

2.3.8:

Fixes:
Regression: Fixed 'ignored_kick_messages' in config.yml not working as expected.
Empty kick reasons will now also not be added to the database if `ignored_kick_messages: ['']` is set.

Minor improvements:
Added "default_history_limit" option to config.yml which allows you to set the default amount of entries shown in /history and /staffhistory.

2.3.9:

Fixes:
Fixed /lockdown kicking players who have litebans.lockdown.bypass.

Players with 17+ character usernames in offline-mode will be blocked from joining the server and their login will not be processed further.

Minor improvements:

Muted players who have had their mutes removed from the database directly (without /unmute) will have their state refreshed upon re-login.

ServerConnectEvent under BungeeCord is now ignored by LiteBans if cancelled by another plugin.
----------, Jun 21, 2018

Important fixes:
Fixed "Connection is not available, request timed out ..." errors which occur after several players join the server.
This is a regression introduced in version 2.2.7, so if you are running 2.2.6 or earlier you don't need this bugfix.
Users still running 2.2.7 or 2.2.8 will receive update alerts.

Improvements:
This update includes changes from all minor updates since 2.2.5, check the previous changelog to see changes for all minor updates.

2.2.10:
Minor update, no announcement.

Fixes:
Fixed unban/unmute broadcasts not including certain ban/mute specific variables.
(these variables are not configured by default)

Minor improvements:
The "$server" variable now supports chat colors.


2.2.12:
Minor update, no announcement.

Fixes:
Fixed an issue that possibly caused /banlist to estimate pages incorrectly.

Fixed compatibility issues with older versions of Bukkit / Spigot (<= 1.6.4)

Minor improvements:
Added "broadcast-type:" argument to /litebans broadcast. This allows you to specify which permission is required to see the broadcast (litebans.notify.<type>)
Made /litebans broadcast require "litebans.broadcast" permission rather than "litebans.admin".

Debug level > 0 will now allow Mojang query failure exceptions to be logged to console.

2.2.13:
Minor update, no announcement.

Fixes:
Fixed /history and /staffhistory showing recently expired bans as active instead of expired.

Fixed /history matching unrelated players when multiple IP-bans were placed against players who have never joined the server before.

API changes:
LiteBansAPI 0.3: https://github.com/ruany/LiteBansAPI/releases/tag/0.3

https://github.com/ruany/LiteBansAPI/commit/a65e3cb09c4189ebe5e9f9f95b535c1668164725

Minor fixes:
Extra-silent cross-server broadcasts will now respect the "notify_console" option.

Fixed exception when player IP address is null on PlayerLoginEvent.

2.2.14:
Minor update, no announcement.

Improvements:
Added ID-based lookups for /checkban and /checkmute

Fixes:
Fixed subserver-based per-server scoped bans under the BungeeCord version of the plugin not kicking affected players when they are banned. (This doesn't affect the Spigot version, and doesn't affect per-proxy bans)

2.2.15:
Minor update, no announcement.

Fixes:
Fixed mutechat-blacklisted commands not being blocked when used without command arguments
Fixed players not getting a mutechat response when using a mutechat-blacklisted command

Minor fixes:
Fixed the startup message that logs the "jdbc://..." URL appending "seSSL" to the database name on some (Multicraft-based?) servers when "?useSSL" was intended. It will now log ",useSSL" instead.
----------, Jan 23, 2018

## Improvements
Improved performance of player IP history queries (affects dupeip on join).

Prefixed commands (/litebans:ban, /litebans:mute, etc) can now be used under the BungeeCord version of LiteBans. (Previously they would only work under Spigot)

Added configurable GeoIP whitelisting.

Added support for player variables in broadcasts ($playerName, $playerDisplayName, $playerUUID, $playerIP).

Added "litebans.notify.mutechat" permission for mutechat broadcasts.

Improved the /history command, it can now process multiple usernames belonging to the same IP address.

Added "/litebans timezone" command which allows you to check and change the cross-server timezone if `use_database_time` is enabled.

## Fixes
Fixed the `use_database_time` option using the local system timezone and returning different results across multiple servers.

Fixed cross-server kick messages referencing the executor's UUID in place of the executor's name (and vice versa).

The permission "litebans.ban" is no longer required for unbanning players.

Fixed permanent punishments which are rounded down (without litebans.unlimited) being broadcasted as permanent punishments rather than temporary punishments.

IP bans will no longer broadcast the IP address if there is a player name attached to the IP and /ipban <IP> is used.

Fixed rare "temporary player" error from ProtocolLib.

Fixed bugged interaction involving SimplePerms and exempt permissions when LiteBans is installed under BungeeCord, which prevented commands from working on offline players.

## Configuration changes
Disabled the "unban_all_history" option by default in config.yml since it causes issues for people who have broken IP forwarding setups.

Dupeip on join notifications will now use the "no_ip" message.

The default "banned_message_appeal_message" in messages.yml is now empty.

The "broadcast_unmute" message has been moved from the "ban" section to the "mute" section of messages.yml.

Removed the default kick response message.

Added documentation for time_format.

## API changes
The entryRemoved event will now be fired more reliably when "unban_all_history" is enabled, though it currently won't fire for all entries removed.

Commands like /ban, /mute, /warn now accept a "--sender=" argument which allows you to override the executor's name. Requires "litebans.admin" permission.


2.2.6:

Minor update, no announcement.

## Fixes
In order to avoid confusion, /staffrollback no longer accepts more than two arguments.

Fixed possible memory leak regarding online players who haven't fired a quit event (I can't replicate this).

The warn broadcast will no longer replace "$player" with the executor's name. (only applies to very old messages.yml)

## API changes
The "--sender=" argument is now also supported with the /kick command.

## Minor improvements
"/litebans cleariphistory" added as alias for "/litebans clearhistory"


2.2.7:
Minor update, no announcement.

## Fixes
Fixed warning actions being executed on display names instead of regular names when `use_display_names` is enabled in config.yml. (closes #38)

ignored_kick_messages now works as expected when this list contains strings that are not entirely lowercase.

## Minor improvements
Dupeip and /iphistory now support wildcard IP addresses once again (no performance loss for non-wildcard lookups)

When an online player is punished, they will now be checked and added to the history table if they are not already present.
(If the plugin was disconnected from the database or if it was loaded for the first time after the player has joined, they would not be present in the history table, causing punishments to be missing from /history and the web interface)

Added support for player-specific variables in /history and /staffhistory (e.g. $playerName)

Lots of internal changes. Hopefully no new bugs have been introduced.

2.2.8:
## Improvements
Optimized the deactivate-expired-bans query execution. It will now execute every 12 hours instead of 30 seconds, and other servers connected to the same database will be notified not to execute it redundantly.
(Expired bans will still expire instantly, this query just marks them as inactive)
The more servers you have connected to the same database, the more you will benefit from this optimization.

## Minor improvements
Added warning regarding maximum pool connections when an exception occurs if it's set to a low value.
----------, Nov 14, 2017

Improved database performance when the "ban_names" option is enabled, the plugin will no longer query the bans table twice if the player's UUID hasn't changed.

Restructured ban/mute queries to improve database performance especially when there are many inactive bans.

Fixed lockdown bypass permissions not working under BungeeCord.

When the default server scope is not global, using the "server:" argument to specify a different server when adding/removing punishments now requires litebans.server.<scope> permission.

The /warnings command now allows players with the "litebans.warnings.self" permission (default true) to view their own warnings. (adds #9)
Note that this command uses the existing history messages and so it will refer to the player in the third person, i.e. "YourName was warned by ...", not "You were warned by ..."
This is for simplicity reasons and may be changed later.

Updated HikariCP (connection pooling library) from version 2.4.2-RC1 to 2.6.3-SNAPSHOT (latest git dev branch snapshot as of 2017-06-04)

Driver updates (all latest as of 2017-07-08):

Updated default MySQL driver version to 6.0.6 (Spigot 1.12 packages version 5.1.42)
Updated default MariaDB driver version to 2.0.3
Updated default PostgreSQL driver version to 9.4.1212.jre7
Updated default H2 driver version to 1.4.196
These updates will take effect automatically when you update the plugin, no changes to config.yml are necessary.
If you have any custom drivers you'll have to add "- version:1" to the top of the driver list.

LiteBans will no longer load database drivers from the classpath -- this means that the plugin will download and use the latest MySQL driver instead of using the built-in outdated driver which is packaged with Spigot/BungeeCord.

Downloaded drivers will include versions in their filenames, e.g. "h2-1.4.196.jar" instead of "h2.jar"

IP addresses can now be listed in hidden_dupeip_players in config.yml to hide them from /dupeip.

Fixed decimal time specifications >= 10 (e.g. "/ban player 10.0 days") not working as expected

Fixed "error_no_history" message being unmodifiable from default since version 2.2.

Disabled H2 trace logging by default. This prevents H2 from creating a "litebans.trace.db" log file filled with ignored error messages up to 16MB in size.

Fixed the "litebans.*" wildcard permission not granting permission to use /ipban and /ipmute. (This bug only applies when using permissions systems that don't compute wildcard permissions, such as BungeeCord's built-in permission system)

Fixed error and added warning when an online player's IP address is null (so far I've only seen this happen on servers with IP forwarding issues).

Modified and simplified "/litebans info" messages.

Fixed SQLite->H2 import issues since version 2.1.22.
----------, Jul 16, 2017

LiteBans API fixes:

Fixed Database.prepareStatement() returning a closed statement.

Events.register() and Events.unregister() are now thread-safe.
----------, May 20, 2017

Fixed another issue with /banlist.

Removed server_name deduplication. This allows you to give multiple servers the same server name, allowing punishments to affect a specific group of servers or networks.

2.2.2:
Fixed "$mutedPlayer" not working in unmute broadcasts.
----------, May 9, 2017

Added official LiteBans API. The API is hosted and documented here.

Per-server punishments have been added. This works with both Spigot and BungeeCord versions of the plugin.

Introduction to Server Scopes (click here)

All punishments are still global by default. If you don't need per-server banning, you won't have any problems, using this is completely optional.

Per-server banning works interoperably with Spigot and BungeeCord versions as long as the configured server_name in LiteBans' config.yml is the same as the configured server names in the proxy's configuration.

Examples:
/ban Player 7d server:survival
/checkban Player server:survival

Added /checkmute command.

Added basic /lockdown support for the BungeeCord version of the plugin.
Lockdown now allows you to provide a server scope, default local.

Mute blacklist commands without arguments can no longer be executed (e.g. "/me" rather than "/me <message>")

Fixed /banlist not working when "banlist_show_active_only" is enabled (note that this option is disabled by default)

Improved performance of bans, especially with many players online.

Added "$serverScope" and "$serverOrigin" variables.

Messages.yml:

Fixed $dateEnd variable always being the same as $dateStart.

Updated many variable names in messages.yml. Old variables like "$bannedFrom" will be automatically updated to "$dateStart", for example.
Some variables which had many different names now have one standard name ($executor used to be $displayName, $banningPlayer, $bannerName, $bannerDisplayName, $bannedBy, $mutedBy, .....)

Fixed the messages.yml full header with documentation being automatically stripped out by the configuration system (still not sure why this happens, but it shouldn't happen again)

Fixed new messages not being automatically added to the configuration under BungeeCord.

Minor changes:
Duration variables for permanent punishments will now use the "forever" message in messages.yml instead of untranslated literal "permanent".
Messages.yml: [time spec] -> [duration]
Added litebans.unban.queue permission.
----------, May 7, 2017

Fixed the plugin not working with Java 8 update 112 or later.
Updating is highly recommended in order to avoid possible errors in the future.
(Note: LiteBans is still compatible with Java 7)

Most notable bugfixes from previous minor updates:
- [2.1.8] Fixed the /unwarn command, broken since 2.1
- [2.1.9] Fixed "unbanned by" messages always indicating the actor who placed the punishment rather than the actor who removed it.
- [2.1.13] Added support for non-dashed UUIDs (e.g. "b9b618bd671c303a9900ce0b3f6de348" instead of "b9b618bd-671c-303a-9900-ce0b3f6de348")
- [2.1.6] Added online player tab completion for BungeeCord (requires litebans.tabcomplete permission)
- [2.1.14] Fixed GeoIP database download errors.
- [2.1.15] Improved table upgrade check behaviour, added "/litebans table-upgrade-check" command.

2.1.17:
Fixed an error with "/litebans reload". This error is harmless and reloading will still complete successfully despite the error.

2.1.18:
Added more friendly configuration error handling.
The plugin will now notify you if any configurations failed to load on join if you have the "litebans.admin" permission, and "/litebans reload" will specifically tell you which configuration(s) failed to load.

Removed "newline_as_new_message" option. Multi-line messages will now always be sent as one message. (This means that formatting will now carry over onto the next line, use "&r" to reset it).
As far as I can remember, this option was introduced as a workaround to a bug which was fixed very long ago.

Chat events under BungeeCord will now be cancelled at LOWEST-4 priority.

2.1.19:
Added "sync_poll_ticks" and "sync_poll_skip" options to the configuration.

2.1.20:
Fixed startup error with certain custom builds of BungeeCord.

2.1.21:
Made it possible to import from H2 databases with username/password defined by using "import_mysql_username" and "import_mysql_password" options.

2.1.22:
Added configuration option "sql.options" which by default includes "useSSL=false".
Added version header to configuration files.

2.1.23:
Fixed regression with H2 and useSSL=false option.

2.1.24:
Added "/message" to the default mute blacklist.
Fixed /dupeip alerts counting the same accounts on multiple addresses for threshold-based notifications.
Added "litebans.notify.warned" permission. This permission is granted by default under Spigot and allows players to see their own warning notifications when they are warned.
Added "litebans.notify.muted" permission. Mute notifications will now be sent across servers. This permission is granted by default under Spigot.
When attempting to punish a player who doesn't exist (no UUID found in online-mode), an error message will be sent instead of nothing.
Fixed case-insensitive name bans not working after the first join attempt.
Added "$message" variable to muted player chat notifications.

2.1.25:
Fixed messages.yml not being saved with the new comments since 2.1.24.
Fixed certain broadcasts not being sent to their sender regardless of notify permissions (lockdown, mutechat, silent unbans)
Banned-players.json is now a synonym for "vanilla" (import.from) when importing bans.
Renamed many variables in messages.yml to reduce confusion.
Added variables "$playerDisplayName, $playerName, $playerUUID, $playerIP" to many messages.
Fixed harmless exception in some situations ("Cause: null") when the plugin fails to connect to a database.
Added option to let /dupeip show muted players, disabled by default for performance reasons.
Players without "litebans.dupeip.viewip" permission can no longer see the IP address in the dupeip start message.

2.1.26:
Fixed /banlist not working since 2.1.25
Possibly fixed an issue preventing LiteBans from being loaded by BungeeUptimeSuite.
----------, Oct 25, 2016

Short summary:
+ SQLite -> H2
+ Unban history
+ Commands like /staffhistory can now target the console
+ Bugfixes and performance improvements


Full description:

SQLite has been replaced with H2. There are many reasons for this decision:
  • Much higher performance. H2 is significantly faster than SQLite.
  • More stability. There are some rare crash bugs in the native SQLite driver which I cannot fix, which result in the entire JVM crashing.
  • LiteBans is multithreaded and SQLite isn't thread-safe, only one write operation can be performed at a time which reduces overall performance.
  • SQLite does not support adding new columns to the database. The only way for me to do this is to re-create the entire database, which is too slow. This prevented me from adding unban history support for SQLite.

LiteBans will automatically convert existing SQLite databases to H2 databases. All punishments, punishment history, and IP history will be transferred to the new database.
No intervention or configuration is required and the plugin will continue working as normal.
(If you're not using SQLite you will be unaffected by this change.)

If the import succeeds, your SQLite database will be renamed to "litebans.sqlite.backup".
This can be safely deleted if H2 is working normally.

Added unban/unmute history. When using history commands (/history, /staffhistory, /banlist) you will now be able to see who unbanned or unmuted a player.
Bans, mutes and warnings which have expired will now also be shown as [Expired].

Commands like /staffhistory and /staffrollback can now be used on the console itself (you can view/rollback punishments executed by console).

Broadcasts will now *always* be sent to their executor if applicable (bans, mutes, warnings, kicks), even if the executor does not have the litebans.notify.broadcast permission.

Added separate command blacklist for /mutechat.

Minor performance improvements.

Many, many bugfixes included in minor updates since 2.0.

Changes and fixes since 2.0 worth mentioning (if you're running 2.0.XX you have some of these changes, see 2.0 changelog):
- Configurations under Spigot and BungeeCord now always support UTF-8 (config.yml + messages.yml).
- Fixed warning notifications not being synchronized properly if a player has multiple active warnings.
- Importing from BungeeAdminTools was fixed.
- LiteBans is now compatible with the newest version of AuthMeReloaded.
- Added /mutechat command to globally mute chat.
- Added litebans.ipmute permission.
- Dupeip notifications under BungeeCord will now only be triggered when a player connects to the proxy, not when they switch to a different server.


2.1.1:
Fixed harmless import error.

Removed the ability to define custom paths for H2 due to the high amount of error reports.
The LiteBans plugin folder will now always be used for storing the H2 database rather than "address" in config.yml.

2.1.3:
Fixed a bug preventing tables from upgrading successfully.
Improved table upgrade performance, alter queries are now sent in one batch.

2.1.4:
The plugin will now use UTF-8 encoding when importing bans from a SQLite/H2 database.
Added support for importing from a LiteBans H2 database.
Fixed some issues with importing IP-bans with Ultrabans.

Fixed a harmless error when starting the plugin for the first time if config.yml doesn't exist yet.

2.1.6:
Added online player tab completion for BungeeCord (requires litebans.tabcomplete permission)

2.1.7:
Added "use_timezone" option to config.yml, enabled by default. Debug level 10 will show the time offset on startup.

Fixed the default date format. "YYYY" will now be replaced with "yyyy", unless you have "allowYYYY: true" in config.yml.

2.1.8:
Fixed the /unwarn command, broken since 2.1

2.1.9:
Fixed "unbanned by" messages always indicating the actor who placed the punishment rather than the actor who removed it.

2.1.10:
Fixed a very rare table upgrade bug.

2.1.11:
Fixed a minor permissions issue.

2.1.12:
Fixed more rare table upgrade issues, all columns will now be individually checked on all tables.

2.1.13:
Added support for non-dashed UUIDs (e.g. "b9b618bd671c303a9900ce0b3f6de348" instead of "b9b618bd-671c-303a-9900-ce0b3f6de348")
Optimized some database queries.

2.1.14:
Fixed GeoIP database download errors.

2.1.15:
The plugin will no longer skip table upgrade checks on next startup if an error occurred during the upgrade.
Added "/litebans table-upgrade-check" command which forces a full table upgrade check.

Fixed /dupeip merging player histories if used on a name which has been claimed by another account, only the last seen UUID matching the name will be used.
----------, Jul 5, 2016

Added cross-server broadcasts, notifications, and kicks.
These will work across multiple plugin instances running under Spigot or BungeeCord.

Added "$server" variable to broadcasts.

Added "/litebans broadcast <message>" command. This command allows you to send any message across all servers connected to the same database.

Added update checker, the plugin will notify you when there is a new plugin update. This can be disabled in the configuration.

Configuration changes:

ban_sync_ticks and mutes.sync_ticks have been removed.
The new system allows bans and mutes to be synchronized far more efficiently.
Instead of checking all online players per interval, all instances of the plugin will notify each other when a player is banned or muted.


Minor changes:
Fixed /litebans sqlexec not working under BungeeCord.

Added "-N" flag which prevents previous bans and mutes from being overridden (e.g. /ban Player -N).

Minor updates:

2.0.1:
Fixed an issue where dupeip notifications longer than 4096 characters would cause an error.

2.0.2:
Fixed BAT import error.
Added "check_after_join" option to config.yml.

2.0.3:
Fixed more possible BAT import errors.

2.0.4:
Fixed /litebans fixhistory not working since 2.0.

2.0.6:
Added ban/mute/warning response messages.

Added variables: $activeBans, $activeMutes, $activeWarnings, $totalBans, $totalMutes, $totalWarnings.

2.0.8:
Fixed "/litebans reload" not working since 2.0.6.

2.0.10:
Added ProtocolLib support. If ProtocolLib is present and support is enabled in the configuration, the plugin will use ProtocolLib to cancel chat events.

Fixed unban broadcasts not working with the "-S" flag.

2.0.12:
Added option to config.yml:
Code (Text):
# This option controls the behaviour of the "-N" flag. This flag prevents active bans/mutes from being overridden.
# If enabled, the "-N" flag will only prevent bans from being overridden if the active ban has a lower duration.
override_lower_duration: true
2.0.13:
Fixed error with latest version of AuthMeReloaded caused by a breaking API change.

2.0.14:
Fixed an error which occurs if banned_by_uuid is stored as null in the database. (LiteBans should never accomplish this on its own, haven't had any other reports of this issue)

2.0.16:
Fixed kick responses not being handled correctly if multiple servers are trying to perform cross-server kicks at the same time.

2.0.17:
Fixed commands not working under BungeeCord.

2.0.18:
Fixed another issue with /litebans reload.

Removed /cc alias (clearchat) since it was causing conflicts with other plugins. This alias can be re-added manually using any command alias plugin.

2.0.19:
Configurations are now always loaded and saved using UTF-8 under Bukkit and BungeeCord.
This allows Unicode to be used in the configuration in places where UTF-8 is not the system default encoding (e.g. Windows)

Improved configuration error handling.

Fixed issues with importing from BAT under offline-mode.

Exempt checking is now case-insensitive for names.

The latest version of ProtocolLib is no longer required, mutes should now work even with an outdated version (unless there is a plugin conflict)

The update checker can now tell you the latest version along with your current version.

Improved long-term stability of the cross-server sync system.

2.0.20:
Fixed importing permanent bans from BAT.

2.0.22:
Added /mutechat.
This command works under both Bukkit and BungeeCord.
Permissions: litebans.mutechat, litebans.mutechat.bypass

2.0.23:
Dupeip notifications under BungeeCord will now only be triggered when a player connects to the proxy, not when they switch to a different server.

2.0.24:
Players who are IP-banned and haven't joined the server before can now be unbanned after they try to join.
Optimized BungeeCord login event handling, the event will now be handled async instead of blocking the thread(s) which it is handled on.

Added option to config.yml:
Code (Text):
# This option allows you to disable recording IP history on specific servers under BungeeCord.
# Example: ignored_history_servers: ['Lobby']
ignored_history_servers: []
2.0.25:
Fixed the console receiving two dupeip notifications per player instead of one notification.

Fixed dupeip notifications not being sent for players who have a banned player on the same IP if the banned prefix was changed in messages.yml.
Also fixed these notifications always being sent if any of the colors were set to red.

Removed some debug messages.
Made some changes to the default configuration.

2.0.26:
Fixed an issue with importing bans from a LiteBans SQLite database.

2.0.27:
Fixed SQLite errors since 2.0.26.

2.0.28:
Added litebans.ipmute permission, rather than using litebans.ipban for /ipmute
Fixed warning notifications not being synchronized properly if a player has multiple active warnings.
Fixed "use_database_time" option misbehaving if different servers have different timezones assigned by the MySQL server.
Fixed rare startup error linked to "use_database_time" option.

2.0.29:
Fixed constant exceptions occurring if the MySQL connection failed since 2.0.28.
----------, Feb 9, 2016

1.9.46 + 1.9.47:
Removed "$timeSince ago" in "warn.list_entry" from the default messages.yml. This caused a problem with the warning list when the default warning action for 4 warnings is executed - when the player is banned, the last warning will state "(forever ago)".

1.9.45:
Added "/litebans info" command. This command shows the amount of active, idle, and total pooled connections.

1.9.44:
Switched to utf8 and utf8_unicode_ci, utf8mb4 only works on MySQL server versions released within the last 6 years.

1.9.43:
Fixed Unicode/UTF-8 support. New tables will also be created using utf8mb4 and utf8mb4_unicode_ci - previously utf8 and utf8_general_ci.
Fixed exempted players not being punishable through rcon.

1.9.42:
Added $id and $type variables to all messages involving bans, mutes, warnings, and kicks.

1.9.41:
Fixed error which occurred if you used two spaces with /ban and /mute.

1.9.40:
Fixed PostgreSQL startup error.

1.9.38 - 1.9.39:
Fixed errors when importing from a SQLite database while running the plugin under BungeeCord.

1.9.31 - 1.9.35:
Added "use_database_time" option to config.yml.

1.9.29:
Fixed error "Parameter index out of range (... > number of parameters, which is ...)." which could occur in certain situations since version 1.9.28.
----------, Nov 24, 2015

IP bans will now cause all online players with matching IP addresses to be kicked.

Added IP mutes (/ipmute). Wildcard IP mutes are also supported.
----------, Nov 23, 2015

Fixed errors when importing from a LiteBans SQLite database.

Optimized connection pooling. The plugin will now re-use a single pooled connection when doing complex operations instead of allocating several connections within the same task.

Added MariaDB driver.

Added table placeholders to /litebans sqlexec - {bans}, {mutes}, {warnings}, {kicks}, {history}, {table_prefix}.
----------, Nov 22, 2015

Fixed tempmutes not working properly since version 1.9.23.
----------, Nov 3, 2015

Added new options to the configuration for connection pooling.
Code (Text):
# LiteBans utilizes connection pooling for extra performance and reliability.
# min_connections: Minimum amount of pooled connections.
# max_connections: Maximum amount of pooled connections. See: https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
# timeout: Connection timeout.
pool:
  min_connections: 1
  max_connections: 10
  timeout: 30 seconds
/litebans sqlexec will now show the full results of any executed database queries in a table.

Fixes:
Some optimizations and fixes regarding muted players were made.

Fixed a single pooled connection being leaked on startup.

Fixed "Database is locked" errors while using a SQLite database. These errors could occur when multiple players join at the same time.

Fixed unnecessary error "No operations allowed after statement closed", generated when there are database connectivity issues.
----------, Nov 2, 2015

Fixed long messages being formatted incorrectly under BungeeCord.

Added mute notification for muted players. When a player is muted, they will be notified regardless of whether they can see broadcasts or not.

Added "require_ban_mute_reason" option to the configuration.
Code (Text):
# If set, a ban or mute reason must be provided, otherwise players will get an error.
# When set to false, "default_ban_reason" and "default_mute_reason" in messages.yml are used as reasons when no reason is provided.
require_ban_mute_reason: false
As with all other messages, these messages are configurable.
----------, Oct 25, 2015

Fixed commands not working under BungeeCord since 1.9.18.
----------, Oct 19, 2015

Added connection pooling. This improves the plugin's performance in situations where a single connection would otherwise be overloaded (for example, 20+ players trying to join at the same time).

Fixed mute bug with uppercase commands under BungeeCord.
----------, Oct 18, 2015

Added a notification for when a muted player tries to chat while muted.

Added a configurable throttle duration (default 10 minutes) for ban and mute notifications ("<player> tried to join, but is banned" / "<player> tried to speak, but is muted").
This means that players can't flood admins/moderators with these notifications by doing the same action in a short period of time.

Some minor performance improvements.

Default config.yml changes:

"delete_previous_history: true" set by default as it improves performance, especially for SQLite databases.

Default table prefix is now set to "litebans_".

Default mute blacklist now includes all Essentials private messaging commands.

Fixes:

Commands are now treated as lowercase for mutes.

You no longer need to add a space after every command in the mute blacklist to prevent blocking "/warp" with "/w", for example.

Possibly fixed mutes not working with DeluxeChat and other plugins listening at highest priority.

Improved performance with AuthMe integration.

1.9.17:
Fixed MySQL indexes being created twice for new tables.
----------, Oct 3, 2015

Added BAT (BungeeAdminTools) ban importer.
Fixed /banlist sometimes giving no results for the last page.

Web interface:
Added staffhistory page (when clicking on a ban, you can now click on the moderator's name to see all punishments executed by that particular staff member).
Fixed the navigation bar not rendering properly on mobile devices.
Fixed all punishments showing as inactive under PHP 5.3.x.

1.9.15:
Message length is now limited to 4096 rather than 32000.
----------, Sep 27, 2015

Further reduced CPU usage and startup time.

The mute command blacklist can now contain commands with spaces, for example:
Code (Text):
  # All of these commands can not be used while muted.
  command_blacklist:
  - /f desc
If a player types "/f desc ..." while muted, it will be blocked.

Durations for /ban, /mute, etc can now be provided as decimals. For example:
Code (Text):
/ban Player 3.5 hours
Fixed a bug which could freeze up the server and cause excessive CPU usage.

1.9.10:
Fixed severe BungeeCord task scheduling bug which only occurred when "ban_sync_ticks" was configured.

1.9.11:
Fixed numbers being broadcasted as "1.0" instead of "1".

1.9.12:
Fixed /ipreport not working under BungeeCord.

1.9.13:
Chat events for muted players are now cancelled at highest priority. This should prevent most plugins from interfering with mutes.
----------, Sep 18, 2015

The web interface has had some major updates within the last few days.

Highlights:
The default theme has been modified to give it a different look.

You can now view specific bans by clicking on them in the ban list:
2015-09-15-170215_1241x343_scrot.png
This page can be used for staff to reference and discuss bans, or for a player to reference their own bans (for example, in a ban appeal) and check whether a ban has expired, and when it will expire.

This page also allows you to click the banned player's name and discover all of their previous punishments, including bans, mutes, warnings, and kicks issued in the past, sorted by date:
2015-09-15-170722_1260x446_scrot.png
The punishment listing page can also now be accessed by using the "Check" button shown above the Bans, Mutes, Warnings, or Kicks list. The "Check" button no longer checks whether a player is banned, but rather shows the list of all punishments.

The web interface now uses UUIDs instead of names to fetch avatars.

Large parts of the web interface were rewritten. The code for litebans-php has been cleaned up and is now much easier to read and modify.

Fixes in 1.9.8:

Fixed GeoIP database download error.

Version 1.9.8 also includes some previous hotfixes released after version 1.9.4:

1.9.5:
Fixed startup error when engine is still set to MyISAM in config.yml.

1.9.6:
Added configured exempt groups and exempt player support to BungeeCord.

1.9.7:
Fixed another error related to MyISAM in the configuration.
New MySQL tables will be created using UTF-8 charsets only.
----------, Sep 15, 2015

Reduced CPU usage of the plugin with many players and/or large databases by up to 30-40%.
Improved general plugin startup time, especially with remote databases. Even with a local database, you might notice a 50-70% improvement in startup time. (SQLite: 330 ms -> 112 ms, local MySQL: 384 ms -> 138 ms)

Added wildcard support to /dupeip. For example, you can now run this:
Code (Text):
/dupeip 192.168.1.*
This example will show players who have joined from 192.168.1.5, 192.168.1.30, etc.

Added "delete_warnings_after_action" option to the config which removes all active warnings for a player after executing a warning action.

BungeeCord fixes:
Exempt permissions should now work under BungeeCord for offline players.

Fixed messages.yml being generated incorrectly under BungeeCord.

Removed togglechat/lockdown commands from BungeeCord as they are not implemented yet.

General fixes:
The plugin will not try to convert existing InnoDB tables every time the plugin starts up if the engine is still set to MyISAM in config.yml.

Fixed a very rare and harmless error while using a MySQL+InnoDB database: "java.sql.BatchUpdateException: Deadlock found when trying to get lock; try restarting transaction"

Fixed "Duplicate entry ... for key 'unique_index'" error.

Fixed /litebans reload causing an error if the configuration file is deleted instead of copying and loading the default configuration.

Fixed a bug causing the console's name to not be replaced with the configured console name when display names are enabled.

1.9.5:
Fixed startup error when engine is still set to MyISAM in config.yml.

1.9.6:
Added configured exempt groups and exempt player support to BungeeCord.

1.9.7:
Fixed another error related to MyISAM in the configuration.
New MySQL tables will be created using UTF-8 charsets only.
----------, Sep 8, 2015

Fixed bans and mutes not working under BungeeCord.
----------, Aug 24, 2015

Fixed table prefixes.

Added "-S" flag for bans, mutes, warnings, and kicks. This flag will prevent broadcasts from being sent to any players, and only the console will see the broadcast.

Added "litebans.*" permission.

1.9.2:
The "litebans.*" permission will no longer apply to notify permissions.
Added permission node required to use the "-S" flag: "litebans.extrasilent".
----------, Aug 22, 2015

Additions and performance improvements:
Added indexes to SQLite/H2 databases. Existing databases will have indexes added. This will increase performance depending on how large the database is.
Improved performance when the database has many active bans and/or mutes (especially with bungeecord: true). Only one query will be executed now when checking online players for active bans.
Added full PostgreSQL database support.

Experimental BungeeCord support. (The plugin now supports running under Bukkit and BungeeCord)
The plugin will run directly on a BungeeCord server and successfully connect to the database.
All commands and features should currently work except for togglechat and lockdown.
The plugin must only be installed on the proxy. Bans, mutes, and warnings will be synchronized across all servers connected to the proxy.
The configurations for the BungeeCord version are identical to and compatible with the configurations for the Bukkit version.
Feedback is welcome!

Fixes:
Fixed /banlist missing the last 1-2 pages.
Fixed "-s:$silent" default warning action causing errors.
----------, Aug 20, 2015

Fixed /togglechat error.

1.8.7: Fixed Java 1.6 + 1.7 compatibility.

1.8.8: Fixed memory leak added in 1.8.5.
----------, Aug 17, 2015

Added "ignored_kick_messages" option to the configuration. By default, this prevents "Server is restarting" kicks from being added to the database.

The /banlist command will now show inactive bans, this can also now be changed in the configuration.

LiteBans will now attempt to reconnect every minute or so if the MySQL connection is lost.

When using /litebans reload, the plugin will now inform you if the database connection failed.

Updated H2 driver URL from version 1.4.185 to 1.4.188 ( http://www.h2database.com/html/changelog.html).
----------, Aug 16, 2015

Added "litebans.override" permission - without this permission, players cannot override previous bans/mutes. This prevents unbanning a player by banning them for 1 second, for example.

Fixed previous IP bans not being overridden by new IP bans. Regular bans still cannot override IP bans.

1.8.3: Also allowed players with the permission "litebans.unban" to override previous bans.

1.8.4: Fixed bug where login threads would get stuck in rare cases.
----------, Jul 26, 2015

Major MySQL performance improvements and optimizations:
Changed default MySQL database type to InnoDB. The plugin will automatically attempt to migrate existing MyISAM tables to InnoDB if 'engine: MyISAM' is set in the configuration.
Added indexes to optimize lookups.
Set primary key `id` on each table.
Removed "allow_duplicate_history" option since it could lead to significant performance loss if accidentally enabled, and this option is incompatible with unique indexing on the table.

If you've ever had issues with the plugin's MySQL performance, this update is definitely for you.

Added an option to the configuration to use display names (changed nicknames) wherever possible.

Added /clearchat command. This command can be bypassed with the "litebans.clearchat.bypass" permission, and players with the "litebans.notify.clearchat" permission will be notified when chat is cleared.

Warning actions will now inherit the silent flag from the warning itself. This means that if a player was warned silently and gets kicked or banned, it will be silent as well.
For existing configurations, this requires you to add "-s:$silent" to each warning action handled by LiteBans. See the new default configuration.

The web interface (litebans-php) has been updated: performance improvements, UUID compatibility fixes.

Cleaned up the default configuration.

Added "ban_names" configuration option to allow case-insensitive name bans for offline-mode servers.


Minor fixes:

Fixed /kick response being sent before the player is actually kicked.

The /mute command will now provide an error if mutes have been disabled in the configuration, instead of silently failing to work.

Fixed variables ($bannedUntil, etc) in ban broadcasts not being replaced in certain cases.

The history table will now be imported properly when importing from LiteBans.

1.8.1:
Fixed unmute broadcasts with the default messages.yml.
----------, Jul 12, 2015

Fixed /ipban broadcast for players that don't have permission to see the IP.
----------, Jun 25, 2015

Added unban and unmute broadcasts.
As with regular broadcasts, these require the permission "litebans.notify.broadcast", and can be used with "-s".

When IP-banning a player, it will broadcast the player name instead of the IP unless you're banning a specific IP address.
----------, Jun 25, 2015

Fixed "/kick <player> -s" not working.
Silent kicks will now display the silent prefix ( [Silent] ).
Fixed a rare exception probably caused by another plugin.
----------, Jun 25, 2015

Rewrote configuration handling completely to fix reset issues.
Changed the default database driver to SQLite so that the plugin can work out of the box.
----------, Jun 19, 2015

Fixed a harmless error that occurs when the plugin creates tables in the database for the first time.
----------, Jun 17, 2015

More configuration improvements. If the configuration fails to load, it will not be saved again. This will prevent configuration resets.

Setting "bungeecord: true" will now allow bans and mutes to be synchronized without reloading the plugin.
Previously, this would only work after the configuration was reloaded once.

Added warning if running an incompatible version of AuthMe, instead of throwing an error.
----------, Jun 17, 2015

Players that are offline when they are warned will now be notified of their new active warnings when they join.
2015-06-14_06.42.20__.png
This information is stored in the database and will work across servers.
It has also been added to the web interface.

Improved configuration handling. This might prevent the configuration from being reset. Again, I've never been able to reproduce this problem.

Added extra /unban functionality: if unbanning didn't work, the player will be unbanned when they try to reconnect.
This ensures that the unban command will always work.

Fixed importing from BanHammer.

Added aliases: /unban -> /pardon, /pardonip
----------, Jun 14, 2015

Added lockdown persistence after restarts (configurable).
Fixed unbanning error.
Fixed dupeip on join possibly being disabled after lockdown ends.
----------, Jun 11, 2015

Added /warnings command. This shows all active warnings for a player.

Added warning cooldown. By default, a player cannot be warned twice within 30 seconds.

/dupeip should no longer group together players that have an "undefined" IP address in the database.

The web interface has been updated and chat colors/newlines in ban reasons will now be shown properly.
----------, Jun 8, 2015

A ban check form has been added.
[​IMG]

The web interface also now uses PDO instead of MySQLi.
----------, Jun 6, 2015

Added /banlist command. This shows the last 5 bans placed by default, and can be paged through using "/banlist [page]".
Added "/litebans fixhistory" command which fetches missing names for UUIDs from Mojang, allowing the web interface and ban listing commands to work properly, if bans were imported using a previous version, or if history was cleared.
Fixed BanManagerv5 imported bans not showing up on the web interface. Run "/litebans fixhistory" after updating, no need to re-import bans.
/iphistory will no longer scan the last UUID associated with an IP address if an IP address is provided.
----------, May 20, 2015

Update for Spigot 1.8.4
----------, May 18, 2015

Fixed errors with SQLite / dupeip on join.
Fixed /iphistory not showing precise dates if the time format was changed.
Added /alts + /checkalts aliases to /dupeip.

Added some information about the configuration in the description, and updated the default configurations.
----------, May 15, 2015

Added litebans.togglechat.bypass permission. Players with this permission will have their chat displayed for players that have togglechat enabled.
Players with togglechat enabled will still be able to see their own messages in chat.
Fixed unbanning IP addresses if they have never joined the server before.
----------, May 4, 2015

Fixed /togglechat "unknown command" error.
----------, May 3, 2015

Fixed errors caused by /togglechat.
----------, May 3, 2015

Fixed /dupeip showing the amount of matching history entries instead of scanned IP addresses.
/dupeip will no longer scan all IP addresses by default. It can be enabled by setting 'dupeip_scan_all_ips' to true in the configuration.
Added exempt for dupeip on join, the permissions "litebans.exempt" and "litebans.exempt.dupeip_join" will prevent a player from being scanned on join.
Added "hidden_dupeip_players" list to the configuration, players in this list will not show up in /dupeip output.
Added /togglechat command.
/iphistory is now UUID-based.
Commands aren't overridden by default anymore. If this causes any issues I will revert the change.
(This shouldn't cause problems with Essentials, and I haven't encountered a plugin that conflicts with LiteBans, and it can still be enabled in the configuration)
----------, May 3, 2015

Fixed variables not being replaced in the hidden IP message for IP bans.
----------, Apr 22, 2015

Resource Information
Author:
----------
Total Downloads: 17,802
First Release: Feb 5, 2015
Last Update: Sep 30, 2024
Category: ---------------
All-Time Rating:
696 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings