mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
Chat Preview API (#1050)
This commit is contained in:
102
patches/api/0049-Chat-Preview-API.patch
Normal file
102
patches/api/0049-Chat-Preview-API.patch
Normal file
@@ -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
patches/server/0288-Chat-Preview-API.patch
Normal file
40
patches/server/0288-Chat-Preview-API.patch
Normal file
@@ -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();
|
||||
Reference in New Issue
Block a user