Conversation
- RankCondition#getConditionList handles non-array fields - Catch exceptions and rethrow as RankException
Marking rank data dirty instead of player data, oops
"name" and "power" are now rejected in addition to "condition"
- rank creation during load no longer uses setCondition() but injects the condition directly, avoiding side effects which are unwanted during load - moved readPermssions and writePermissions into RankImpl, the only class which uses them - on read, non-primitive json permission nodes are now warned about and not added to the permissions map at all - on write, unexpected permission node classes are warned about and not added to the json object at all
- Fix NPE if node values end with ".*" - Don't use setCondition() in fromJson()
Saves should be retried next time in case the error is a transient one Also log at error rather than warn level
Also set its side to BOTH in neoforge.mods.toml
Vanilla playtime stat is an integer value so unavoidably limited, but we should use a long comparison to avoid false positives (a value of >= ~178 weeks gives a negative tick count in integer arithmetic) Invalid unit names now throw a RankException, causing the rank not to load, rather than defaulting to seconds, which is silently misleading.
If power <= 0, log a warning and set power to 1
FTBRanksAPIImpl#serverStarted now rethrows any IOException it gets as an IllegalStateException to ensure rank load errors at startup are fatal. Server should not continue in this situation. RankManagerImpl#readRankFile now rethrows any RankException it gets as an IOException after doing some informative logging about the error (including file and rank id).
- Pack sourced ranks now override server sourced ranks - Pack sourced ranks cannot be edited by command, and ftbranks-pack.json5 file should not be edited by admins either - Now writes a default ftbranks-pack.json5 file with a comment explaining that it must not be edited
- Ranks are now properly namespaced with "server." and "pack." prefixes - Rank name clashes between sources are no longer possible - Rank editing commands can only work on "server." ranks - Rank viewing commands can work on any rank - Rank suggestions in commands are now always prefixed with the namespace, but unprefixed ranks are accepted, prefixed with "server."
Deprecated Rank#getName, use Rank#getDisplayName instead Updated some javadocs
Fixes removing a non-existent node being successful and spuriously firing an event & marking ranks as dirty.
- rank IDs are all now normalized when loaded from file; if changed, a warning is logged - all commands which take a rank ID argument now use StringArgument.word() - add validation for all boolean conditions, throwing RankException if needed - fixed RefreshReadmeCommand always reporting success - fixed ShowRankCommand always reporting failure
getAddedRanks() needs to use this and not auto-vivify player data when checking what ranks are added to a player.
Also tightened up caller check in FTBRanksAPI#setup Made all events in FTBRanksEvents final
- Added PlayerRankCache, a short-lived cache of player->ranks, which is valid for one server tick. Can significantly reduce rank scanning for players, e.g. when formatting chat messages. - Added a getPermissionValue() variant taking a `checkParentNodes` boolean (default true for backwards compat). When false, _only_ the exact queried node is checked. Useful optimization for chat formatting. - Dropped defaulted `RankManager#getRanks` method, now uses PlayerRankCache
Also improved javadocs in a couple of places & minor cleanup
MichaelHillcox
approved these changes
Sep 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.