From d3be713c9a4bd6f248bcb5ac4edc58bddee87a87 Mon Sep 17 00:00:00 2001 From: Stijn Date: Wed, 21 Sep 2022 18:26:16 +0200 Subject: [PATCH] Added optional sender argument to /mail list --- .../velocitychat/commands/MailCommand.java | 28 ++++++++++++++++++- .../velocitychat/handlers/ChatHandler.java | 18 ++++++++++-- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/velocity/src/main/java/com/alttd/velocitychat/commands/MailCommand.java b/velocity/src/main/java/com/alttd/velocitychat/commands/MailCommand.java index 7559983..999082c 100755 --- a/velocity/src/main/java/com/alttd/velocitychat/commands/MailCommand.java +++ b/velocity/src/main/java/com/alttd/velocitychat/commands/MailCommand.java @@ -41,6 +41,27 @@ public class MailCommand { return 1; }); + RequiredArgumentBuilder playerNodeSender = RequiredArgumentBuilder + .argument("sender", StringArgumentType.string()) + .suggests((context, builder) -> { + Collection possibleValues = new ArrayList<>(); + for (Player player : proxyServer.getAllPlayers()) { + possibleValues.add(player.getGameProfile().getName()); + } + if(possibleValues.isEmpty()) return Suggestions.empty(); + String remaining = builder.getRemaining().toLowerCase(); + for (String str : possibleValues) { + if (str.toLowerCase().startsWith(remaining)) { + builder.suggest(str = StringArgumentType.escapeIfRequired(str)); + } + } + return builder.buildFuture(); + }) + .executes(context -> { + sendHelpMessage(context.getSource()); + return 1; + }); + LiteralCommandNode command = LiteralArgumentBuilder .literal("mail") .requires(ctx -> ctx.hasPermission("command.chat.mail")) @@ -79,8 +100,13 @@ public class MailCommand { ) .then(playerNode .requires(ctx -> ctx.hasPermission("command.chat.mail.list.other"))// TODO permission + .then(playerNodeSender + .executes(context -> { + VelocityChat.getPlugin().getChatHandler().readMail(context.getSource(), context.getArgument("player", String.class), context.getArgument("sender", String.class)); + return 1; + })) .executes(context -> { - VelocityChat.getPlugin().getChatHandler().readMail(context.getSource(), context.getArgument("player", String.class)); + VelocityChat.getPlugin().getChatHandler().readMail(context.getSource(), context.getArgument("player", String.class), null); return 1; }) ) diff --git a/velocity/src/main/java/com/alttd/velocitychat/handlers/ChatHandler.java b/velocity/src/main/java/com/alttd/velocitychat/handlers/ChatHandler.java index 9a72d95..9a3c124 100755 --- a/velocity/src/main/java/com/alttd/velocitychat/handlers/ChatHandler.java +++ b/velocity/src/main/java/com/alttd/velocitychat/handlers/ChatHandler.java @@ -213,14 +213,28 @@ public class ChatHandler { commandSource.sendMessage(Utility.parseMiniMessage("Sent mail to " + senderName + "!")); } - public void readMail(CommandSource commandSource, String targetPlayer) { + public void readMail(CommandSource commandSource, String targetPlayer, String senderPlayer) { UUID uuid = ServerHandler.getPlayerUUID(targetPlayer); if (uuid == null) { commandSource.sendMessage(Utility.parseMiniMessage(Config.mailNoUser)); return; } + ChatUser chatUser = ChatUserManager.getChatUser(uuid); - commandSource.sendMessage(parseMails(chatUser.getMails(), false)); + if (senderPlayer == null) { + commandSource.sendMessage(parseMails(chatUser.getMails(), false)); + } + + UUID sender = ServerHandler.getPlayerUUID(senderPlayer); + if (sender == null) { + commandSource.sendMessage(Utility.parseMiniMessage(Config.mailNoUser)); + return; + } + + List mails = chatUser.getMails().stream() + .filter(mail -> mail.getSender().equals(sender)) + .toList(); + commandSource.sendMessage(parseMails(mails, false)); } public void readMail(CommandSource commandSource, boolean unread) {