diff --git a/src/main/java/net/minecraft/server/NetServerHandler.java b/src/main/java/net/minecraft/server/NetServerHandler.java
index 5812d24a01..5afc92fbec 100644
--- a/src/main/java/net/minecraft/server/NetServerHandler.java
+++ b/src/main/java/net/minecraft/server/NetServerHandler.java
@@ -15,13 +15,16 @@ import org.bukkit.ChatColor;
 import org.bukkit.craftbukkit.ChunkCompressionThread;
 import org.bukkit.Location;
 import org.bukkit.command.CommandException;
+import org.bukkit.conversations.Conversable;
 import org.bukkit.craftbukkit.CraftWorld;
+import org.bukkit.craftbukkit.inventory.CraftInventoryCustom;
 import org.bukkit.craftbukkit.inventory.CraftInventoryView;
 import org.bukkit.craftbukkit.inventory.CraftItemStack;
 import org.bukkit.craftbukkit.block.CraftBlock;
 import org.bukkit.craftbukkit.entity.CraftPlayer;
 import org.bukkit.craftbukkit.event.CraftEventFactory;
 import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.craftbukkit.TextWrapper;
 import org.bukkit.entity.HumanEntity;
 import org.bukkit.entity.Player;
 import org.bukkit.event.Event;
@@ -715,7 +718,10 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
             this.player.compassTarget = new Location(this.getPlayer().getWorld(), packet6.x, packet6.y, packet6.z);
         } else if (packet instanceof Packet3Chat) {
             String message = ((Packet3Chat) packet).message;
-            for (final String line : message.split("\n")) {
+            boolean first = true;
+            for (String line : TextWrapper.wrapText(message)) {
+                if (!first) line = " " + line;
+                first = false;
                 this.networkManager.queue(new Packet3Chat(line));
             }
             packet = null;
diff --git a/src/main/java/org/bukkit/craftbukkit/TextWrapper.java b/src/main/java/org/bukkit/craftbukkit/TextWrapper.java
new file mode 100644
index 0000000000..588b59ee1b
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/TextWrapper.java
@@ -0,0 +1,20 @@
+package org.bukkit.craftbukkit;
+
+import org.bukkit.ChatColor;
+
+public class TextWrapper {
+    private static final int CHAT_STRING_LENGTH = 119;
+
+    public static String[] wrapText(final String text) {
+        return insertLineBreaks(text).split("\n");
+    }
+
+    public static String insertLineBreaks(String input) {
+        if (input.length() <= CHAT_STRING_LENGTH) return input;
+
+        String head = input.substring(0, CHAT_STRING_LENGTH);
+        String tail = ChatColor.getLastColors(head) + input.substring(CHAT_STRING_LENGTH + (input.charAt(CHAT_STRING_LENGTH) == ' ' ? 1 : 0));
+
+        return head + "\n" + insertLineBreaks(tail);
+    }
+}