From 7957b878f9b52a64dd9b5d4c1a13a205f524fbba Mon Sep 17 00:00:00 2001
From: md_5 <git@md-5.net>
Date: Sat, 13 Dec 2014 13:06:05 +1100
Subject: [PATCH] BungeeCord Chat API


diff --git a/src/main/java/net/minecraft/server/PacketPlayOutChat.java b/src/main/java/net/minecraft/server/PacketPlayOutChat.java
new file mode 100644
index 0000000..f9a25e9
--- /dev/null
+++ b/src/main/java/net/minecraft/server/PacketPlayOutChat.java
@@ -0,0 +1,47 @@
+package net.minecraft.server;
+
+public class PacketPlayOutChat implements Packet {
+
+    private IChatBaseComponent a;
+    public net.md_5.bungee.api.chat.BaseComponent[] components; // Spigot
+    private byte b;
+
+    public PacketPlayOutChat() {}
+
+    public PacketPlayOutChat(IChatBaseComponent ichatbasecomponent) {
+        this(ichatbasecomponent, (byte) 1);
+    }
+
+    public PacketPlayOutChat(IChatBaseComponent ichatbasecomponent, byte b0) {
+        this.a = ichatbasecomponent;
+        this.b = b0;
+    }
+
+    public void a(PacketDataSerializer packetdataserializer) {
+        this.a = packetdataserializer.d();
+        this.b = packetdataserializer.readByte();
+    }
+
+    public void b(PacketDataSerializer packetdataserializer) {
+        // Spigot start
+        if (components != null) {
+            packetdataserializer.a(net.md_5.bungee.chat.ComponentSerializer.toString(components));
+        } else {
+            packetdataserializer.a(this.a);
+        }
+        // Spigot end
+        packetdataserializer.writeByte(this.b);
+    }
+
+    public void a(PacketListenerPlayOut packetlistenerplayout) {
+        packetlistenerplayout.a(this);
+    }
+
+    public boolean b() {
+        return this.b == 1 || this.b == 2;
+    }
+
+    public void a(PacketListener packetlistener) {
+        this.a((PacketListenerPlayOut) packetlistener);
+    }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 8b4b580..980dd99 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -121,6 +121,7 @@ import io.netty.buffer.ByteBufOutputStream;
 import io.netty.buffer.Unpooled;
 import io.netty.handler.codec.base64.Base64;
 import jline.console.ConsoleReader;
+import net.md_5.bungee.api.chat.BaseComponent;
 
 public final class CraftServer implements Server {
     private static final Player[] EMPTY_PLAYER_ARRAY = new Player[0];
@@ -1689,6 +1690,20 @@ public final class CraftServer implements Server {
         {
             return org.spigotmc.SpigotConfig.config;
         }
+
+        @Override
+        public void broadcast(BaseComponent component) {
+            for (Player player : getOnlinePlayers()) {
+                player.spigot().sendMessage(component);
+            }
+        }
+
+        @Override
+        public void broadcast(BaseComponent... components) {
+            for (Player player : getOnlinePlayers()) {
+                player.spigot().sendMessage(components);
+            }
+        }
     };
 
     public Spigot spigot()
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 84dd215..c315654 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -18,6 +18,7 @@ import java.util.Set;
 import java.util.UUID;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+import net.md_5.bungee.api.chat.BaseComponent;
 
 import net.minecraft.server.*;
 
@@ -1428,6 +1429,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
 
             return java.util.Collections.unmodifiableSet( ret );
         }
+
+        @Override
+        public void sendMessage(BaseComponent component) {
+          sendMessage( new BaseComponent[] { component } );
+        }
+
+        @Override
+        public void sendMessage(BaseComponent... components) {
+           if ( getHandle().playerConnection == null ) return;
+
+            PacketPlayOutChat packet = new PacketPlayOutChat();
+            packet.components = components;
+            getHandle().playerConnection.sendPacket(packet);
+        }
     };
 
     public Player.Spigot spigot()
-- 
2.1.0