diff --git a/patches/api/Adventure.patch b/patches/api/Adventure.patch index 9d67c6eca..8c986aba4 100644 --- a/patches/api/Adventure.patch +++ b/patches/api/Adventure.patch @@ -512,6 +512,16 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + +/** + * An event fired when a {@link Player} sends a chat message to the server. ++ *

++ * This event will sometimes fire synchronously, depending on how it was ++ * triggered. ++ *

++ * 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. ++ *

++ * 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(); diff --git a/patches/server/Adventure.patch b/patches/server/Adventure.patch index f09fdcf28..f5e9b0e65 100644 --- a/patches/server/Adventure.patch +++ b/patches/server/Adventure.patch @@ -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