solved pr comments except making chatMessages an object variable
This commit is contained in:
parent
d69089a0eb
commit
985b36ddc8
@ -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.PrivateMessageCommand;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.privateMessage.commands.PrivateReplyCommand;
|
import eu.mhsl.craftattack.spawn.appliances.privateMessage.commands.PrivateReplyCommand;
|
||||||
import net.kyori.adventure.text.Component;
|
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.ClickEvent;
|
||||||
import net.kyori.adventure.text.event.HoverEvent;
|
import net.kyori.adventure.text.event.HoverEvent;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
@ -25,27 +27,29 @@ public class PrivateMessage extends Appliance {
|
|||||||
private final Map<Player, List<Conversation>> replyMapping = new WeakHashMap<>();
|
private final Map<Player, List<Conversation>> replyMapping = new WeakHashMap<>();
|
||||||
|
|
||||||
public void reply(Player sender, String message) {
|
public void reply(Player sender, String message) {
|
||||||
if(this.replyMapping.get(sender) != null) {
|
this.replyMapping.computeIfAbsent(sender, player -> new ArrayList<>());
|
||||||
List<Conversation> tooOldConversations = this.replyMapping.get(sender).stream()
|
|
||||||
.filter(conversation -> conversation.lastSet < System.currentTimeMillis() - (conversationTimeoutMinutes*60*1000))
|
|
||||||
.toList();
|
|
||||||
this.replyMapping.get(sender).removeAll(tooOldConversations);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.replyMapping.get(sender) == null || this.replyMapping.get(sender).isEmpty()) throw new ApplianceCommand.Error("Du führst aktuell keine Konversation.");
|
List<Conversation> tooOldConversations = this.replyMapping.get(sender).stream()
|
||||||
|
.filter(conversation -> conversation.lastSet < System.currentTimeMillis() - (conversationTimeoutMinutes*60*1000))
|
||||||
|
.toList();
|
||||||
|
this.replyMapping.get(sender).removeAll(tooOldConversations);
|
||||||
|
|
||||||
|
List<Conversation> 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);
|
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))
|
.max(Comparator.comparingLong(o -> o.lastSet))
|
||||||
.orElse(this.replyMapping.get(sender).getLast());
|
.orElse(replyMap.getLast());
|
||||||
|
|
||||||
if(message.isBlank()) {
|
if(message.isBlank()) {
|
||||||
Component currentTargetComponent = Component.text("niemandem.");
|
|
||||||
Player currentTargetPlayer = Bukkit.getPlayer(youngestEntry.target());
|
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(
|
sender.sendMessage(
|
||||||
privatePrefix
|
privatePrefix
|
||||||
@ -55,84 +59,79 @@ public class PrivateMessage extends Appliance {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(youngestEntry.lastSet < System.currentTimeMillis() - (targetChangeTimeoutSeconds*1000) || this.replyMapping.get(sender).size() == 1) {
|
List<Conversation> 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());
|
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.");
|
if(target == null) throw new ApplianceCommand.Error("Der Spieler " + Bukkit.getOfflinePlayer(youngestEntry.target()).getName() + " ist nicht mehr verfügbar.");
|
||||||
|
|
||||||
this.replyMapping.get(sender).clear();
|
this.replyMapping.get(sender).clear();
|
||||||
sendWhisper(sender, new ResolvedPmUserArguments(target, message));
|
this.sendWhisper(sender, new ResolvedPmUserArguments(target, message));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sender.sendMessage("");
|
ComponentBuilder<TextComponent, TextComponent.Builder> component = Component.text();
|
||||||
sender.sendMessage(
|
|
||||||
Component.text()
|
component.append(
|
||||||
|
Component.newline()
|
||||||
.append(privatePrefix)
|
.append(privatePrefix)
|
||||||
.append(Component.text("Das Ziel für /r hat sich bei dir in den letzten ", NamedTextColor.RED))
|
.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(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<Conversation> oldConversations = this.replyMapping.get(sender).stream()
|
|
||||||
.filter(conversation -> conversation.lastSet < System.currentTimeMillis() - (targetChangeTimeoutSeconds*1000))
|
|
||||||
.toList();
|
|
||||||
|
|
||||||
Conversation youngestOldConversation;
|
|
||||||
if(!oldConversations.isEmpty()) {
|
if(!oldConversations.isEmpty()) {
|
||||||
youngestOldConversation = oldConversations.stream()
|
Conversation youngestOldConversation = oldConversations.stream()
|
||||||
.max(Comparator.comparingLong(o -> o.lastSet))
|
.max(Comparator.comparingLong(o -> o.lastSet))
|
||||||
.orElse(oldConversations.getLast());
|
.orElse(oldConversations.getLast());
|
||||||
this.replyMapping.get(sender).removeAll(oldConversations);
|
this.replyMapping.get(sender).removeAll(oldConversations);
|
||||||
this.replyMapping.get(sender).add(youngestOldConversation);
|
this.replyMapping.get(sender).add(youngestOldConversation);
|
||||||
|
replyMap = this.replyMapping.get(sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<String> playerNames = this.replyMapping.get(sender).stream()
|
List<String> playerNames = replyMap.stream()
|
||||||
.map(conversation -> Bukkit.getOfflinePlayer(conversation.target()).getName())
|
.map(conversation -> Bukkit.getOfflinePlayer(conversation.target()).getName())
|
||||||
.distinct()
|
.distinct()
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
final Component[] finalComponent = {Component.text("")};
|
playerNames.forEach(playerName -> component.append(
|
||||||
|
|
||||||
playerNames.forEach(playerName -> finalComponent[0] = finalComponent[0].append(
|
|
||||||
Component.text("[")
|
Component.text("[")
|
||||||
.append(Component.text(playerName, NamedTextColor.GOLD))
|
.append(Component.text(playerName, NamedTextColor.GOLD))
|
||||||
.append(Component.text("]"))
|
.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))))
|
.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(component.build());
|
||||||
sender.sendMessage(finalComponent[0]);
|
|
||||||
sender.sendMessage("");
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendWhisper(Player sender, ResolvedPmUserArguments userArguments) {
|
public void sendWhisper(Player sender, ResolvedPmUserArguments userArguments) {
|
||||||
|
|
||||||
if(!(this.replyMapping.get(userArguments.receiver) == null)) {
|
|
||||||
List<Conversation> 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(
|
Conversation newReceiverConversation = new Conversation(
|
||||||
sender.getUniqueId(),
|
sender.getUniqueId(),
|
||||||
System.currentTimeMillis()
|
System.currentTimeMillis()
|
||||||
);
|
);
|
||||||
|
|
||||||
if(this.replyMapping.get(userArguments.receiver) == null) {
|
if(this.replyMapping.get(userArguments.receiver) != null) {
|
||||||
List<Conversation> receiverConversationList = new ArrayList<>();
|
List<Conversation> oldEntries = this.replyMapping.get(userArguments.receiver).stream()
|
||||||
receiverConversationList.add(newReceiverConversation);
|
.filter(conversation -> conversation.target() == sender.getUniqueId())
|
||||||
|
.toList();
|
||||||
|
this.replyMapping.get(userArguments.receiver).removeAll(oldEntries);
|
||||||
|
} else {
|
||||||
this.replyMapping.put(
|
this.replyMapping.put(
|
||||||
userArguments.receiver,
|
userArguments.receiver,
|
||||||
receiverConversationList
|
new ArrayList<>()
|
||||||
);
|
);
|
||||||
} else {
|
|
||||||
this.replyMapping.get(userArguments.receiver).add(newReceiverConversation);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.replyMapping.get(userArguments.receiver).add(newReceiverConversation);
|
||||||
|
|
||||||
List<Conversation> senderConversationList = new ArrayList<>();
|
List<Conversation> senderConversationList = new ArrayList<>();
|
||||||
senderConversationList.add(
|
senderConversationList.add(
|
||||||
new Conversation(
|
new Conversation(
|
||||||
@ -146,7 +145,6 @@ public class PrivateMessage extends Appliance {
|
|||||||
senderConversationList
|
senderConversationList
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
ChatMessages chatMessages = Main.instance().getAppliance(ChatMessages.class);
|
ChatMessages chatMessages = Main.instance().getAppliance(ChatMessages.class);
|
||||||
Component privatePrefix = Component.text("[Privat] ", NamedTextColor.LIGHT_PURPLE);
|
Component privatePrefix = Component.text("[Privat] ", NamedTextColor.LIGHT_PURPLE);
|
||||||
|
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
package eu.mhsl.craftattack.spawn.util;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
public class LimitedSizedList<T> extends ArrayList<T> {
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user