Properly disallow async Player#chat (#8123)

Clarify asynchronous status of AsyncChatEvent
This commit is contained in:
Jake Potrebic 2023-12-28 16:50:06 -08:00
parent 359ddffcf1
commit 0c4e87fd28
2 changed files with 13 additions and 0 deletions

View file

@ -512,6 +512,16 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
+
+/**
+ * An event fired when a {@link Player} sends a chat message to the server.
+ * <p>
+ * This event will sometimes fire synchronously, depending on how it was
+ * triggered.
+ * <p>
+ * If a player is the direct cause of this event by an incoming packet, this
+ * event will be asynchronous. If a plugin triggers this event by compelling a
+ * player to chat, this event will be synchronous.
+ * <p>
+ * Care should be taken to check {@link #isAsynchronous()} and treat the event
+ * appropriately.
+ */
+public final class AsyncChatEvent extends AbstractChatEvent {
+ private static final HandlerList HANDLERS = new HandlerList();

View file

@ -2947,6 +2947,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
- } else {
+ // Paper start
+ } else if (true) {
+ if (!async && !org.bukkit.Bukkit.isPrimaryThread()) {
+ org.spigotmc.AsyncCatcher.catchOp("Asynchronous player chat is not allowed here");
+ }
+ final ChatProcessor cp = new ChatProcessor(this.server, this.player, original, async);
+ cp.process();
+ // Paper end