Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import dansplugins.activitytracker.commands.DefaultCommand;
import dansplugins.activitytracker.commands.HelpCommand;
import dansplugins.activitytracker.commands.InfoCommand;
import dansplugins.activitytracker.commands.ListCommand;
import dansplugins.activitytracker.commands.StatsCommand;
import dansplugins.activitytracker.commands.TopCommand;
import dansplugins.activitytracker.eventhandlers.JoinHandler;
Expand Down Expand Up @@ -154,6 +155,7 @@ private void initializeCommandService() {
new ConfigCommand(configService),
new HelpCommand(),
new InfoCommand(persistentData),
new ListCommand(persistentData),
new StatsCommand(persistentData),
new TopCommand(activityRecordService)
));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public boolean execute(CommandSender sender) {
sender.sendMessage(ChatColor.AQUA + "/at help - View a list of helpful commands.");
sender.sendMessage(ChatColor.AQUA + "/at info - View your activity record.");
sender.sendMessage(ChatColor.AQUA + "/at info (playerName) - View a player's activity record.");
sender.sendMessage(ChatColor.AQUA + "/at list - View the 10 most recent sessions (admin only).");
sender.sendMessage(ChatColor.AQUA + "/at top - View a list of the most active players on the server.");
sender.sendMessage(ChatColor.AQUA + "/at stats - View activity stats for the server.");
sender.sendMessage(ChatColor.AQUA + "/at config - Show or set config options.");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package dansplugins.activitytracker.commands;

import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;

import dansplugins.activitytracker.data.PersistentData;
import dansplugins.activitytracker.objects.ActivityRecord;
import dansplugins.activitytracker.objects.Session;
import preponderous.ponder.minecraft.bukkit.abs.AbstractPluginCommand;
import preponderous.ponder.minecraft.bukkit.tools.UUIDChecker;

/**
* @author Daniel McCoy Stephenson
*/
public class ListCommand extends AbstractPluginCommand {
private final PersistentData persistentData;

public ListCommand(PersistentData persistentData) {
super(new ArrayList<>(Arrays.asList("list")), new ArrayList<>(Arrays.asList("at.admin")));
this.persistentData = persistentData;
}

@Override
public boolean execute(CommandSender sender) {
// Get all sessions from all activity records
List<Session> allSessions = new ArrayList<>();
for (ActivityRecord record : persistentData.getActivityRecords()) {
if (record != null && record.getSessions() != null) {
allSessions.addAll(record.getSessions());
}
}

// Sort sessions by login date in descending order (most recent first)
List<Session> sortedSessions = allSessions.stream()
.filter(session -> session != null && session.getLoginDate() != null)
.sorted(Comparator.comparing(Session::getLoginDate).reversed())
.limit(10)
.collect(Collectors.toList());

if (sortedSessions.isEmpty()) {
sender.sendMessage(ChatColor.RED + "No sessions found.");
return true;
}

sender.sendMessage(ChatColor.AQUA + " === 10 Most Recent Sessions ===");

UUIDChecker uuidChecker = new UUIDChecker();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

int count = 1;
for (Session session : sortedSessions) {
String playerName = uuidChecker.findPlayerNameBasedOnUUID(session.getPlayerUUID());
if (playerName == null) {
playerName = "Unknown Player";
}

String loginTime = session.getLoginDate().format(formatter);
String status = session.isActive() ? ChatColor.GREEN + "Active" : ChatColor.RED + "Ended";

String sessionInfo;
if (session.isActive()) {
sessionInfo = String.format("%d. %s - Login: %s (%s%s)",
count, playerName, loginTime, status, ChatColor.AQUA);
} else {
sessionInfo = String.format("%d. %s - Login: %s (%s%s - Duration: %.1f min)",
count, playerName, loginTime, status, ChatColor.AQUA, session.getMinutesSpent());
}

sender.sendMessage(ChatColor.AQUA + sessionInfo);
count++;
}

return true;
}

@Override
public boolean execute(CommandSender sender, String[] args) {
return execute(sender);
}
}
2 changes: 2 additions & 0 deletions src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,6 @@ permissions:
at.stats:
default: true
at.config:
default: op
at.admin:
default: op