Skip to main content

๐Ÿ“Š StatsService

StatsService lets developers read stored EventForge player stats and event history.

This is useful for:

  • player profile menus
  • Discord stats commands
  • web dashboards
  • holograms
  • leaderboards
  • admin panels
  • analytics tools

Accessing the serviceโ€‹

StatsService statsService = EventForgeAPI.getStatsService();

Always check the API first:

if (!EventForgeAPI.isAvailable()) {
return;
}

Available methodsโ€‹

Optional<PlayerStatsInfo> getPlayerStats(UUID uuid);

Optional<PlayerStatsInfo> getPlayerStats(OfflinePlayer player);

Optional<PlayerEventStatsInfo> getPlayerEventStats(UUID uuid, String eventId);

Set<PlayerStatsInfo> getAllPlayerStats();

List<EventHistoryInfo> getEventHistory();

List<EventHistoryInfo> getRecentEventHistory(int limit);

int getTrackedPlayerCount();

int getHistoryCount();

Player statsโ€‹

Get stored stats for a player:

StatsService statsService = EventForgeAPI.getStatsService();

statsService.getPlayerStats(player.getUniqueId()).ifPresent(stats -> {
player.sendMessage("Events played: " + stats.getEventsPlayed());
player.sendMessage("Wins: " + stats.getWins());
player.sendMessage("Total score: " + stats.getTotalScore());
player.sendMessage("Best score: " + stats.getBestScore());
});

Offline player statsโ€‹

OfflinePlayer target = Bukkit.getOfflinePlayer("Steve");

EventForgeAPI.getStatsService()
.getPlayerStats(target)
.ifPresent(stats -> {
Bukkit.getLogger().info(target.getName()
+ " has played "
+ stats.getEventsPlayed()
+ " events.");
});

Per-event player statsโ€‹

StatsService statsService = EventForgeAPI.getStatsService();

statsService.getPlayerEventStats(player.getUniqueId(), "mining_rush")
.ifPresent(eventStats -> {
player.sendMessage("Mining Rush played: " + eventStats.getPlayed());
player.sendMessage("Mining Rush wins: " + eventStats.getWins());
player.sendMessage("Mining Rush best score: " + eventStats.getBestScore());
});

All tracked player statsโ€‹

Set<PlayerStatsInfo> allStats = EventForgeAPI.getStatsService().getAllPlayerStats();

for (PlayerStatsInfo stats : allStats) {
Bukkit.getLogger().info(stats.getName()
+ " - wins: "
+ stats.getWins());
}

Event historyโ€‹

Get all stored event history:

List<EventHistoryInfo> history = EventForgeAPI.getStatsService().getEventHistory();

Get recent history:

List<EventHistoryInfo> recent = EventForgeAPI.getStatsService().getRecentEventHistory(5);

Example:

for (EventHistoryInfo entry : recent) {
Bukkit.getLogger().info(entry.getEventDisplayName()
+ " ended with "
+ entry.getParticipants()
+ " participant(s).");
}

Event winnersโ€‹

EventHistoryInfo includes winner entries.

for (EventHistoryInfo history : EventForgeAPI.getStatsService().getRecentEventHistory(5)) {
Bukkit.getLogger().info("Event: " + history.getEventId());

for (EventWinnerInfo winner : history.getWinners()) {
Bukkit.getLogger().info("#"
+ winner.getPosition()
+ " "
+ winner.getName()
+ " - "
+ winner.getScore());
}
}

PlayerStatsInfoโ€‹

PlayerStatsInfo contains stored player totals.

UUID uuid = stats.getUuid();
String name = stats.getName();

int eventsPlayed = stats.getEventsPlayed();
int wins = stats.getWins();
int totalScore = stats.getTotalScore();
int bestScore = stats.getBestScore();

Map<String, PlayerEventStatsInfo> eventStats = stats.getEventStats();

PlayerEventStatsInfoโ€‹

PlayerEventStatsInfo contains stored stats for one event type.

String eventId = eventStats.getEventId();

int played = eventStats.getPlayed();
int wins = eventStats.getWins();
int totalScore = eventStats.getTotalScore();
int bestScore = eventStats.getBestScore();

EventHistoryInfoโ€‹

EventHistoryInfo contains a completed event history entry.

String eventId = history.getEventId();
String displayName = history.getEventDisplayName();

long endedAt = history.getEndedAt();
int participants = history.getParticipants();

List<EventWinnerInfo> winners = history.getWinners();

EventWinnerInfoโ€‹

EventWinnerInfo contains winner data from a completed event.

int position = winner.getPosition();
UUID uuid = winner.getUuid();
String name = winner.getName();
int score = winner.getScore();

Example: player profile menuโ€‹

private void sendProfile(Player player) {
StatsService statsService = EventForgeAPI.getStatsService();

statsService.getPlayerStats(player.getUniqueId()).ifPresentOrElse(stats -> {
player.sendMessage("Events played: " + stats.getEventsPlayed());
player.sendMessage("Wins: " + stats.getWins());
player.sendMessage("Best score: " + stats.getBestScore());
}, () -> {
player.sendMessage("No EventForge stats found.");
});
}

Example: recent history commandโ€‹

private void sendRecentHistory(CommandSender sender) {
StatsService statsService = EventForgeAPI.getStatsService();

for (EventHistoryInfo entry : statsService.getRecentEventHistory(5)) {
sender.sendMessage(entry.getEventDisplayName()
+ " - participants: "
+ entry.getParticipants());
}
}

Example: Discord stats commandโ€‹

statsService.getPlayerStats(uuid).ifPresent(stats -> {
String message = "**" + stats.getName() + "**\n"
+ "Events played: " + stats.getEventsPlayed() + "\n"
+ "Wins: " + stats.getWins() + "\n"
+ "Best score: " + stats.getBestScore();

// Send message to Discord using your bot system.
});

Summaryโ€‹

StatsService gives addons read-only access to EventForge statistics and event history.

Use it for menus, dashboards, Discord bots, player profiles, and analytics tools.