From f7da014334bdb59b45fd12e8e4eba4cd3195fa42 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 13 Dec 2014 03:06:05 +0100 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 index e55384e70..28a262835 100644 --- a/src/main/java/net/minecraft/server/PacketPlayOutChat.java +++ b/src/main/java/net/minecraft/server/PacketPlayOutChat.java @@ -5,6 +5,7 @@ import java.io.IOException; public class PacketPlayOutChat implements Packet { private IChatBaseComponent a; + public net.md_5.bungee.api.chat.BaseComponent[] components; // Spigot private ChatMessageType b; public PacketPlayOutChat() {} @@ -24,7 +25,13 @@ public class PacketPlayOutChat implements Packet { } public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.a(this.a); + // 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.a()); } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java index b810024dd..7cd9b3b8c 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -150,6 +150,7 @@ import org.bukkit.craftbukkit.tag.CraftBlockTag; import org.bukkit.craftbukkit.tag.CraftItemTag; import org.bukkit.craftbukkit.util.CraftNamespacedKey; import org.bukkit.event.server.TabCompleteEvent; +import net.md_5.bungee.api.chat.BaseComponent; public final class CraftServer implements Server { private final String serverName = "CraftBukkit"; @@ -1845,6 +1846,20 @@ public final class CraftServer implements Server { public void restart() { org.spigotmc.RestartCommand.restart(); } + + @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/command/ServerCommandSender.java b/src/main/java/org/bukkit/craftbukkit/command/ServerCommandSender.java index c10a84452..5c3421dd3 100644 --- a/src/main/java/org/bukkit/craftbukkit/command/ServerCommandSender.java +++ b/src/main/java/org/bukkit/craftbukkit/command/ServerCommandSender.java @@ -81,6 +81,17 @@ public abstract class ServerCommandSender implements CommandSender { // Spigot start private final Spigot spigot = new Spigot() { + @Override + public void sendMessage(net.md_5.bungee.api.chat.BaseComponent component) + { + ServerCommandSender.this.sendMessage(net.md_5.bungee.api.chat.TextComponent.toLegacyText(component)); + } + + @Override + public void sendMessage(net.md_5.bungee.api.chat.BaseComponent... components) + { + ServerCommandSender.this.sendMessage(net.md_5.bungee.api.chat.TextComponent.toLegacyText(components)); + } }; @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java index 2564bdf4d..b542b17fd 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -763,6 +763,16 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { { return getHandle().isInvulnerable(net.minecraft.server.DamageSource.GENERIC); } + + @Override + public void sendMessage(net.md_5.bungee.api.chat.BaseComponent component) + { + } + + @Override + public void sendMessage(net.md_5.bungee.api.chat.BaseComponent... 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 36365bce0..2d09bb4fa 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -23,6 +23,7 @@ import java.util.UUID; import java.util.WeakHashMap; import java.util.logging.Level; import java.util.logging.Logger; +import net.md_5.bungee.api.chat.BaseComponent; import net.minecraft.server.AdvancementDataPlayer; import net.minecraft.server.AdvancementProgress; @@ -1675,6 +1676,38 @@ 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(null, net.minecraft.server.ChatMessageType.CHAT); + packet.components = components; + getHandle().playerConnection.sendPacket(packet); + } + + @Override + public void sendMessage(net.md_5.bungee.api.ChatMessageType position, BaseComponent component) { + sendMessage( position, new BaseComponent[] { component } ); + } + + @Override + public void sendMessage(net.md_5.bungee.api.ChatMessageType position, BaseComponent... components) { + if ( getHandle().playerConnection == null ) return; + + PacketPlayOutChat packet = new PacketPlayOutChat(null, net.minecraft.server.ChatMessageType.a((byte) position.ordinal())); + // Action bar doesn't render colours, replace colours with legacy section symbols + if (position == net.md_5.bungee.api.ChatMessageType.ACTION_BAR) { + components = new BaseComponent[]{new net.md_5.bungee.api.chat.TextComponent(BaseComponent.toLegacyText(components))}; + } + packet.components = components; + getHandle().playerConnection.sendPacket(packet); + } }; public Player.Spigot spigot() diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java index 600538b11..6ff1a2dcd 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java @@ -25,6 +25,9 @@ import org.bukkit.craftbukkit.util.CraftChatMessage; // Spigot start import static org.spigotmc.ValidateUtils.*; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.chat.ComponentSerializer; +import net.minecraft.server.ChatBaseComponent; // Spigot end @DelegateDeserialization(SerializableMeta.class) @@ -362,6 +365,69 @@ public class CraftMetaBook extends CraftMetaItem implements BookMeta { // Spigot start private final BookMeta.Spigot spigot = new BookMeta.Spigot() { + + @Override + public BaseComponent[] getPage(final int page) { + Validate.isTrue(isValidPage(page), "Invalid page number"); + return ComponentSerializer.parse(IChatBaseComponent.ChatSerializer.a(pages.get(page - 1))); + } + + @Override + public void setPage(final int page, final BaseComponent... text) { + if (!isValidPage(page)) { + throw new IllegalArgumentException("Invalid page number " + page + "/" + pages.size()); + } + + BaseComponent[] newText = text == null ? new BaseComponent[0] : text; + CraftMetaBook.this.pages.set(page - 1, IChatBaseComponent.ChatSerializer.a(ComponentSerializer.toString(newText))); + } + + @Override + public void setPages(final BaseComponent[]... pages) { + CraftMetaBook.this.pages.clear(); + + addPage(pages); + } + + @Override + public void addPage(final BaseComponent[]... pages) { + for (BaseComponent[] page : pages) { + if (CraftMetaBook.this.pages.size() >= MAX_PAGES) { + return; + } + + if (page == null) { + page = new BaseComponent[0]; + } + + CraftMetaBook.this.pages.add(IChatBaseComponent.ChatSerializer.a(ComponentSerializer.toString(page))); + } + } + + @Override + public List getPages() { + final List copy = ImmutableList.copyOf(CraftMetaBook.this.pages); + return new AbstractList() { + + @Override + public BaseComponent[] get(int index) { + return ComponentSerializer.parse(IChatBaseComponent.ChatSerializer.a(copy.get(index))); + } + + @Override + public int size() { + return copy.size(); + } + }; + } + + @Override + public void setPages(List pages) { + CraftMetaBook.this.pages.clear(); + for (BaseComponent[] page : pages) { + addPage(page); + } + } }; @Override -- 2.17.1