develop-chatReply #5

Merged
Pupsi merged 11 commits from develop-chatReply into master 2024-10-06 13:52:59 +00:00
Showing only changes of commit 471cd8e610 - Show all commits

View File

@ -8,6 +8,7 @@ import eu.mhsl.craftattack.spawn.appliances.privateMessage.commands.PrivateMessa
import eu.mhsl.craftattack.spawn.appliances.privateMessage.commands.PrivateReplyCommand;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.event.HoverEvent;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@ -51,8 +52,10 @@ public class PrivateMessage extends Appliance {
return Bukkit.getOfflinePlayer(conversation.target()).getName();
}
})
.distinct()
.toList();
sender.sendMessage("");
sender.sendMessage(
Component.text()
.append(Component.text("Das Ziel für /r hat sich bei dir in den letzten "))
@ -60,8 +63,8 @@ public class PrivateMessage extends Appliance {
.append(Component.text(" Sekunden geändert. Wer soll deine Nachricht bekommen? "))
Pupsi marked this conversation as resolved Outdated

this.sendWhisper

this.sendWhisper
);
Component newTextComponent = Component.text("");
final Component[] finalComponent = {Component.text("")};
Pupsi marked this conversation as resolved Outdated

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())

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())`
String firstTargetName;
if(Bukkit.getPlayer(youngestEntry.target()) == null) {
@ -70,24 +73,21 @@ public class PrivateMessage extends Appliance {
firstTargetName = Objects.requireNonNull(Bukkit.getPlayer(youngestEntry.target())).getName();
Pupsi marked this conversation as resolved Outdated

"erhalten" statt "bekommen" klingt denke ich besser

"erhalten" statt "bekommen" klingt denke ich besser
}
if(firstTargetName != null) {
Component nameComponent = Component.text("");
nameComponent.append(Component.text(firstTargetName, NamedTextColor.LIGHT_PURPLE));
newTextComponent
.append(nameComponent.clickEvent(ClickEvent.runCommand("/msg " + firstTargetName + " " + message)));
newTextComponent.append(Component.text(" "));
if(firstTargetName != null && !playerNames.contains(firstTargetName)) {
finalComponent[0] = finalComponent[0].append(Component.text(firstTargetName, NamedTextColor.GOLD)
Pupsi marked this conversation as resolved Outdated

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?
.clickEvent(ClickEvent.runCommand("/msg " + firstTargetName + " " + message))
.hoverEvent(HoverEvent.showText(Component.text("Klicke, um diesem Spieler zu schreiben.").color(NamedTextColor.GOLD))))
.append(Component.text(" "));
Pupsi marked this conversation as resolved
Review

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?
}
playerNames.forEach(playerName -> finalComponent[0] = finalComponent[0].append(Component.text(playerName, NamedTextColor.GOLD)
.clickEvent(ClickEvent.runCommand("/msg " + playerName + " " + message))
.hoverEvent(HoverEvent.showText(Component.text("Klicke, um diesem Spieler zu schreiben.").color(NamedTextColor.GOLD))))
.append(Component.text(" ")));
playerNames.forEach(playerName -> {
Component nameComponent = Component.text(playerName, NamedTextColor.LIGHT_PURPLE);
newTextComponent
.append(nameComponent.clickEvent(ClickEvent.runCommand("/msg " + playerName + " " + message)));
newTextComponent.append(Component.text(" "));
});
sender.sendMessage(newTextComponent);
sender.sendMessage("");
sender.sendMessage(finalComponent[0]);
sender.sendMessage("");
}