-
-
Notifications
You must be signed in to change notification settings - Fork 360
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
db9c5ad
commit 8aa5c25
Showing
2 changed files
with
142 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
+ } | ||
+} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); |