Releases: A248/LibertyBans
A Modest Leap Forward
This Leap Day release brings additional stabilization to the 1.1.0 series. Mostly, this consists of solving a few edge cases, making LibertyBans more correct, more accurate, and closer to perfection. We also have a few new features and improvements.
There are no breaking changes in this release compared to 1.1.0-RC1. However, if you are upgrading from 1.0.x, please read the relevant guide for compatibility considerations.
Bug-fixes:
- Use serializable isolation to fully handle overlapping punishment commands (b10c847)
- Smoothly transition the mute cache across usage of /libertybans restart (9cb950b)
- Detecting the plugin messaging channel no longer emits false warnings (2985be9)
New features:
- Fantastic Polish translation by @szyha (#242)
- The exemption addon based on LuckPerms weights can now be configured to exempt targets with the same weight as the operator (#249)
Improvements:
- Resolve literal UUID arguments in more places (063de6c)
- Include sub-commands like version, usage, and help in tab-completion (063de6c)
Other:
Closer to 1.1.0: Are we there yet?
Having accomplished a slew of exciting new features, this release prepares the way for the impending LibertyBans 1.1.0. The progress made since 1.0.x, in the form of 1.1.0-M1, 1.1.0-M2, and 1.1.0-M3 now enters the release candidate phase.
I would like to thank everyone who tested the layouts feature while it was in development builds. I don't remember who everyone is, but please feel free to remind me if you don't see yourself inside /libertybans about
.
There are no breaking changes in this release compared to 1.1.0-M3. However, if you are upgrading from 1.0.x, please read the relevant guide for compatibility considerations.
Bug-fixes:
- UUID mismatch on Sponge when player info forwarding is configured (#229))
- The 'show-applicable-for-history' turned /warns into /history (fb14929)
- Folia-specific deadlock on tab completion (#224)
New features:
- Punishment layouts, based on a tiered system of escalation. Also known variously as templates, stacked punishments, escalation tracks, etc. (#180)
- Kick player via plugin messaging (f7d228d and 235dace)
- Scoped punishments applicable to a configured server or group of servers (#146)
API improvements:
- Add method to get back a builder from a draft punishment by @MCMDEV and @KoxSosen (#211)
- API for alt detection and management (fdf46d9)
- Allow retrieving player name from
PostPunishEvent
andPostPardonEvent
(#76) - Complete API for server scopes (#146)
Other:
- Create a standalone implementation, currently intended for zxfq's web panel (ed6215b)
- Faster unmute resolution when synchronizing across instances (19a6494)
- Add warning to Sponge if newer listener registration API unavailable (19a6494)
- Initialize the H2 driver if possible; improve driver initialization generally (fb14929)
In 1.1.0, all API additions since 1.0.x will become enshrined in our semantic versioning guarantee, a basic requirement for a stable API not provided by competing punishment plugins. This release candidate (RC) serves the purpose of easing the rollout of 1.1.0 in a gradual, stable fashion. Remember, our Versioning and Support Policy means that anyone, from individual servers to large networks running multiple instances, can enjoy the stability of a LibertyBans release and rest assured that they will receive critical bug-fixes.
A Release of Relief
With this release comes compatibility improvements and bug-fixes for the most recent Minecraft versions. LibertyBans is now guaranteed to work on 1.20 and 1.20.1 despite changes to server libraries and Paper APIs.
It is again possible to run LibertyBans on the older MariaDB versions 10.3, 10.4, and 10.5. Many users shared hosts' do not yet provide newer MariaDB versions. However, we nonetheless strongly encourage users to pressure hosts to update their database servers. Operating a more recent database will make your server run smoother and be more responsive to gameplay. It will also enable plugin developers to write code more effectively -- and better code means fewer bugs, sleeker design, and high-quality features.
There are no breaking changes in this release compared to 1.1.0-M2. However, if you are upgrading from 1.0.x, please read the relevant guide for compatibility considerations.
Bug-fixes:
- Compatibility with Spigot/Paper 1.20's library changes (#215)
- Add Paper 1.20.1 support due to Folia API transplant (#219)
- Avoid printing warning message on newer Velocity versions due to added library (#214)
- Redeclare API methods to preserve binary compatibility (#207)
New features:
- Add shortcut-reasons addon (#124)
- Support MariaDB 10.3-10.5 by rewriting queries (4a5a095)
- Ban Bedrock users even when Floodgate isn't installed, by overriding prefix detection (#195)
API improvements:
- Add DraftPunishment setter to PunishEvent. Enables modifying the reason and other details when a new punishment is created, as in the shortcut-reasons addon (#212)
Other:
- Add Folia support (#206)
Attentive users will observe that I (A248) have returned from a personal hiatus due to travel purposes. However, I am very grateful to Simon, LibertyBans' co-maintainer, for providing hot-fixes and development builds when newer Spigot and Paper versions broke LibertyBans. Thanks to Simon, and also @potatoru for contributing a PR, the bugs were quashed within a couple weeks, at least in development builds. All praise and well-being due to whichever deity you worship, we have now reached a stable release wherein the compatibility bugs are eradicated for good. Therefore I am happy, and relieved, to present this release to you.
St. Patrick's Day Release: 400 commits, 100 stars
With this release, LibertyBans reaches the 400th commit and the 100th star, milestones of development and beacons of progress. Since the last release, a slew of features have arrived to LibertyBans, enabled by our magnificent addon system. In recent months a competitor has decided to add a partially-implemented importing feature from LibertyBans -- scandal! -- so the race is on. We intend to ride ahead on a powerful engine of free software fueled by a relentlessly organized codebase.
There are no breaking changes in this release compared to 1.1.0-M1. However, if you are upgrading from 1.0.x, please read the relevant guide for compatibility considerations.
Bug-fixes:
- Correctly catch all invalid durations. Some edge-cases resulted in a permanent punishment being specified (9fc7335)
New features:
- Extend the duration of a punishment with
/libertybans extend
(#115) - Show applicable punishments in history if configured (#157)
- Censor IP addresses in punishment messages for users without a certain permission (#101)
- Expunge (purge) a punishment so that it is fully erased from history (#119)
API improvements:
- Dramatically expanded the selection API to allow retrieving applicable punishments, using the same base interface as for selecting punishments for a set of victims (#162)
- Modify punishment end date, reason, and scope (#115)
- Expunge a punishment using the API (e93b317)
Other:
Making a Banlist and Checking It Twice
Welcome and Merry Christmas. This special and wonderful update constitutes a Christmas present. We bring you new APIs, the highly-demanded exemption feature, and automatic Geyser/Floodgate detection.
However, because it is Christmas, you have to be nice! So, you need to read the new requirements for LibertyBans 1.1.0 before installing it. If you're naughty, you install plugins without reading their documentation.
Please read the page on updating from 1.0.x to 1.1.0
This release, 1.1.0-M1, is a "milestone" release, meaning it contains many features intended for 1.1.0. However, the new features in 1.1.0-M1 are officially unstable and may be subject to change. All feature and API additions become officially stabilized in 1.1.0. This is in accordance with semver.
The Gifts of this Release
Bug-fixes:
- Running a list command, such as /history, with a page argument of 0 caused an exception (e986571)
- Properly document behavior of
STRICT
address-strictness and add setting forSTERN
(#187) - Wait for database threads to fully shut down (#189)
Improvements:
- Automatically determine Geyser/Floodgate prefix (#43)
- Implement exemption using LuckPerms and Vault. Be sure to thank @BlueTree242 for providing creative suggestions, such as using LuckPerms weights, to support exemption. We are indebted to this user's inspiration (#131)
- Use newer dependencies; requires MariaDB 10.6 (9ec5061)
- Updates to selection API:
- Select punishments before given time thanks to @FreakyRed (#179)
- Select number of punishments and filter by victim type (#158 and ece3120)
Other:
- Add wiki page summarizing alt-prevention mechanisms (b6d5480)
- Fix wiki table of contents by @ahdg6 (#175)
- Updated setup-java to v3 by @AdrianButler (#185)
- Code cleanup using Java 17 (e513466)
Roadmap to 1.1.0
Looking forward, we have:
- 1.1.0-M1, this release.
- 1.1.0-M2, coming 17 January.
- Potentially other milestone releases.
- 1.1.0 itself.
The page on Upgrading from 1.0.x to 1.1.0 will continue to receive updates as we progress through the completion of version 1.1.0. The full changelog is also available.
Github "milestones", not to be confused with "milestone" releases, provide a rough outline of the plan to complete each feature. Note that milestones are used flexibly, strictly for convenience of planning. Placement on a milestone is no guarantee of a feature's completion.
Please remember that we follow no timelines as this is a free software project maintained primarily by a single obsessively-academic college student. It is an intellectual exercise, however, to deliver the highest quality of features with ambition, creativity, and tact as we aim to surpass all other punishment plugins.
Merry Christmas
Sponge Platform + Relocation Immunity
Hereafter, LibertyBans supports the Sponge platform, API versions 8 and above. This development, we hope, will extend the usability of LibertyBans. Deployable in many varieties of environments yet utilizing common code, LibertyBans has always been designed to support multiple platforms. The Sponge API is the natural continuation of this impetus.
Moreover, we have solved, by a clever exploit, the longstanding issue which made LibertyBans vulnerable to bugs in other plugins. Specifically, unrelocated libraries in other plugins will no longer affect LibertyBans. We will continue to recommend you to fix these bugs, because your server's stability is our concern too. However, LibertyBans will be able to proceed despite these situations.
Bugs fixed:
- Fixed an embarrasing bug which caused importing from BanManager to be impossible, since
/libertybans import banmanager
was not recognized (0d43698) - Updated database revision per previous change in 1.0.3 (cca6ef9)
Feature additions:
- Sponge support. API 8 and API 9 are supported (#99)
- The checkuser addon provides the
/checkuser
command, thanks to @SnakeAmazing . This addon displays whether a user has an applicable ban or mute (#168) - The
LibertyBans/internal/attachments
folder allows attaching driver jars, which is useful for importing from LiteBans H2 (0d43698)
Other:
The Addon System Debut
In this release, we formally introduce the new addon system for extending LibertyBans. With the addon system, we can boldly engage ambitious feature requests. Addons require absolutely no performance overhead -- they interface directly with LibertyBans, exactly as if the addons were written into the main plugin.
I understand some users are not enthusiastic about having to install addons rather than configure features. We implemented an addon system to make the core plugin more approachable for beginners and more maintainable for developers. New users ought not to be confronted with a dizzying array of everything we have to offer. Also, the separation of additional features into addons significantly improves code quality through its imposition of clean organization. I have sung the benefits of code quality numerous times, and it is part of our development philosophy.
Velocity users: It is a known issue that LibertyBans cannot enforce mutes. Chat sent by 1.19.1 clients cannot be cancelled, and this is enforced by Velocity. See this Velocity issue for more information: PaperMC/Velocity#804. For a workaround, install LibertyBans on the backend servers and configure multi-instance synchronization as documented on the wiki.
Bugs fixed:
- Fix message prefix failing to display in some circumstances. Reported by Notro over Discord (ad90605)
- Detect Slf4j properly when LibertyBans runs on Spigot 1.16.5+. Does not include Paper (a3bd2e7)
- Deadlock when tab completion is requested asynchronously, in rare scenarios, on recent Spigot/Paper (a045c93)
Improvements:
- Hide tab completion if player does not have permission to execute the command (#155)
- Add additional constraints to the database layer for IP address length; the application layer has checked these constraints since 1.0.0 (d519c84)
- Eliminate some inefficiencies to hasten startup and database tasks (bead0e8 and 7f373df)
- Various improvements to usability, documentation, and ecosystem friendliness, with contributions from @ahdg6 and @D3adhkwen (#156, #163, 946b96d, d93c23c, 10a7a00, fb285f1, a045c93, and 5b879e5)
- Internal changes
Feature additions:
- The tremendous addon system. The addon installation process is documented on the wiki. (#46)
- Allow showing all punishments in /blame (#110)
Addons released:
- The CheckPunish addon provides the
/libertybans checkpunish <id>
command (#93) - StaffRollback enables
/libertybans staffrollback
which rolls back punishments made by a staff member. Includes a confirmation message if configured (#86) - Warn Actions allows defining commands to be executed or automatic punishments to be levied when a player reaches a certain number of active warnings (#62)
The significance of the release date: I originally intended this release for yesterday, August the 16th, a famous birthday. Also, there are two existing LibertyBans releases on 16th's of other months.
July 4 Anniversary Release
Hello friends, and welcome to the two-year anniversary of LibertyBans' release on SpigotMC.
The first release on SpigotMC, on July 4 2020, was riddled with bugs and largely untested. The plugin acquired prime functionality starting in about December 2020. Therefore, it is appropriate and ironic that this release, 1.0.2, is mainly a bug-fix release. It is our stated philosophy to prioritize bug fixes over new feature requests.
Bugs fixed:
- Overhauled mute caching to fix several bugs and improve efficiency (#142 and #153)
- Don't suggest punishment duration for kick command (#144)
- Adjust ID sequences after self-import (#148)
Features added:
- Fantastic Traditional Chinese translation by @xMikux (#138)
- Brilliant German translation by @thevalleyy (#154)
Other:
- Improved detection of unrelocated libraries on BungeeCord (f2188d9)
- Better, cleaner shutdown with respect to database operations (648dc91)
- Pre-initialize JOOQ classes to prevent query timeout (8078083) and more descriptive exceptions when query timeout occurs nonetheless (c506ad1)
Since July 4 2020, LibertyBans has made remarkable progress. We crossed the 1.0.0 milestone at the beginning of this year and thenceforth began to guarantee a stable API, with new ambitious features such as PostgreSQL support and multi-instance synchronization. To increase adoption and accessibility, we provided more importing features and approved new translations. We intend to continue this progress to meet the great volume of feature requests on the issue tracker.
None of this would be possible without you, the user. Individual contributions drive the search for perfection by finding unexpected behavior and identifying areas of improvement that may not be otherwise visible to primary authors. Almost all the changes in this release were motivated by user reports or direct contributions. Thus the /libertybans
command, without any arguments, displays all users who have contributed, in any fashion, to the development of LibertyBans.
What Could Be Dubiously Called a Valentine's Day Release
This release, I have no sprawling sentences of extravaganza to entertain your mind. Nevertheless, significant happenings abound! It was recently announced on the associated community discord server that Simon and myself will be working to re-shape that discord server into a broader community. In that announcement, you will find many wonderful words and phrases.
In addition to the changes described below, the list of contributors and commended users in /libertybans about
was updated in this release.
Bug-fixes:
- Fix TooManyRowsException when punishing composite victim (#117)
- Solved a database performance regression in 1.0.0. This was identified by Franciscoyt94 (#136)
Features added:
- New French translation by @zendrique (#134)
- New Norwegian translation by @BeastyBoo (#121)
- Added a connection limit per IP address (#45)
- Import from BanManager (#125)
- Added the ability to convert between storage backends (#71)
- Time-based expiration of alt accounts with respect to /alts and the auto-show feature (#77)
Other:
- Fixed an issue for contributors which caused disk space leaks when building locally (#128)
- Updated Russian translation (#113)
- Updated README and documentation
Please note, if you are on 0.8.1 and waiting for the 0.8.2 release, rest assured that 0.8.2 with its promised 1.x compatibility mode will still be released at some point. Such a compatibility mode requires a non-trivial amount of development effort. Moreover, we re-affirm the long-term support policy that 0.8.x will remain supported until at least 4 months since the availability of 0.8.2.
New Year's Release: The Fabled 1.0.0
Introducing the long-awaited, much-anticipated, rumored and reputed release of the times!
1.0.0 is officially released in stable form!
This New Year's special release brings a guaranteed stable API to LibertyBans, providing a solid basis for a healthy and long-lasting period of growth for the plugin and its community.
New features and improvements:
- Multi-proxy synchronization (#44 and #100). LibertyBans now operates fully-featured on multi-proxy setups; it is possible to ban, mute, warn, and kick players on other backend servers, as well as undo punishments. See the wiki for more information.
- Better documentation. All documentation is located at https://libertybans.org. The database schema is now better documented (#78).
- PostgreSQL support (#48). At least PostgreSQL 12 is required. Included is experimental support for CockroachDB, a database which is quite alike to PostgreSQL and tries to emulate it.
- Composite victims (#73). This powerful feature, while somewhat advanced in nature, is applicable to several use cases. See the wiki for more information.
- Added a %PREVIOUSPAGE% variable (#87).
- Added new variables to punishment messages: %TYPE_VERB%, %TIME_PASSED_SIMPLE%, %TIME_REMAINING_SIMPLE%, %HAS_EXPIRED% (#109).
- Permissions have been redone to follow a direct pattern (#25).
- Tab completion now ignores case (#111).
Improvements to usability, to make LibertyBans a more popular plugin (in the traditional sense of the word popular):
- In release builds, HikariCP is relocated in LibertyBans (0f22160). So, the presence of unrelocated HikariCP copies in other plugins -- bugs, which must be remedied -- will not prevent the operation of LibertyBans.
- It is still imperative to fix bugs in your server as a responsible and competent administrator. LibertyBans will continue to warn the user when unrelocated dependencies are detected.
- On Velocity, the plugin which failed to relocate is now identified (#92).
- An informative error message is printed when users do not have the proper SQL permissions (5cc7b40). This mitigates a pterodactyl bug which causes pterodactyl to grant insufficient SQL permissions.
- The pterodactyl bug is unfortunate because it prevents use of certain advanced SQL features. Appropriate use of language features is a mark of code quality. Consequently, the pterodactyl bug demotes coding practices in plugins, leading to lower-quality software.
- Please "thumbs up" this pull request to show your support for fixing ecosystem-damaging bugs: pterodactyl/panel#3800 (Simply upvote - do not post unnecessary comments). When this bug is fixed, plugin developers will be emboldened to use more advanced SQL, enhancing their programmatic capabilities and enabling more effective and powerful plugins.
For existing users, a robust and easy (hopefully easy) migration path from 0.8.x is provided:
- Migration Guide
- The migration guide currently does not cover having a LibertyBans 0.8.x instance co-exist with 1.0.0 on the same database.
- A compatibility mode will be created in LibertyBans 0.8.2, an upcoming release, providing the ability to have LibertyBans 0.8.2 co-exist on the same database with 1.0.x.
- Until 0.8.2 is released with this compatibility mode, it will not be possible to operate a LibertyBans 0.8.x instance on the same database as 1.0.x, and it should not be tried, either.
A reminder and some comments on the long-term support policy:
- At a bare minimum, LibertyBans major releases are supported for at least 4 months after a new major release. This means LibertyBans 0.8.x will be supported until at least May 2022, which is a long time from now.
- Since LibertyBans 0.8.2 (an upcoming 0.8.x version which will provide a compatibility mode with 1.0.0) has not yet been released, I will start the long-term support schedule once this version is released. This is because I consider the long-term support period to be for the purpose of migration, and migration is most feasible when all compatibility options have been released.
- In practice, I may decide to extend support for LibertyBans 0.8.x past the minimum of 4 months. I will do this if I learn of users who need to remain on 0.8.x for one reason or another, or who otherwise require a significant effort to upgrade to 1.0.0 on account of breaking changes.