From 985b36ddc814777612dc90c48f281879bf5333c6 Mon Sep 17 00:00:00 2001 From: lars Date: Sun, 6 Oct 2024 15:23:37 +0200 Subject: [PATCH] solved pr comments except making chatMessages an object variable --- .../privateMessage/PrivateMessage.java | 98 +++++++++---------- .../spawn/util/LimitedSizedList.java | 27 ----- 2 files changed, 48 insertions(+), 77 deletions(-) delete mode 100644 src/main/java/eu/mhsl/craftattack/spawn/util/LimitedSizedList.java diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/privateMessage/PrivateMessage.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/privateMessage/PrivateMessage.java index 205b977..62e6883 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/privateMessage/PrivateMessage.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/privateMessage/PrivateMessage.java @@ -7,6 +7,8 @@ import eu.mhsl.craftattack.spawn.appliances.chatMessages.ChatMessages; import eu.mhsl.craftattack.spawn.appliances.privateMessage.commands.PrivateMessageCommand; import eu.mhsl.craftattack.spawn.appliances.privateMessage.commands.PrivateReplyCommand; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.ComponentBuilder; +import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.event.HoverEvent; import net.kyori.adventure.text.format.NamedTextColor; @@ -25,27 +27,29 @@ public class PrivateMessage extends Appliance { private final Map> replyMapping = new WeakHashMap<>(); public void reply(Player sender, String message) { - if(this.replyMapping.get(sender) != null) { - List tooOldConversations = this.replyMapping.get(sender).stream() - .filter(conversation -> conversation.lastSet < System.currentTimeMillis() - (conversationTimeoutMinutes*60*1000)) - .toList(); - this.replyMapping.get(sender).removeAll(tooOldConversations); - } + this.replyMapping.computeIfAbsent(sender, player -> new ArrayList<>()); - if(this.replyMapping.get(sender) == null || this.replyMapping.get(sender).isEmpty()) throw new ApplianceCommand.Error("Du führst aktuell keine Konversation."); + List tooOldConversations = this.replyMapping.get(sender).stream() + .filter(conversation -> conversation.lastSet < System.currentTimeMillis() - (conversationTimeoutMinutes*60*1000)) + .toList(); + this.replyMapping.get(sender).removeAll(tooOldConversations); + + List replyMap = this.replyMapping.get(sender); + + if(replyMap.isEmpty()) throw new ApplianceCommand.Error("Du führst aktuell keine Konversation."); Component privatePrefix = Component.text("[Privat] ", NamedTextColor.LIGHT_PURPLE); - Conversation youngestEntry = this.replyMapping.get(sender).stream() + Conversation youngestEntry = replyMap.stream() .max(Comparator.comparingLong(o -> o.lastSet)) - .orElse(this.replyMapping.get(sender).getLast()); + .orElse(replyMap.getLast()); if(message.isBlank()) { - Component currentTargetComponent = Component.text("niemandem."); Player currentTargetPlayer = Bukkit.getPlayer(youngestEntry.target()); - if(currentTargetPlayer != null) { - currentTargetComponent = Main.instance().getAppliance(ChatMessages.class).getReportablePlayerName(currentTargetPlayer); - } + + Component currentTargetComponent = currentTargetPlayer != null + ? Main.instance().getAppliance(ChatMessages.class).getReportablePlayerName(currentTargetPlayer) + : Component.text("niemandem."); sender.sendMessage( privatePrefix @@ -55,84 +59,79 @@ public class PrivateMessage extends Appliance { return; } - if(youngestEntry.lastSet < System.currentTimeMillis() - (targetChangeTimeoutSeconds*1000) || this.replyMapping.get(sender).size() == 1) { + List oldConversations = replyMap.stream() + .filter(conversation -> conversation.lastSet < System.currentTimeMillis() - (targetChangeTimeoutSeconds*1000)) + .toList(); + + if(oldConversations.contains(youngestEntry) || replyMap.size() == 1) { Player target = Bukkit.getPlayer(youngestEntry.target()); if(target == null) throw new ApplianceCommand.Error("Der Spieler " + Bukkit.getOfflinePlayer(youngestEntry.target()).getName() + " ist nicht mehr verfügbar."); this.replyMapping.get(sender).clear(); - sendWhisper(sender, new ResolvedPmUserArguments(target, message)); + this.sendWhisper(sender, new ResolvedPmUserArguments(target, message)); return; } - sender.sendMessage(""); - sender.sendMessage( - Component.text() + ComponentBuilder component = Component.text(); + + component.append( + Component.newline() .append(privatePrefix) .append(Component.text("Das Ziel für /r hat sich bei dir in den letzten ", NamedTextColor.RED)) .append(Component.text(String.valueOf(this.targetChangeTimeoutSeconds), NamedTextColor.RED)) - .append(Component.text(" Sekunden geändert. Wer soll deine Nachricht bekommen? ", NamedTextColor.RED)) + .append(Component.text(" Sekunden geändert. Wer soll deine Nachricht erhalten? ", NamedTextColor.RED)) + .appendNewline() + .appendNewline() ); - List oldConversations = this.replyMapping.get(sender).stream() - .filter(conversation -> conversation.lastSet < System.currentTimeMillis() - (targetChangeTimeoutSeconds*1000)) - .toList(); - - Conversation youngestOldConversation; if(!oldConversations.isEmpty()) { - youngestOldConversation = oldConversations.stream() + Conversation youngestOldConversation = oldConversations.stream() .max(Comparator.comparingLong(o -> o.lastSet)) .orElse(oldConversations.getLast()); this.replyMapping.get(sender).removeAll(oldConversations); this.replyMapping.get(sender).add(youngestOldConversation); + replyMap = this.replyMapping.get(sender); } - List playerNames = this.replyMapping.get(sender).stream() + List playerNames = replyMap.stream() .map(conversation -> Bukkit.getOfflinePlayer(conversation.target()).getName()) .distinct() .toList(); - final Component[] finalComponent = {Component.text("")}; - - playerNames.forEach(playerName -> finalComponent[0] = finalComponent[0].append( + playerNames.forEach(playerName -> component.append( Component.text("[") .append(Component.text(playerName, NamedTextColor.GOLD)) .append(Component.text("]")) - .clickEvent(ClickEvent.runCommand("/msg " + playerName + " " + message)) + .clickEvent(ClickEvent.runCommand(String.format("/msg %s %s", playerName, message))) .hoverEvent(HoverEvent.showText(Component.text("Klicke, um diesem Spieler zu schreiben.").color(NamedTextColor.GOLD)))) - .append(Component.text(" "))); + .append(Component.text(" ")) + ); + component.appendNewline(); - sender.sendMessage(""); - sender.sendMessage(finalComponent[0]); - sender.sendMessage(""); + sender.sendMessage(component.build()); } public void sendWhisper(Player sender, ResolvedPmUserArguments userArguments) { - - if(!(this.replyMapping.get(userArguments.receiver) == null)) { - List oldEntries = this.replyMapping.get(userArguments.receiver).stream() - .filter(conversation -> conversation.target() == sender.getUniqueId()) - .toList(); - this.replyMapping.get(userArguments.receiver).removeAll(oldEntries); - } - Conversation newReceiverConversation = new Conversation( sender.getUniqueId(), System.currentTimeMillis() ); - if(this.replyMapping.get(userArguments.receiver) == null) { - List receiverConversationList = new ArrayList<>(); - receiverConversationList.add(newReceiverConversation); - + if(this.replyMapping.get(userArguments.receiver) != null) { + List oldEntries = this.replyMapping.get(userArguments.receiver).stream() + .filter(conversation -> conversation.target() == sender.getUniqueId()) + .toList(); + this.replyMapping.get(userArguments.receiver).removeAll(oldEntries); + } else { this.replyMapping.put( userArguments.receiver, - receiverConversationList + new ArrayList<>() ); - } else { - this.replyMapping.get(userArguments.receiver).add(newReceiverConversation); } + this.replyMapping.get(userArguments.receiver).add(newReceiverConversation); + List senderConversationList = new ArrayList<>(); senderConversationList.add( new Conversation( @@ -146,7 +145,6 @@ public class PrivateMessage extends Appliance { senderConversationList ); - ChatMessages chatMessages = Main.instance().getAppliance(ChatMessages.class); Component privatePrefix = Component.text("[Privat] ", NamedTextColor.LIGHT_PURPLE); diff --git a/src/main/java/eu/mhsl/craftattack/spawn/util/LimitedSizedList.java b/src/main/java/eu/mhsl/craftattack/spawn/util/LimitedSizedList.java deleted file mode 100644 index 1b03907..0000000 --- a/src/main/java/eu/mhsl/craftattack/spawn/util/LimitedSizedList.java +++ /dev/null @@ -1,27 +0,0 @@ -package eu.mhsl.craftattack.spawn.util; - -import java.util.ArrayList; - -public class LimitedSizedList extends ArrayList { - private final int maxSize; - - public LimitedSizedList(int size){ - this.maxSize = size; - } - - public boolean add(T element){ - boolean r = super.add(element); - if (size() > maxSize){ - removeRange(0, size() - maxSize); - } - return r; - } - - public T getYoungest() { - return get(size() - 1); - } - - public T getOldest() { - return get(0); - } -}