4.7.0
- 0ad8876 - release
- 7f0169a - add faststats
- 9d39192 - treat UNDEFINED and FALSE state in LuckPerms as the same
- b57c539 - invert filter check
- 9cb98c7 - add PermissionCheckManager for permission plugin integration
- de76002 - Bump metcalfc/changelog-generator from 4.6.2 to 4.7.0 (#37)
- b8e5729 - format imports in SpigotTopHolderSettings
- 4b96002 - pre-calculate the context keys in LuckPerms Context
- 90049c5 - add a way to reload the hook
- cf1d4d7 - next development
4.6.0
- 0a4dfc4 - update topper
- 0e6a455 - update topper
- e4ffddd - release
- 3047776 - update topper
- 485e762 - Bump core.version from 4.7.6 to 4.8.0 (#36)
- 754956b - Bump org.apache.maven.plugins:maven-shade-plugin from 3.6.1 to 3.6.2 (#35)
- 5d7027d - Bump actions/upload-artifact from 6 to 7 (#34)
- c6775ad - Bump org.bstats:bstats-bukkit from 3.1.0 to 3.2.1 (#33)
- 7509fc4 - Bump org.jetbrains:annotations from 26.0.2 to 26.1.0 (#31)
- e1c69eb - Bump me.clip:placeholderapi from 2.11.7 to 2.12.2 (#30)
- bb74b31 - Bump org.apache.maven.plugins:maven-compiler-plugin (#26)
- fd14ba0 - update topper usage
- 3ea46a6 - simplify defaultLine
- 889cd54 - update topper usage
- 03500a9 - next development
4.5.0
- 047469a - Bump actions/upload-artifact from 5 to 6 (#22)
- 361245e - Bump core.version from 4.7.2 to 4.7.6 (#23)
- f4a2e2a - Bump org.sonatype.central:central-publishing-maven-plugin (#24)
- c02f0fa - update topper
- b133233 - add entry for online players on holder construction
- 40ec477 - release
- ca2c6a2 - standalone template for storage supplier
- 25c91ea - construct number storage in SpigotTopTemplate
- 4ef44b7 - use the new reload method
- 92554a8 - update topper
- 3b3b47f - next development
Change to the PaperMC's Name Provider
- Update the Name Provider for PaperMC to use its PlayerProfile API
After the last update, I had searched through the public API of PaperMC to see whether or not there is a way to get the name from UUID without using internal code. I found that their PlayerProfile API has a method to fill the profile from its internal cache, which is exactly what I did in the last update, so I implemented it in this update.
As a result, the supported version range of the feature was expanded, from 1.16.5 to the latest version. This also includes some forks that backported PaperMC's PlayerProfile API (PandaSpigot for example). Lastly, it's also future-proof, so that you won't have to wait for me updating the plugin every time a new Minecraft version is released.
For other versions that didn't implement PlayerProfile API, the plugin will fallback to use Bukkit API.
Name Cache for PaperMC servers
- Add a Name Provider that gets player name from PaperMC's Profile Cache
This is my attempt to optimize the task of getting player name for PaperMC servers.
The idea is to utilize the usercache.json file, which stores the player's name and UUID as cache to reduce the call to Mojang API. This could potentially resolve the problem with Bukkit API where it would repeatedly load the whole player profile from files every time the plugin calls to get the player name.
Because PaperMC made it easier to read internal Minecraft code since 1.21.4, this feature was implemented and tested on PaperMC from 1.21.4 to 1.21.10.
For older PaperMC versions and non-PaperMC servers, it will fallback to use Bukkit API instead.
Although this feature was tested in my test server, I don't have a server with a lot of players to test it in a real scenario. As always, report any issue you found in the Discord support server.
Optimizations & Name Provider
- Reduce some overhead in Update Task
Some users with their big servers kindly provided me with some insights of their server performance. That allows me to investigate further into the code and optimize it if it can be optimized.
I don't have my own server with a lot of players, just some of my friends and nothing more. Therefore, any contribution is welcomed, even if it's just a performance report, so that I can check the performance of Topper in several scenarios. - Add LastLoginAPI support
This plugin caches the player name even if they are offline. This allows Topper to get the player name directly from the API to display in the leaderboard.
No configuration is required. All you do is installing the API.
This is useful for servers where player data saving is disabled, since the player name is cached in LastLoginAPI. SQL databases are supported so it can be shared to multiple servers.
LuckPerms Context
- Add LuckPerms Context
This introduces a context for LuckPerms representing the rank of the player in the board. The context is cached by the snapshot agent, so, in theory, there is little to no performance impact to your server.
Mark of a new structure, with Quality-of-Life changes
The update is finally here after a long time of restructuring the codebase to prepare for more purposes of the Topper project and the upcoming cross-platform update. For me, it's just a matter of the separation of concerns, meaning I can now work with the project as a whole without affecting too much on the plugin. For you, this update is just another Quality-of-Life update, meaning there is no breaking change, and your current config remains the same. For other developers, this would be my welcome door for anyone to join in and contribute something. After all, I hope this update will be the first for something bigger. For now, enjoy the update.
- The whole codebase was refactored and separated
There is now the Topper project for common code on various purposes, and the Topper-spigot contains this plugin. - Change the default value to be "null" instead of 0
This mainly fix an issue with reversed leaderboards where the placeholder only works for some players. In previous versions, those players whom the placeholder doesn't work against would be assigned the default value of 0 and get to the top of the leaderboard. This update fix that by assigning null instead of 0 so that the player would be ignored. - Enable "online" option by default in some Value Providers
After dealing with many reports from the support channel, I saw that enabling "online" fixes many issues (performance drop, weird behavior for offline players, etc.). Therefore, the option is enabled by default in this update. - Normalize placeholder syntax in Placeholder Value Provider
Although the wiki has some examples on the placeholder with the percent character "%" at the start and end of the value, some users usually miss it and report back to me saying it's not working. This update attempts to correct the placeholder syntax on the fly, so that users feel at ease. - Add shorten format to the Value Display
OPmasterLEO make a contribution to add a format query to shorten the number (e.g. 1000 to 1k).
More information about the format will be added in the wiki.
In short, you can use the placeholder like "%topper_money;top_value;1;shorten%" to get the shortened number. - ...And a lot of changes
These changes will be described in the wiki when it's updated with new information. Keep an eye at the wiki.
Small patch before the big refactor
This is a small update before I refactor the project (again). This time, it's more of a preparation for a cross-platform update that, in theory, allows adding support for other server implementations (e.g. Fabric, Forge, Sponge). That would, in theory, make the project platform-independent and increase the popularity. Stay tuned for more updates.
- Fix a rare exception when updating values asynchronously
3.10.0
- de8ef62f - release
- ae96e639 - set only one filter for SnapshotAgent
- c815c18c - add a separated reset-permissions
- 085096d6 - add a way to reset the value if filtered out
- a7de570f - ensure the iterator is synchronous and add more settings for update task
- e2fa1adc - use ConcurrentHashMap for UpdateAgent
- 4c7066fe - prepare for more deformatters
- 09bc82fd - next development
3.9.1
https://github.com/Topper-MC/Topper/compare/3.8.2...3.9.1
3.8.1
- 866602b - release
- 91b02b8 - final onUpdate on AgentDataHolder
- 48e4f85 - Bump metcalfc/changelog-generator from 4.3.1 to 4.5.0 (#137)
- dae2511 - mark the event as deprecated
- c0b7a1b - optimize imports
- 77596ad - call event from EntryConsumeManager
- 91ba29f - protected method to schedule value on StorageAgent
- a3910c8 - properly get display key for SnapshotQuery
- 2c6773b - correct package for PluginContext
- 59be0b2 - next development
3.8.0
- bb6cdfb - release
- c4ab6c2 - update miniplaceholders usage
- 8c07622 - option to toggle data removal on entry remove
- c7f899b - put a check to ensure that the update task only runs if it's not already updating
- ebe65cc - Bump io.github.miniplaceholders:miniplaceholders-api from 2.2.3 to 2.3.0 (#135)
- 349d483 - more aliases for MiniPlaceholdersValueProvider
- 680f455 - resolve global placeholders
- d31fd97 - get all arguments in minimessage queue to parse as query
- 99f947a - should build in Java 21
- a7dbbe9 - mark as a major version
- aebb91e - add MiniPlaceholders hook... back
- ac2f16a - make QueryManager as Query
- 8db967e - decouple query forward
- fbe8bbf - single ref for Snapshot map
- 482d188 - centralize group name
- 63d6312 - remove entry from storage if it's the default value
- 625d634 - Bump core.version from 4.5.7 to 4.6.0 (#134)
- 558c24d - Bump org.apache.maven.plugins:maven-compiler-plugin (#133)
- 6b37f10 - consume entry on update
- 8cab982 - add EntryConsumeManager
- d7400a9 - display rank
- df71ed9 - option to load storage on entry create
- 96d46d6 - next development
3.7.1
- 35a8ced - release
- 1d07076 - properly support deletion in StorageAgent
- 756198d - allow trailing empty string in ComplexValueConverter
- d898c10 - set HashMap in DatabaseConfig
- c6e2c1b - next development
3.7.0
- 2a90c94 - release
- 9e633e3 - use AtomicReference in DataEntry
- 9951401 - correct behavior of reverse in NumberTopHolder
- 89e3c26 - clean unused suppress
- 268828b - split storage-simple into modules
- 660be09 - next development
3.6.0
- 502180e - release
- d48c7eb - add NumberStringDeformatter
- 6f9a1de - add method to convert ValueWrapper to Optional
- 156d59f - use switch to get value from ValueProvider
- 0e54d61 - cleanup some useless code in ValueProvider modules
- 1c8d6c3 - mark as a major update
- be515f7 - move ValueProvider to a separated module
- 6391546 - dynamically traverse modules to update project versions
- e88e841 - add ValueState to indicate a value being handled
- 77b43d6 - next development
3.5.0
- 27f4db5 - add top_size query
- e1a6a72 - realize nullability in the query
- a948dae - release
- d72aad8 - static logger in StorageAgent and UpdateAgent
- bff7a1f - remove old placeholder expansion
- e7a80d6 - support ticks in time unit
- 0f29270 - add QueryForwardManager
- 27ae7f4 - add groupingSize to decimal format
- db11919 - add advanced decimal and time format to ValueDisplay
- 496b9c9 - move formatted settings to its own section
- cf84140 - standalone DatabaseConfig
- 7138473 - remove MiniPlaceholders hook
- 8171841 - apply global and player placeholders to MiniPlaceholdersHook
- 62672c0 - add MiniPlaceholders hook
- e877708 - add a workaround for formatted string
- 0e8881c - move common code from PlaceholderValueProvider to NumberStringValueProvider
- 04c0958 - customize separator in SimpleQueryContext
- b530b15 - more adaptive QueryManager
- 57fc8fb - add holder argument to getKeyFromActor
- c2d58e5 - support single holder in QueryManager
- 511a29a - centralize SqlStorageSupplier constructor
- 13b2bb8 - abstract SnapshotAgent
- b06b7c3 - Bump org.jetbrains:annotations from 26.0.1 to 26.0.2 (#131)
- 167f7b4 - add ignore-permission to Spigot plugin
- 547135c - add filter to UpdateAgent
- 85111aa - make standalone DatabaseSetting for more database types
- 0a340fd - modifiable sql type in SimpleValueConverter
- 5a72bcb - just to make sure if there is any breaking change
- 9aa34c6 - next development
3.4.2
- b1b7a7e - release
- 25a50d4 - Update maven-release.yml
- 9339079 - move some connection code to utilize try-with-resource
- 47c180b - use lock when the database is single-threaded only
- 3440263 - add lock to modify sql storage
- 732ffa7 - Revert "try connection per transaction on SQLite"
- 1c439f7 - Revert "move duplicated code in sql storage"
- 79ee0de - move duplicated code in sql storage
- 29c6e91 - commit the table creation
- bab3ea3 - try connection per transaction on SQLite
- 00a3adf - next development