diff --git a/patches/server/0287-Chat-Preview-API.patch b/patches/server/0287-Chat-Preview-API.patch index ce16fa71d..596ea2b50 100644 --- a/patches/server/0287-Chat-Preview-API.patch +++ b/patches/server/0287-Chat-Preview-API.patch @@ -4,26 +4,47 @@ Date: Mon, 11 Jul 2022 20:44:19 -0500 Subject: [PATCH] Chat Preview API -diff --git a/src/main/java/net/minecraft/network/chat/ChatDecorator.java b/src/main/java/net/minecraft/network/chat/ChatDecorator.java -index b9cdd89a3871d934a0449ed70766c2e9d6369ab9..cf415137057a309db0961dcc993cecf33203151e 100644 ---- a/src/main/java/net/minecraft/network/chat/ChatDecorator.java -+++ b/src/main/java/net/minecraft/network/chat/ChatDecorator.java -@@ -7,6 +7,18 @@ import net.minecraft.server.level.ServerPlayer; - @FunctionalInterface - public interface ChatDecorator { - ChatDecorator PLAIN = (sender, message) -> { +diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java +index a5b09ab0171dd100f9bcf81869346b1d11814092..ac8e7323f3ada11fd58a5df6496c7c96efd916be 100644 +--- a/src/main/java/net/minecraft/server/MinecraftServer.java ++++ b/src/main/java/net/minecraft/server/MinecraftServer.java +@@ -2628,12 +2628,29 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { + // Purpur start -+ if (sender != null) { -+ net.kyori.adventure.text.Component adventureComponent = io.papermc.paper.adventure.PaperAdventure.asAdventure(message); -+ org.purpurmc.purpur.event.player.PlayerPreviewChatEvent previewEvent = new org.purpurmc.purpur.event.player.PlayerPreviewChatEvent(sender.getBukkitEntity(), "", adventureComponent); -+ if (!previewEvent.callEvent()) { ++ return this.chatDecorator; ++ } ++ public void setChatDecorator(ChatDecorator chatDecorator) { ++ this.chatDecorator = chatDecorator; ++ } ++ private ChatDecorator chatDecorator = (entityplayer, ichatbasecomponent) -> { ++ // Purpur end + // Paper start - fix non-player sender + if (entityplayer == null) { + return CompletableFuture.completedFuture(ichatbasecomponent); + } + // Paper end ++ // Purpur start ++ net.kyori.adventure.text.Component adventureComponent = io.papermc.paper.adventure.PaperAdventure.asAdventure(ichatbasecomponent); ++ org.purpurmc.purpur.event.player.PlayerPreviewChatEvent purpurPreviewEvent = new org.purpurmc.purpur.event.player.PlayerPreviewChatEvent(entityplayer.getBukkitEntity(), "", adventureComponent); ++ if (!purpurPreviewEvent.callEvent()) { + return CompletableFuture.completedFuture(null); + } -+ if (!previewEvent.getQuery().equals(adventureComponent)) { -+ return CompletableFuture.completedFuture(io.papermc.paper.adventure.PaperAdventure.asVanilla(previewEvent.getQuery())); ++ if (!adventureComponent.equals(purpurPreviewEvent.getQuery())) { ++ return CompletableFuture.completedFuture(io.papermc.paper.adventure.PaperAdventure.asVanilla(purpurPreviewEvent.getQuery())); + } -+ } -+ // Purpur end - return CompletableFuture.completedFuture(message); - }; ++ // Purpur end + return CompletableFuture.supplyAsync(() -> { + AsyncPlayerChatPreviewEvent event = new AsyncPlayerChatPreviewEvent(true, entityplayer.getBukkitEntity(), CraftChatMessage.fromComponent(ichatbasecomponent), new LazyPlayerSet(this)); + String originalFormat = event.getFormat(), originalMessage = event.getMessage(); +@@ -2647,7 +2664,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop