diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6f04ca4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*.class +target/ +.DS_Store +*.tmp \ No newline at end of file diff --git a/src/main/java/dansplugins/mailboxes/commands/HelpCommand.java b/src/main/java/dansplugins/mailboxes/commands/HelpCommand.java index 5479dee..899fc27 100644 --- a/src/main/java/dansplugins/mailboxes/commands/HelpCommand.java +++ b/src/main/java/dansplugins/mailboxes/commands/HelpCommand.java @@ -8,7 +8,7 @@ public class HelpCommand { public boolean execute(CommandSender sender) { sender.sendMessage(ChatColor.AQUA + "=== Mailboxes Commands ==="); sender.sendMessage(ChatColor.AQUA + "/m help - View a list of helpful commands."); - sender.sendMessage(ChatColor.AQUA + "/m list - List your messages."); + sender.sendMessage(ChatColor.AQUA + "/m list [type] [page] - List your messages with pagination."); sender.sendMessage(ChatColor.AQUA + "/m open - Open a message."); sender.sendMessage(ChatColor.AQUA + "/m send - Send a message to another player."); sender.sendMessage(ChatColor.AQUA + "/m delete - Delete a message."); diff --git a/src/main/java/dansplugins/mailboxes/commands/ListCommand.java b/src/main/java/dansplugins/mailboxes/commands/ListCommand.java index daf5a39..266b4c2 100644 --- a/src/main/java/dansplugins/mailboxes/commands/ListCommand.java +++ b/src/main/java/dansplugins/mailboxes/commands/ListCommand.java @@ -31,25 +31,45 @@ public boolean execute(CommandSender sender, String[] args) { return false; } + int page = 1; + int pageSize = 10; + String listType = "active"; + if (args.length > 0) { - String list = args[0]; - if (list.equalsIgnoreCase("active")) { - mailbox.sendListOfActiveMessagesToPlayer(player); + listType = args[0].toLowerCase(); + + // Parse page number if provided + if (args.length > 1) { + try { + page = Integer.parseInt(args[1]); + if (page < 1) { + player.sendMessage(ChatColor.RED + "Page number must be 1 or greater."); + return false; + } + } catch (NumberFormatException e) { + player.sendMessage(ChatColor.RED + "Invalid page number: " + args[1]); + return false; + } + } + + if (listType.equals("active")) { + mailbox.sendListOfActiveMessagesToPlayer(player, page, pageSize); } - else if (list.equalsIgnoreCase("archived")) { - mailbox.sendListOfArchivedMessagesToPlayer(player); + else if (listType.equals("archived")) { + mailbox.sendListOfArchivedMessagesToPlayer(player, page, pageSize); } - else if (list.equalsIgnoreCase("unread")) { - mailbox.sendListOfUnreadMessagesToPlayer(player); + else if (listType.equals("unread")) { + mailbox.sendListOfUnreadMessagesToPlayer(player, page, pageSize); } else { player.sendMessage(ChatColor.RED + "Sub-commands: active, archived, unread"); + player.sendMessage(ChatColor.AQUA + "Usage: /m list [type] [page]"); return false; } return true; } - mailbox.sendListOfActiveMessagesToPlayer(player); + mailbox.sendListOfActiveMessagesToPlayer(player, page, pageSize); return true; } diff --git a/src/main/java/dansplugins/mailboxes/objects/Mailbox.java b/src/main/java/dansplugins/mailboxes/objects/Mailbox.java index 7f95ca7..09210fd 100644 --- a/src/main/java/dansplugins/mailboxes/objects/Mailbox.java +++ b/src/main/java/dansplugins/mailboxes/objects/Mailbox.java @@ -97,13 +97,33 @@ public void removeActiveMessage(int ID) { } public void sendListOfActiveMessagesToPlayer(Player player) { + sendListOfActiveMessagesToPlayer(player, 1, 10); + } + + public void sendListOfActiveMessagesToPlayer(Player player, int page, int pageSize) { if (activeMessages.size() == 0) { - player.sendMessage(ChatColor.AQUA + "You don't have any active messages at this time."); + if (page > 1) { + player.sendMessage(ChatColor.RED + "Invalid page number. You don't have any active messages."); + } else { + player.sendMessage(ChatColor.AQUA + "You don't have any active messages at this time."); + } + return; + } + + int totalPages = (int) Math.ceil((double) activeMessages.size() / pageSize); + if (page < 1 || page > totalPages) { + player.sendMessage(ChatColor.RED + "Invalid page number. Valid pages: 1-" + totalPages); return; } - player.sendMessage(ChatColor.AQUA + "=== Active Messages ==="); + + player.sendMessage(ChatColor.AQUA + "=== Active Messages (Page " + page + "/" + totalPages + ") ==="); player.sendMessage(ChatColor.AQUA + "D: date, S: sender"); - for (Message message : activeMessages) { + + int startIndex = (page - 1) * pageSize; + int endIndex = Math.min(startIndex + pageSize, activeMessages.size()); + + for (int i = startIndex; i < endIndex; i++) { + Message message = activeMessages.get(i); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); String toSend = "* ID: " + message.getID() + " - D: " + dateFormat.format(message.getDate()) + " - S: " + message.getSender(); if (message.isUnread()) { @@ -111,6 +131,18 @@ public void sendListOfActiveMessagesToPlayer(Player player) { } player.sendMessage(ChatColor.AQUA + toSend); } + + // Show navigation info + if (totalPages > 1) { + String navInfo = ChatColor.GRAY + "Page " + page + " of " + totalPages; + if (page > 1) { + navInfo += " | Previous: /m list active " + (page - 1); + } + if (page < totalPages) { + navInfo += " | Next: /m list active " + (page + 1); + } + player.sendMessage(navInfo); + } } public ArrayList getArchivedMessages() { @@ -142,13 +174,33 @@ public void removeArchivedMessage(int ID) { } public void sendListOfArchivedMessagesToPlayer(Player player) { + sendListOfArchivedMessagesToPlayer(player, 1, 10); + } + + public void sendListOfArchivedMessagesToPlayer(Player player, int page, int pageSize) { if (archivedMessages.size() == 0) { - player.sendMessage(ChatColor.AQUA + "You don't have any archived messages at this time."); + if (page > 1) { + player.sendMessage(ChatColor.RED + "Invalid page number. You don't have any archived messages."); + } else { + player.sendMessage(ChatColor.AQUA + "You don't have any archived messages at this time."); + } return; } - player.sendMessage(ChatColor.AQUA + "=== Archived Messages ==="); + + int totalPages = (int) Math.ceil((double) archivedMessages.size() / pageSize); + if (page < 1 || page > totalPages) { + player.sendMessage(ChatColor.RED + "Invalid page number. Valid pages: 1-" + totalPages); + return; + } + + player.sendMessage(ChatColor.AQUA + "=== Archived Messages (Page " + page + "/" + totalPages + ") ==="); player.sendMessage(ChatColor.AQUA + "D: date, S: sender"); - for (Message message : archivedMessages) { + + int startIndex = (page - 1) * pageSize; + int endIndex = Math.min(startIndex + pageSize, archivedMessages.size()); + + for (int i = startIndex; i < endIndex; i++) { + Message message = archivedMessages.get(i); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); String toSend = "* ID: " + message.getID() + " - D: " + dateFormat.format(message.getDate()) + " - S: " + message.getSender(); if (message.isUnread()) { @@ -156,6 +208,18 @@ public void sendListOfArchivedMessagesToPlayer(Player player) { } player.sendMessage(ChatColor.AQUA + toSend); } + + // Show navigation info + if (totalPages > 1) { + String navInfo = ChatColor.GRAY + "Page " + page + " of " + totalPages; + if (page > 1) { + navInfo += " | Previous: /m list archived " + (page - 1); + } + if (page < totalPages) { + navInfo += " | Next: /m list archived " + (page + 1); + } + player.sendMessage(navInfo); + } } public void archiveMessage(Message message) { @@ -195,19 +259,51 @@ public ArrayList getUnreadMessages() { } public void sendListOfUnreadMessagesToPlayer(Player player) { + sendListOfUnreadMessagesToPlayer(player, 1, 10); + } + + public void sendListOfUnreadMessagesToPlayer(Player player, int page, int pageSize) { ArrayList unreadMessages = getUnreadMessages(); if (unreadMessages.size() == 0) { - player.sendMessage(ChatColor.AQUA + "You don't have any unread messages at this time."); + if (page > 1) { + player.sendMessage(ChatColor.RED + "Invalid page number. You don't have any unread messages."); + } else { + player.sendMessage(ChatColor.AQUA + "You don't have any unread messages at this time."); + } return; } - player.sendMessage(ChatColor.AQUA + "=== Unread Messages ==="); + + int totalPages = (int) Math.ceil((double) unreadMessages.size() / pageSize); + if (page < 1 || page > totalPages) { + player.sendMessage(ChatColor.RED + "Invalid page number. Valid pages: 1-" + totalPages); + return; + } + + player.sendMessage(ChatColor.AQUA + "=== Unread Messages (Page " + page + "/" + totalPages + ") ==="); player.sendMessage(ChatColor.AQUA + "D: date, S: sender"); - for (Message message : getUnreadMessages()) { + + int startIndex = (page - 1) * pageSize; + int endIndex = Math.min(startIndex + pageSize, unreadMessages.size()); + + for (int i = startIndex; i < endIndex; i++) { + Message message = unreadMessages.get(i); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); String toSend = "* ID: " + message.getID() + " - D: " + dateFormat.format(message.getDate()) + " - S: " + message.getSender(); toSend = ChatColor.BOLD + toSend; player.sendMessage(ChatColor.AQUA + toSend); } + + // Show navigation info + if (totalPages > 1) { + String navInfo = ChatColor.GRAY + "Page " + page + " of " + totalPages; + if (page > 1) { + navInfo += " | Previous: /m list unread " + (page - 1); + } + if (page < totalPages) { + navInfo += " | Next: /m list unread " + (page + 1); + } + player.sendMessage(navInfo); + } } public Map save() {