Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 102 additions & 0 deletions patches/api/0049-Chat-Preview-API.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: BillyGalbreath <blake.galbreath@gmail.com>
Date: Mon, 11 Jul 2022 21:09:14 -0500
Subject: [PATCH] Chat Preview API


diff --git a/src/main/java/org/purpurmc/purpur/event/player/PlayerPreviewChatEvent.java b/src/main/java/org/purpurmc/purpur/event/player/PlayerPreviewChatEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..502896f69a139c9524625a2c0d9029f85276146b
--- /dev/null
+++ b/src/main/java/org/purpurmc/purpur/event/player/PlayerPreviewChatEvent.java
@@ -0,0 +1,90 @@
+package org.purpurmc.purpur.event.player;
+
+import net.kyori.adventure.text.Component;
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+import org.bukkit.event.Cancellable;
+import org.bukkit.event.HandlerList;
+import org.bukkit.event.player.PlayerEvent;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class PlayerPreviewChatEvent extends PlayerEvent implements Cancellable {
+ private static final HandlerList handlers = new HandlerList();
+ private final String originalQuery;
+ private Component query;
+
+ public PlayerPreviewChatEvent(@NotNull Player who, @NotNull String originalQuery, @Nullable Component query) {
+ super(who, !Bukkit.isPrimaryThread());
+ this.originalQuery = originalQuery;
+ this.query = query;
+ }
+
+ /**
+ * The original query string as sent from the client
+ *
+ * @return The original query string
+ */
+ @NotNull
+ public String getOriginalQuery() {
+ return originalQuery;
+ }
+
+ /**
+ * Get the current query.
+ * <p>
+ * Null queries represent "no changes".
+ *
+ * @return Current query
+ */
+ @Nullable
+ public Component getQuery() {
+ return this.query;
+ }
+
+ /**
+ * Get the current query.
+ * <p>
+ * Null queries represent "no changes".
+ *
+ * @param query The current query
+ */
+ public void setQuery(@Nullable Component query) {
+ this.query = query;
+ }
+
+ /**
+ * Gets the cancellation state of this event.
+ * <p>
+ * A cancelled event tells the client there are "no changes"
+ * to the chat, the same as setting the query to null.
+ *
+ * @return true if this event is cancelled
+ */
+ @Override
+ public boolean isCancelled() {
+ return this.query == null;
+ }
+
+ /**
+ * Sets the cancellation state of this event.
+ * <p>
+ * A cancelled event tells the client there are "no changes"
+ * to the chat, the same as setting the query to null.
+ */
+ @Override
+ public void setCancelled(boolean cancel) {
+ this.query = null;
+ }
+
+ @Override
+ @NotNull
+ public HandlerList getHandlers() {
+ return handlers;
+ }
+
+ @NotNull
+ public static HandlerList getHandlerList() {
+ return handlers;
+ }
+}
40 changes: 40 additions & 0 deletions patches/server/0288-Chat-Preview-API.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: BillyGalbreath <blake.galbreath@gmail.com>
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 d07bb2d1f365cb7c92a1252b83210fa38cbeeb1d..89bed23716b21fe6e1079fa9fc5d13688c2fee04 100644
--- a/src/main/java/net/minecraft/network/chat/ChatDecorator.java
+++ b/src/main/java/net/minecraft/network/chat/ChatDecorator.java
@@ -8,6 +8,16 @@ import net.minecraft.server.network.FilteredText;
@FunctionalInterface
public interface ChatDecorator {
ChatDecorator PLAIN = (sender, message) -> {
+ // Purpur start
+ 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 CompletableFuture.completedFuture(null);
+ }
+ if (!previewEvent.getQuery().equals(adventureComponent)) {
+ return CompletableFuture.completedFuture(io.papermc.paper.adventure.PaperAdventure.asVanilla(previewEvent.getQuery()));
+ }
+ // Purpur end
return CompletableFuture.completedFuture(message);
};

diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 3bb51f34be4341c991487a78d8793f074ffdcba4..d42a3a2ae2ed00f868d73ea0a0e90301301db380 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2512,7 +2512,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser

@Override
public void handleChatPreview(ServerboundChatPreviewPacket packet) {
- if (false && this.server.previewsChat()) { // CraftBukkit - preview NYI
+ if (this.server.previewsChat()) { // CraftBukkit - preview NYI // Purpur - lets implement it already.. sheesh
this.chatPreviewThrottler.schedule(() -> {
int i = packet.queryId();
String s = packet.query();