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.