Scope
A leaderboard system for ranking factions by configurable criteria, with both command and GUI support.
- Command-based leaderboard view (e.g.,
/f leaderboard [criteria] or /f top)
- GUI page with sorting and pagination
- Configurable ranking criteria: power, territory count, treasury balance, member count
- Pagination for large server populations
Implementation Details
Data access already available:
FactionManager.getAllFactions() — returns Collection<Faction> (line 346-354)
PowerManager.getFactionPower(factionId) / getFactionMaxPower()
faction.getClaimCount() — territory count
faction.getMemberCount() — member count
faction.economy().balance() — treasury balance
faction.createdAt() — faction age
Reference implementations for sorting/pagination:
FactionBrowserPage.java (lines 197-200) — sorts by POWER, MEMBERS, NAME
NewPlayerBrowsePage.java (lines 226-229) — similar sorting pattern
AdminEconomyPage.java (lines 214-219) — sorts by BALANCE, NAME, MEMBERS
Suggested command: /f leaderboard [power|territory|balance|members] (default: power)
GUI approach:
- Create
FactionLeaderboardPage.java extending InteractiveCustomUIPage<FactionLeaderboardData>
- Reuse sorting patterns from
FactionBrowserPage
- Register in
FactionPageRegistry.java
- Support sort mode toggle (dropdown or cycle button)
- 10 entries per page with pagination controls
Risks and Alternatives
- Performance consideration with many factions — should cache/sort periodically rather than on each request
- Could optionally expose as placeholders too (e.g.,
%hyperfactions_leaderboard_1_name%)
- Alternative: text-only command output without GUI page (simpler, faster)
References and Media
Similar to FactionsUUID /f top command. GUI pattern follows existing FactionBrowserPage.java implementation.
Scope
A leaderboard system for ranking factions by configurable criteria, with both command and GUI support.
/f leaderboard [criteria]or/f top)Implementation Details
Data access already available:
FactionManager.getAllFactions()— returnsCollection<Faction>(line 346-354)PowerManager.getFactionPower(factionId)/getFactionMaxPower()faction.getClaimCount()— territory countfaction.getMemberCount()— member countfaction.economy().balance()— treasury balancefaction.createdAt()— faction ageReference implementations for sorting/pagination:
FactionBrowserPage.java(lines 197-200) — sorts by POWER, MEMBERS, NAMENewPlayerBrowsePage.java(lines 226-229) — similar sorting patternAdminEconomyPage.java(lines 214-219) — sorts by BALANCE, NAME, MEMBERSSuggested command:
/f leaderboard [power|territory|balance|members](default: power)GUI approach:
FactionLeaderboardPage.javaextendingInteractiveCustomUIPage<FactionLeaderboardData>FactionBrowserPageFactionPageRegistry.javaRisks and Alternatives
%hyperfactions_leaderboard_1_name%)References and Media
Similar to FactionsUUID
/f topcommand. GUI pattern follows existingFactionBrowserPage.javaimplementation.