From c59922d94e91fb9820a52408c04038db56c6331b Mon Sep 17 00:00:00 2001 From: Noah van der Aa Date: Fri, 23 Dec 2022 16:54:04 +0100 Subject: [PATCH] Expose signed message in chat events (#8694) --- patches/api/0005-Adventure.patch | 42 +++++++++++++------ patches/server/0009-Adventure.patch | 9 ++-- ...nilla-per-world-scoreboard-coloring-.patch | 4 +- 3 files changed, 37 insertions(+), 18 deletions(-) diff --git a/patches/api/0005-Adventure.patch b/patches/api/0005-Adventure.patch index 2ab8f14aae..169e054512 100644 --- a/patches/api/0005-Adventure.patch +++ b/patches/api/0005-Adventure.patch @@ -198,21 +198,23 @@ index 0000000000000000000000000000000000000000..9adeb880f7948f937891d83e256c808b +} diff --git a/src/main/java/io/papermc/paper/event/player/AbstractChatEvent.java b/src/main/java/io/papermc/paper/event/player/AbstractChatEvent.java new file mode 100644 -index 0000000000000000000000000000000000000000..fa03a5cb2d3e3e0a60d84bacc911d96c454f81da +index 0000000000000000000000000000000000000000..e7e13011c76285681ad420e6f356f6b83045d31a --- /dev/null +++ b/src/main/java/io/papermc/paper/event/player/AbstractChatEvent.java -@@ -0,0 +1,112 @@ +@@ -0,0 +1,128 @@ +package io.papermc.paper.event.player; + -+import java.util.Set; +import io.papermc.paper.chat.ChatRenderer; +import net.kyori.adventure.audience.Audience; ++import net.kyori.adventure.chat.SignedMessage; +import net.kyori.adventure.text.Component; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.player.PlayerEvent; +import org.jetbrains.annotations.NotNull; + ++import java.util.Set; ++ +import static java.util.Objects.requireNonNull; + +/** @@ -221,16 +223,18 @@ index 0000000000000000000000000000000000000000..fa03a5cb2d3e3e0a60d84bacc911d96c +public abstract class AbstractChatEvent extends PlayerEvent implements Cancellable { + private final Set viewers; + private final Component originalMessage; ++ private final SignedMessage signedMessage; + private ChatRenderer renderer; + private Component message; + private boolean cancelled = false; + -+ AbstractChatEvent(final boolean async, final @NotNull Player player, final @NotNull Set viewers, final @NotNull ChatRenderer renderer, final @NotNull Component message, final @NotNull Component originalMessage) { ++ AbstractChatEvent(final boolean async, final @NotNull Player player, final @NotNull Set viewers, final @NotNull ChatRenderer renderer, final @NotNull Component message, final @NotNull Component originalMessage, final @NotNull SignedMessage signedMessage) { + super(player, async); + this.viewers = viewers; + this.renderer = renderer; + this.message = message; + this.originalMessage = originalMessage; ++ this.signedMessage = signedMessage; + } + + /** @@ -304,6 +308,18 @@ index 0000000000000000000000000000000000000000..fa03a5cb2d3e3e0a60d84bacc911d96c + return this.originalMessage; + } + ++ /** ++ * Gets the signed message. ++ * Changes made in this event will not update ++ * the signed message. ++ * ++ * @return the signed message ++ */ ++ @NotNull ++ public final SignedMessage signedMessage() { ++ return this.signedMessage; ++ } ++ + @Override + public final boolean isCancelled() { + return this.cancelled; @@ -472,15 +488,16 @@ index 0000000000000000000000000000000000000000..9a962337948810b00ceae1124962fcc7 +} diff --git a/src/main/java/io/papermc/paper/event/player/AsyncChatEvent.java b/src/main/java/io/papermc/paper/event/player/AsyncChatEvent.java new file mode 100644 -index 0000000000000000000000000000000000000000..0d9e3c23027e3af90cb70e4bb6fb0ac1da35fc4d +index 0000000000000000000000000000000000000000..975a767313247d3b1c2a6cfd42c7fa6cd1525c53 --- /dev/null +++ b/src/main/java/io/papermc/paper/event/player/AsyncChatEvent.java -@@ -0,0 +1,31 @@ +@@ -0,0 +1,32 @@ +package io.papermc.paper.event.player; + +import java.util.Set; +import io.papermc.paper.chat.ChatRenderer; +import net.kyori.adventure.audience.Audience; ++import net.kyori.adventure.chat.SignedMessage; +import net.kyori.adventure.text.Component; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; @@ -492,8 +509,8 @@ index 0000000000000000000000000000000000000000..0d9e3c23027e3af90cb70e4bb6fb0ac1 +public final class AsyncChatEvent extends AbstractChatEvent { + private static final HandlerList HANDLERS = new HandlerList(); + -+ public AsyncChatEvent(final boolean async, final @NotNull Player player, final @NotNull Set viewers, final @NotNull ChatRenderer renderer, final @NotNull Component message, final @NotNull Component originalMessage) { -+ super(async, player, viewers, renderer, message, originalMessage); ++ public AsyncChatEvent(final boolean async, final @NotNull Player player, final @NotNull Set viewers, final @NotNull ChatRenderer renderer, final @NotNull Component message, final @NotNull Component originalMessage, final @NotNull SignedMessage signedMessage) { ++ super(async, player, viewers, renderer, message, originalMessage, signedMessage); + } + + @NotNull @@ -509,15 +526,16 @@ index 0000000000000000000000000000000000000000..0d9e3c23027e3af90cb70e4bb6fb0ac1 +} diff --git a/src/main/java/io/papermc/paper/event/player/ChatEvent.java b/src/main/java/io/papermc/paper/event/player/ChatEvent.java new file mode 100644 -index 0000000000000000000000000000000000000000..eb179aae1e1d2ce842442e49fe275827a430ccd0 +index 0000000000000000000000000000000000000000..46c209f61135c7d37ccfbbc7bb1d74e608fac9d3 --- /dev/null +++ b/src/main/java/io/papermc/paper/event/player/ChatEvent.java -@@ -0,0 +1,36 @@ +@@ -0,0 +1,37 @@ +package io.papermc.paper.event.player; + +import java.util.Set; +import io.papermc.paper.chat.ChatRenderer; +import net.kyori.adventure.audience.Audience; ++import net.kyori.adventure.chat.SignedMessage; +import net.kyori.adventure.text.Component; +import org.bukkit.Warning; +import org.bukkit.entity.Player; @@ -534,8 +552,8 @@ index 0000000000000000000000000000000000000000..eb179aae1e1d2ce842442e49fe275827 +public final class ChatEvent extends AbstractChatEvent { + private static final HandlerList HANDLERS = new HandlerList(); + -+ public ChatEvent(final @NotNull Player player, final @NotNull Set viewers, final @NotNull ChatRenderer renderer, final @NotNull Component message, final @NotNull Component originalMessage) { -+ super(false, player, viewers, renderer, message, originalMessage); ++ public ChatEvent(final @NotNull Player player, final @NotNull Set viewers, final @NotNull ChatRenderer renderer, final @NotNull Component message, final @NotNull Component originalMessage, final @NotNull SignedMessage signedMessage) { ++ super(false, player, viewers, renderer, message, originalMessage, signedMessage); + } + + @NotNull diff --git a/patches/server/0009-Adventure.patch b/patches/server/0009-Adventure.patch index 0e05926943..52aac611e8 100644 --- a/patches/server/0009-Adventure.patch +++ b/patches/server/0009-Adventure.patch @@ -251,10 +251,10 @@ index 0000000000000000000000000000000000000000..e7671b9e2fc5ed01461e4ae1557dfc14 +} diff --git a/src/main/java/io/papermc/paper/adventure/ChatProcessor.java b/src/main/java/io/papermc/paper/adventure/ChatProcessor.java new file mode 100644 -index 0000000000000000000000000000000000000000..4dfeb712fffc28f79e8b6c13869f3d0e64fc9ccd +index 0000000000000000000000000000000000000000..e7bcc08e3d3fe0ecb97e65cb2c32582750e22c28 --- /dev/null +++ b/src/main/java/io/papermc/paper/adventure/ChatProcessor.java -@@ -0,0 +1,410 @@ +@@ -0,0 +1,411 @@ +package io.papermc.paper.adventure; + +import io.papermc.paper.chat.ChatRenderer; @@ -427,7 +427,8 @@ index 0000000000000000000000000000000000000000..4dfeb712fffc28f79e8b6c13869f3d0e + } + + private void processModern(final ChatRenderer renderer, final Set viewers, final Component message, final Player player, final boolean cancelled) { -+ final AsyncChatEvent ae = new AsyncChatEvent(this.async, player, viewers, renderer, message, this.paper$originalMessage); ++ final PlayerChatMessage.AdventureView signedMessage = this.message.adventureView(); ++ final AsyncChatEvent ae = new AsyncChatEvent(this.async, player, viewers, renderer, message, this.paper$originalMessage, signedMessage); + ae.setCancelled(cancelled); // propagate cancelled state + this.post(ae); + final boolean listenersOnSyncEvent = canYouHearMe(ChatEvent.getHandlerList()); @@ -435,7 +436,7 @@ index 0000000000000000000000000000000000000000..4dfeb712fffc28f79e8b6c13869f3d0e + this.queueIfAsyncOrRunImmediately(new Waitable() { + @Override + protected Void evaluate() { -+ final ChatEvent se = new ChatEvent(player, ae.viewers(), ae.renderer(), ae.message(), ChatProcessor.this.paper$originalMessage/*, ae.usePreviewComponent()*/); ++ final ChatEvent se = new ChatEvent(player, ae.viewers(), ae.renderer(), ae.message(), ChatProcessor.this.paper$originalMessage/*, ae.usePreviewComponent()*/, signedMessage); + se.setCancelled(ae.isCancelled()); // propagate cancelled state + ChatProcessor.this.post(se); + ChatProcessor.this.readModernModifications(se, renderer); diff --git a/patches/server/0086-Option-to-use-vanilla-per-world-scoreboard-coloring-.patch b/patches/server/0086-Option-to-use-vanilla-per-world-scoreboard-coloring-.patch index 5d20e9924f..50f36541f3 100644 --- a/patches/server/0086-Option-to-use-vanilla-per-world-scoreboard-coloring-.patch +++ b/patches/server/0086-Option-to-use-vanilla-per-world-scoreboard-coloring-.patch @@ -12,7 +12,7 @@ for this on CB at one point but I can't find it. We may need to do this ourselves at some point in the future. diff --git a/src/main/java/io/papermc/paper/adventure/ChatProcessor.java b/src/main/java/io/papermc/paper/adventure/ChatProcessor.java -index 4dfeb712fffc28f79e8b6c13869f3d0e64fc9ccd..0f5cf192c0848bdeadeda381e19ec035455abfe5 100644 +index e7bcc08e3d3fe0ecb97e65cb2c32582750e22c28..309fe1162db195c7c3c94d785d6aa2700e42b08a 100644 --- a/src/main/java/io/papermc/paper/adventure/ChatProcessor.java +++ b/src/main/java/io/papermc/paper/adventure/ChatProcessor.java @@ -28,7 +28,9 @@ import net.minecraft.network.chat.PlayerChatMessage; @@ -25,7 +25,7 @@ index 4dfeb712fffc28f79e8b6c13869f3d0e64fc9ccd..0f5cf192c0848bdeadeda381e19ec035 import org.bukkit.craftbukkit.entity.CraftPlayer; import org.bukkit.craftbukkit.util.LazyPlayerSet; import org.bukkit.craftbukkit.util.Waitable; -@@ -363,10 +365,16 @@ public final class ChatProcessor { +@@ -364,10 +366,16 @@ public final class ChatProcessor { } static String legacyDisplayName(final CraftPlayer player) {