Releases: ajgeiss0702/ajLeaderboards
v2.11.0 - Offline Updates, remove weeks from time format, + performance/bug fixes
Hey everyone! Here's a bunch of fixes/features that have accumulated since the last update. I'm mainly pushing this main release to fix the issues with the new Minecraft versioning, but it also includes a bunch of other new fixes/features that some people will like.
- Use probably faster way of fetching players' positions on the leaderboard. Should lead to less database cpu usage if you struggled with it before (no difference on my machine even with stress testing, but I didnt see issues with the old one. Some people testing pre-releases have reported it fixed their issues)
- Use Java Virtual Threads if they're available (Java 21+). This allows for more efficient updates, and should also help with native-thread-limited environments (such as servers running in containers).
- ajLeaderboards will still work on <Java 21, but I highly recommend updating your Java version (Java is highly backwards-compatible so it will almost certainly work without any changes needed)
- Added an option to allow occasional updates of all offline players. It is per-board and disabled by default because a lot of placeholders don't support updating offline players.
- Added an alert if the Trojan that breaks the ajLeaderboards jar is detected, with a link to how to remove it. This checks the ajLeaderboards jar both on startup, and on an interval (to catch if the jar is infected later, but before a restart in case it breaks the jar)
- Sometimes it's surprising the number of people coming to support with this issue. I'm hoping this will reduce that number slightly.
- The Trojan seems to have a bug that incorrectly modifies the ajLeaderboards jar when spreading itself, which usually causes the plugin to fail to load on the next restart (but can sometimes still load but have other issues)
- Don't use pirated/stolen premium plugins y'all. That the main source of this Trojan, which would then spread to all other plugins on the server. At best it's only a backdoor for your server (allowing anyone to get op). At worse, it will steal all your passwords and/or logged in sessions.
- ajLeaderboards can now track 5 decimals, but by default will still round to 2 when displaying it. If you want, you can raise the rounded decimals in the config (
round-decimal-places) - Added
show-zero-decimalswhich lets you show decimals for specific boards even if they're 0. - Added
time-format-display-weeksto the config that allows you to not display weeks (e.g. show17dinstead of2w 3d) - Added
skin_uuidplaceholder, which returns the UUID instead of the name. - Fixed ajLeaderboards not handling Minecraft's new versioning system properly
- ajLeaderboards checks the minecraft version to decide which APIs it can use. The previous version ignored the major version (first number). Now it doesn't and properly uses modern APIs on MC >26.1 servers.
- Updates (from db to display, not player stat updates) are now throttled sooner, since in most cases the stat is updated in-place in the in-memory cache when the player is updated. This should lessen the effects of an overloaded (slow) db.
- Reduced the frequency of some internal checks. This probably will have minimal to no effect on performance but better safe than sorry.
- Use a separate scheduled executor for calculating how overloaded the DB is. Previously this used the Bukkit scheduler which would for some reason sometimes go crazy and spawn a couple hundred threads. Using the normal java scheduled thread executor fixes this.
- Maybe handle some timezones a little better. Some people in edge-case timezones had issues with timed type resets before, this should be fixed now.
- Better database error handling, which should prevent some theoretical memory leaks. I never saw any actual leaks here (and the situation where it might happen was already pretty rare), but now its not even theoretical, so better.
- Use a custom mirror for downloading dependencies. This should hopefully fix issues where maven central (or the other mirror used previously) goes down or is blocked for some reason. Some hosts and some countries block these for some reason, so using my own mirror for this should fix those cases.
- Handle placeholders returning NaN or Infinite values (instead of erroring)
- Skip signs in worlds that don't (or no longer) exist instead of throwing an error every time a sign update was attempted.
- Added a known colon time placeholder (Parkour personal best)
- Added
parse-placeholders-in-placeholdersoption to parse PAPI (bracket) placeholders inside ajlb placeholders. - Allow specifying board name(s) in the webviewer command, in case all of your boards together are too big to upload
- Fixed the relative extra placeholder always saying the extra doesn't exist, even if it does (dumb mistake on my part, I was reading the wrong argument)
- ajLeaderboards skips scheduling a reset (using the bukkit scheduler) if it is more than 16 minutes away. ajLeaderboards checks if it should schedule resets every 15 minutes so this won't break resets, just skips unnecessary scheduling.
- Catch errors that could happen during plugin shutdown, if something tries to access the db after its already been disconnected from.
- Messed with the shutdown logic to close things down a little better. This is to hopefully prevent any other rare errors during shutdown.
- Fixed exports of boards with certain characters failing (due to illegal filename characters)
- Added a warning to the config that custom comments are replaced when the config is updated.
- Eventually I hope to have a config updating system that, among other things, would keep your custom comments. But this is probably a long way off, so a warning is good for now.
- Send the number of boards registered on the server to bStats (anonymous usage statistics). Eventually I hope this will let me advertise "Powering xxxx+ leaderboards" or something, but is also just a cool number to see.
As always, if you have any issues with this update, please let me know (preferably by joining my Discord, invite link on the plugin page)
v2.10.1 - Timed type fix
This is a quick update mainly to fix timed types completely breaking on h2 in 2.10.0
- Fixed timed types not working on h2
- Fixed a typo in the config
- FIxed a bug in the updater where the old jar would sometimes not be deleted
v2.10.0 - Mostly bugfixes
Hey y'all. Remember when I said hopefully there would be more updates in the last update? Funny. Anyways, heres an update!
Most changes in this update are bugfixes or to help clear up some common issues that people ask me about in support.
- Fixed an error that occurred when a plugin tried to parse a player placeholder without a player
- Change
more-fetchingdefault tofalse(This shouldn't make updates any slower, since the cache is modified during updates) - Added some placeholders from the Plan plugin to the list of known time placeholders
- Player placeholder update delays are now randomized a bit to spread out the updates a bit
- Only complain about interruptions if debug mode is enabled (this is mainly to get people to stop coming to support about an error when the server freezes. The error was a symptom of the server freezing, not a cause)
- Add an "Extra does not exist" error instead of returning --- to prevent confusion
- Fixed an error in the ajlb_total placeholders when any player had a fractional value (decimals)
- Added playtime_time as a known time placeholder
- Add a helpful warning message when the out of threads error is detected, which links to the crash report analyser
- Add a warning when the database rejects a string (instead of silently failing without debug)
- Use a single SQL query to update a player, instead of trying an insert, then updating if that fails. (i should have changed this forever ago)
- Fixed colors in time messages being parsed into minimessage
- Added a possible workaround for an error that happens sometimes when paper tried to remap the plugin jar. (updating to a newer version of paper is still the recommended fix for this, but hopefully this workaround will further reduce the error)
- Added number autocompletion to the sign add command
- Fixed the color placeholder not extracting &# hex colors
v2.9.0 - Folia support, total placeholder, and more
Holy cow, it's been 10 months since the last release. Sorry it's been so long since an update. I've still been making changes, but I made it harder to release when I tried to automate releases. Back to manual updates, hopefully slightly more often 🙂
- Fixed an error that could happen if a chat plugin returned a null prefix
- Add Folia support
- Fixed ColonTime format incorrectly parsing milliseconds
- Remove colon from past-resets file format
- Allow other types than alltime in the list command.
/ajlb list <board> [type] - Add placeholder to show the total (sum) of all players on the leaderboard
- Fixed an error that could happen if a player's name is unknown
- Prevent adding placeholders that are too long (I recommend using the shortcut expansion to make them shorter)
- Added
min-player-cache-timeoption to allow you to configure ajlb to fetch specific players (e.g. get their position) less often - Add
fast-shutdownoption. Mostly only useful for me, not recommended for most server owners. - Add PreTimedTypeResetEvent to allow devs to add custom rewards
- Added
%formatter_number_time_...%as a known time placeholder - Update adventure-platform-bukkit (to fix hover and click things in messages not working for newer mc versions)
- Fixed 0 in time format not being detected
- Remove illegal characters from reset save file names (if they are in board names)
- Added
time-format-display-secondsoption, which allows you to enable/disable showing the seconds in the time format - Added
more-fetchingoption, which allows you to make ajlb fetch from the database less often - Fixed head block and head item textures not being fetched correctly
- Added updater (so in the future you just have to do /ajlb update to update the plugin)
- Raise prefix/suffix/displayname max lengths
- Fixed an error that could happen if the sign format is less than 4 lines