spigot/CraftBukkit-Patches/0114-BungeeCord-Chat-API.patch
2018-08-06 10:32:15 +10:00

247 lines
9.7 KiB
Diff

From f7da014334bdb59b45fd12e8e4eba4cd3195fa42 Mon Sep 17 00:00:00 2001
From: md_5 <git@md-5.net>
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<PacketListenerPlayOut> {
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<PacketListenerPlayOut> {
}
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<BaseComponent[]> getPages() {
+ final List<IChatBaseComponent> copy = ImmutableList.copyOf(CraftMetaBook.this.pages);
+ return new AbstractList<BaseComponent[]>() {
+
+ @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<BaseComponent[]> pages) {
+ CraftMetaBook.this.pages.clear();
+ for (BaseComponent[] page : pages) {
+ addPage(page);
+ }
+ }
};
@Override
--
2.17.1