diff --git a/CraftBukkit-Patches/0145-Process-conversation-input-on-the-main-thread.-Fixes.patch b/CraftBukkit-Patches/0145-Process-conversation-input-on-the-main-thread.-Fixes.patch new file mode 100644 index 0000000000..f0f0871cf8 --- /dev/null +++ b/CraftBukkit-Patches/0145-Process-conversation-input-on-the-main-thread.-Fixes.patch @@ -0,0 +1,41 @@ +From 1b5f25c89db42d48a6140d1a2e17e11c53ca71a7 Mon Sep 17 00:00:00 2001 +From: riking +Date: Wed, 14 May 2014 13:46:48 -0700 +Subject: [PATCH] Process conversation input on the main thread. Fixes + BUKKIT-5611 + + +diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java +index 58ae547..d8d7a70 100644 +--- a/src/main/java/net/minecraft/server/PlayerConnection.java ++++ b/src/main/java/net/minecraft/server/PlayerConnection.java +@@ -834,7 +834,25 @@ public class PlayerConnection implements PacketPlayInListener { + } else if (s.isEmpty()) { + c.warn(this.player.getName() + " tried to send an empty message"); + } else if (getPlayer().isConversing()) { +- getPlayer().acceptConversationInput(s); ++ final String message = s; ++ ++ Waitable waitable = new Waitable() { ++ @Override ++ protected Object evaluate() { ++ getPlayer().acceptConversationInput(message); ++ return null; ++ } ++ }; ++ ++ this.minecraftServer.processQueue.add(waitable); ++ ++ try { ++ waitable.get(); ++ } catch (InterruptedException e) { ++ Thread.currentThread().interrupt(); ++ } catch (ExecutionException e) { ++ throw new RuntimeException(e); ++ } + } else if (this.player.getChatFlags() == EnumChatVisibility.SYSTEM) { // Re-add "Command Only" flag check + ChatMessage chatmessage = new ChatMessage("chat.cannotSend", new Object[0]); + +-- +1.9.1 +