ClickSorted 1.1.1
Immutable
release. Only release title and notes can be modified.
ClickSorted 1.1.1 adds explicit Folia support, hardens shared state for Folia's per-region worker threads, and fixes sorting from inside ClickSorted's own GUIs.
Highlights
- Explicit Folia support — the plugin now declares
folia-supportedand makes all shared mutable state safe for Folia's per-region worker threads. - Lock GUI no longer sortable — sort triggers inside ClickSorted's own GUIs are now ignored unconditionally, so a click in the lock GUI can no longer rearrange its panes or the inventory beneath it.
- Atomic action throttle — the per-player throttle window is now updated atomically, closing a race under concurrent clicks.
Bug Fixes
- ClickSorted's own GUIs are never sorted — the lock GUI is a CHEST-type inventory that matched the sortable set, so a sort-trigger click inside it could rearrange its panes before the GUI listener cancelled the interaction. A
ClickSortedHoldermarker interface now makes the sort listener bail on any ClickSorted GUI, independent ofignore_plugin_inventory. - The action throttle window is now atomic, preventing a race when a player's clicks arrive concurrently.
Other Improvements
- Hardened shared mutable state for Folia:
CooldownMessenger's cooldown map is now aConcurrentHashMap(keyed by player UUID),GroupsConfigmappings are built locally and swapped atomically on reload, andItemsConfig/MainConfigreload swaps are published viavolatile. - Dropped the obsolete
SWAP_OFFHANDoffhand-reset workaround — modern Paper's inventory ack/sequence system reconciles the client prediction, so cancelling the event suffices. This removes the plugin's onlygetScheduler()call; an integration test pins the contract that a SWAP-triggered sort leaves the offhand untouched across a tick. - Replaced
plugin.ymlwithpaper-plugin.yml. - Avoided
InventoryViewmethod calls from plugin bytecode inLockGuiListener(usingInventoryEvent.getInventory()), preventingIncompatibleClassChangeErroracross 1.20.6/1.21. MessageUtilnow takes an AdventureAudienceinstead ofCommandSender, making the Adventure routing explicit and allowing any audience to be passed.- Made item-name lookup a pure read and removed test-only public methods with no production callers.
- Added a GitHub Actions CI workflow that runs the test suite on PRs (Java 25, matching the Paper API requirement).
Compatibility
✔️ Paper/Folia 1.20.6 – 26.1.x
✔️ Java 21
Upgrading
- Stop your server.
- Replace the old jar in
plugins/with this release. - Start your server.
What's Changed
- Support Folia explicitly and harden cross-thread/version safety by @kccricket in #43
- Never sort ClickSorted's own GUIs by @kccricket
- Make the action throttle window atomic by @kccricket
- Convert
plugin.ymltopaper-plugin.ymlby @kccricket - Optimize Adventure usage in
MessageUtilby @kccricket in #41 - Add GitHub Actions CI workflow to run tests on PRs by @kccricket in #42