develop-chatReply #5
@ -34,33 +34,23 @@ public class PrivateMessage extends Appliance {
|
|||||||
|
|
||||||
if(this.replyMapping.get(sender) == null || this.replyMapping.get(sender).isEmpty()) throw new ApplianceCommand.Error("Du führst aktuell keine Konversation.");
|
if(this.replyMapping.get(sender) == null || this.replyMapping.get(sender).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);
|
||||||
MineTec marked this conversation as resolved
Outdated
|
|||||||
ChatMessages chatMessages = Main.instance().getAppliance(ChatMessages.class);
|
|
||||||
|
|
||||||
Conversation youngestEntry = this.replyMapping.get(sender).stream()
|
Conversation youngestEntry = this.replyMapping.get(sender).stream()
|
||||||
.max(Comparator.comparingLong(o -> o.lastSet))
|
.max(Comparator.comparingLong(o -> o.lastSet))
|
||||||
.orElse(this.replyMapping.get(sender).getLast());
|
.orElse(this.replyMapping.get(sender).getLast());
|
||||||
|
|
||||||
String youngestTargetName;
|
if(message.isBlank()) {
|
||||||
if(Bukkit.getPlayer(youngestEntry.target()) == null) {
|
Component currentTargetComponent = Component.text("niemandem.");
|
||||||
youngestTargetName = Bukkit.getOfflinePlayer(youngestEntry.target()).getName();
|
Player currentTargetPlayer = Bukkit.getPlayer(youngestEntry.target());
|
||||||
} else {
|
if(currentTargetPlayer != null) {
|
||||||
youngestTargetName = Objects.requireNonNull(Bukkit.getPlayer(youngestEntry.target())).getName();
|
currentTargetComponent = Main.instance().getAppliance(ChatMessages.class).getReportablePlayerName(currentTargetPlayer);
|
||||||
Pupsi marked this conversation as resolved
MineTec
commented
initialisierung und sofortig bedingtes überschreiben würde ich als bad practice einstufen... Umschreiben zu
initialisierung und sofortig bedingtes überschreiben würde ich als bad practice einstufen...
Umschreiben zu
```
Component currentTargetComponent = currentTargetPlayer != null
? Main.instance().getAppliance(ChatMessages.class).getReportablePlayerName(currentTargetPlayer)
: Component.text("niemandem.");
```
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if(message.isBlank() && youngestTargetName != null) {
|
|
||||||
sender.sendMessage(
|
sender.sendMessage(
|
||||||
privatePrefix
|
privatePrefix
|
||||||
.append(Component.text("Du schreibst aktuell mit ", NamedTextColor.GRAY))
|
.append(Component.text("Du schreibst aktuell mit ", NamedTextColor.GRAY))
|
||||||
.append(chatMessages.getReportablePlayerName(sender))
|
.append(currentTargetComponent)
|
||||||
);
|
|
||||||
return;
|
|
||||||
} else if(message.isBlank()) {
|
|
||||||
sender.sendMessage(
|
|
||||||
privatePrefix
|
|
||||||
.append(Component.text("Du schreibst aktuell mit niemandem.", NamedTextColor.GRAY))
|
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -74,30 +64,6 @@ public class PrivateMessage extends Appliance {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Conversation> oldConversations = this.replyMapping.get(sender).stream()
|
|
||||||
.filter(conversation -> conversation.lastSet < System.currentTimeMillis() - (targetChangeTimeoutSeconds*1000))
|
|
||||||
.toList();
|
|
||||||
|
|
||||||
Conversation youngestOldConversation = null;
|
|
||||||
if(!oldConversations.isEmpty()) {
|
|
||||||
youngestOldConversation = oldConversations.stream()
|
|
||||||
.max(Comparator.comparingLong(o -> o.lastSet))
|
|
||||||
.orElse(oldConversations.getLast());
|
|
||||||
this.replyMapping.get(sender).removeAll(oldConversations);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<String> playerNames = this.replyMapping.get(sender).stream()
|
|
||||||
.map(conversation -> {
|
|
||||||
if(Bukkit.getPlayer(conversation.target()) != null) {
|
|
||||||
return Objects.requireNonNull(Bukkit.getPlayer(conversation.target())).getName();
|
|
||||||
} else {
|
|
||||||
return Bukkit.getOfflinePlayer(conversation.target()).getName();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.distinct()
|
|
||||||
.toList();
|
|
||||||
|
|
||||||
|
|
||||||
sender.sendMessage("");
|
sender.sendMessage("");
|
||||||
Pupsi marked this conversation as resolved
Outdated
MineTec
commented
das senden einzelner messages ist problematisch... in der theorie könnten andere messages welche parallel gesendet werden so zwischen die messages rutschen. Außerdem ist jeder sendMessage aufruf ein eigenes paket, welches an den Spieler gesendet wird. die Aufrufe sollten zusammengezogen werden zu einem einzelnen aufruf, leerzeilen können mit Hier bietet sich ggf der ComponentBuilder an, dieser kann mit Anschließend kann darauf mit das senden einzelner messages ist problematisch...
in der theorie könnten andere messages welche parallel gesendet werden so zwischen die messages rutschen. Außerdem ist jeder sendMessage aufruf ein eigenes paket, welches an den Spieler gesendet wird.
die Aufrufe sollten zusammengezogen werden zu einem einzelnen aufruf, leerzeilen können mit `.appendNewLine` eingefügt werden.
Hier bietet sich ggf der ComponentBuilder an, dieser kann mit `Component.text()` erstellt werden.
Anschließend kann darauf mit `component.append(otherComponent)` gearbeitet werden. Zum schluss dann `sender.sendMessage(component.build())`
|
|||||||
sender.sendMessage(
|
sender.sendMessage(
|
||||||
Component.text()
|
Component.text()
|
||||||
@ -107,25 +73,26 @@ public class PrivateMessage extends Appliance {
|
|||||||
.append(Component.text(" Sekunden geändert. Wer soll deine Nachricht bekommen? ", NamedTextColor.RED))
|
.append(Component.text(" Sekunden geändert. Wer soll deine Nachricht bekommen? ", NamedTextColor.RED))
|
||||||
Pupsi marked this conversation as resolved
Outdated
MineTec
commented
"erhalten" statt "bekommen" klingt denke ich besser "erhalten" statt "bekommen" klingt denke ich besser
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
List<Conversation> oldConversations = this.replyMapping.get(sender).stream()
|
||||||
|
.filter(conversation -> conversation.lastSet < System.currentTimeMillis() - (targetChangeTimeoutSeconds*1000))
|
||||||
Pupsi marked this conversation as resolved
Outdated
MineTec
commented
hier steht die gleiche logik wie in zeile 58 lässt sich das vielleicht schlau kombinieren, dass du oldConversations schon oben erstellst und die andere prüfung auf der bestehenden Liste dann ausführst? hier steht die gleiche logik wie in zeile 58
lässt sich das vielleicht schlau kombinieren, dass du oldConversations schon oben erstellst und die andere prüfung auf der bestehenden Liste dann ausführst?
|
|||||||
|
.toList();
|
||||||
|
|
||||||
|
Conversation youngestOldConversation;
|
||||||
Pupsi marked this conversation as resolved
MineTec
commented
gibt es einen Grund warum die Variable hier außerhalb allokiert wird aber nur innerhalb des if statements genutzt wird? gibt es einen Grund warum die Variable hier außerhalb allokiert wird aber nur innerhalb des if statements genutzt wird?
|
|||||||
|
if(!oldConversations.isEmpty()) {
|
||||||
|
youngestOldConversation = oldConversations.stream()
|
||||||
|
.max(Comparator.comparingLong(o -> o.lastSet))
|
||||||
|
.orElse(oldConversations.getLast());
|
||||||
|
this.replyMapping.get(sender).removeAll(oldConversations);
|
||||||
|
this.replyMapping.get(sender).add(youngestOldConversation);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> playerNames = this.replyMapping.get(sender).stream()
|
||||||
|
.map(conversation -> Bukkit.getOfflinePlayer(conversation.target()).getName())
|
||||||
|
.distinct()
|
||||||
|
.toList();
|
||||||
|
|
||||||
final Component[] finalComponent = {Component.text("")};
|
final Component[] finalComponent = {Component.text("")};
|
||||||
Pupsi marked this conversation as resolved
Outdated
MineTec
commented
(ㆆ _ ㆆ) (ㆆ _ ㆆ)
|
|||||||
|
|
||||||
String firstTargetName = null;
|
|
||||||
if(youngestOldConversation != null && Bukkit.getPlayer(youngestOldConversation.target()) == null) {
|
|
||||||
firstTargetName = Bukkit.getOfflinePlayer(youngestOldConversation.target()).getName();
|
|
||||||
} else if(youngestOldConversation != null){
|
|
||||||
firstTargetName = Objects.requireNonNull(Bukkit.getPlayer(youngestOldConversation.target())).getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(firstTargetName != null && !playerNames.contains(firstTargetName)) {
|
|
||||||
finalComponent[0] = finalComponent[0].append(
|
|
||||||
Component.text("[")
|
|
||||||
.append(Component.text(firstTargetName, NamedTextColor.GOLD))
|
|
||||||
.append(Component.text("]"))
|
|
||||||
.clickEvent(ClickEvent.runCommand("/msg " + firstTargetName + " " + message))
|
|
||||||
.hoverEvent(HoverEvent.showText(Component.text("Klicke, um diesem Spieler zu schreiben.").color(NamedTextColor.GOLD))))
|
|
||||||
.append(Component.text(" "));
|
|
||||||
}
|
|
||||||
|
|
||||||
playerNames.forEach(playerName -> finalComponent[0] = finalComponent[0].append(
|
playerNames.forEach(playerName -> finalComponent[0] = finalComponent[0].append(
|
||||||
Pupsi marked this conversation as resolved
Outdated
MineTec
commented
wenn du einen weg findest finalComponent nicht überschreiben zu müssen brauchst du den array quark nicht.
wenn du einen weg findest finalComponent nicht überschreiben zu müssen brauchst du den array quark nicht.
```
ComponentBuilder<TextComponent, TextComponent.Builder> component = Component.text();
playerNames.forEach(playerName -> component.append(
Component.text("[")
.append(Component.text(playerName, NamedTextColor.GOLD))
.append(Component.text("]"))
.clickEvent(ClickEvent.runCommand("/msg " + playerName + " " + message))
.hoverEvent(HoverEvent.showText(Component.text("Klicke, um diesem Spieler zu schreiben.").color(NamedTextColor.GOLD))))
.append(Component.text(" ")));
sender.sendMessage("");
sender.sendMessage(component.build());
sender.sendMessage("");
```
|
|||||||
Component.text("[")
|
Component.text("[")
|
||||||
.append(Component.text(playerName, NamedTextColor.GOLD))
|
.append(Component.text(playerName, NamedTextColor.GOLD))
|
||||||
|
das kann noch über tooOldConversations und dort verwendet werden, auch bei dem removeAll