mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-01 17:01:56 +01:00
BungeeCord Chat API
By: md_5 <git@md-5.net>
This commit is contained in:
parent
5ec1e1bc24
commit
49288f7f95
7 changed files with 287 additions and 0 deletions
|
@ -5,3 +5,16 @@
|
||||||
package net.minecraft.network.protocol.game;
|
package net.minecraft.network.protocol.game;
|
||||||
|
|
||||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||||
|
@@ -12,6 +13,12 @@
|
||||||
|
|
||||||
|
public static final StreamCodec<RegistryFriendlyByteBuf, ClientboundSystemChatPacket> STREAM_CODEC = StreamCodec.composite(ComponentSerialization.TRUSTED_STREAM_CODEC, ClientboundSystemChatPacket::content, ByteBufCodecs.BOOL, ClientboundSystemChatPacket::overlay, ClientboundSystemChatPacket::new);
|
||||||
|
|
||||||
|
+ // Spigot start
|
||||||
|
+ public ClientboundSystemChatPacket(net.md_5.bungee.api.chat.BaseComponent[] content, boolean overlay) {
|
||||||
|
+ this(org.bukkit.craftbukkit.util.CraftChatMessage.fromJSON(net.md_5.bungee.chat.ComponentSerializer.toString(content)), overlay);
|
||||||
|
+ }
|
||||||
|
+ // Spigot end
|
||||||
|
+
|
||||||
|
@Override
|
||||||
|
public PacketType<ClientboundSystemChatPacket> type() {
|
||||||
|
return GamePacketTypes.CLIENTBOUND_SYSTEM_CHAT;
|
||||||
|
|
|
@ -268,6 +268,8 @@ import org.yaml.snakeyaml.Yaml;
|
||||||
import org.yaml.snakeyaml.constructor.SafeConstructor;
|
import org.yaml.snakeyaml.constructor.SafeConstructor;
|
||||||
import org.yaml.snakeyaml.error.MarkedYAMLException;
|
import org.yaml.snakeyaml.error.MarkedYAMLException;
|
||||||
|
|
||||||
|
import net.md_5.bungee.api.chat.BaseComponent; // Spigot
|
||||||
|
|
||||||
public final class CraftServer implements Server {
|
public final class CraftServer implements Server {
|
||||||
private final String serverName = "CraftBukkit";
|
private final String serverName = "CraftBukkit";
|
||||||
private final String serverVersion;
|
private final String serverVersion;
|
||||||
|
@ -2603,6 +2605,20 @@ public final class CraftServer implements Server {
|
||||||
public void restart() {
|
public void restart() {
|
||||||
org.spigotmc.RestartCommand.restart();
|
org.spigotmc.RestartCommand.restart();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void broadcast(BaseComponent component) {
|
||||||
|
for (Player player : CraftServer.this.getOnlinePlayers()) {
|
||||||
|
player.spigot().sendMessage(component);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void broadcast(BaseComponent... components) {
|
||||||
|
for (Player player : CraftServer.this.getOnlinePlayers()) {
|
||||||
|
player.spigot().sendMessage(components);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public org.bukkit.Server.Spigot spigot()
|
public org.bukkit.Server.Spigot spigot()
|
||||||
|
|
|
@ -99,6 +99,29 @@ public abstract class ServerCommandSender implements CommandSender {
|
||||||
// Spigot start
|
// Spigot start
|
||||||
private final org.bukkit.command.CommandSender.Spigot spigot = new org.bukkit.command.CommandSender.Spigot()
|
private final org.bukkit.command.CommandSender.Spigot spigot = new org.bukkit.command.CommandSender.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
|
||||||
|
public void sendMessage(UUID sender, net.md_5.bungee.api.chat.BaseComponent... components)
|
||||||
|
{
|
||||||
|
this.sendMessage(components);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(UUID sender, net.md_5.bungee.api.chat.BaseComponent component)
|
||||||
|
{
|
||||||
|
this.sendMessage(component);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -59,6 +59,8 @@ import org.bukkit.util.BoundingBox;
|
||||||
import org.bukkit.util.NumberConversions;
|
import org.bukkit.util.NumberConversions;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
import net.md_5.bungee.api.chat.BaseComponent; // Spigot
|
||||||
|
|
||||||
public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
||||||
private static PermissibleBase perm;
|
private static PermissibleBase perm;
|
||||||
private static final CraftPersistentDataTypeRegistry DATA_TYPE_REGISTRY = new CraftPersistentDataTypeRegistry();
|
private static final CraftPersistentDataTypeRegistry DATA_TYPE_REGISTRY = new CraftPersistentDataTypeRegistry();
|
||||||
|
@ -897,6 +899,26 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
||||||
// Spigot start
|
// Spigot start
|
||||||
private final org.bukkit.entity.Entity.Spigot spigot = new org.bukkit.entity.Entity.Spigot()
|
private final org.bukkit.entity.Entity.Spigot spigot = new org.bukkit.entity.Entity.Spigot()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(net.md_5.bungee.api.chat.BaseComponent component)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(net.md_5.bungee.api.chat.BaseComponent... components)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(UUID sender, BaseComponent... components)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(UUID sender, BaseComponent component)
|
||||||
|
{
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public org.bukkit.entity.Entity.Spigot spigot()
|
public org.bukkit.entity.Entity.Spigot spigot()
|
||||||
|
|
|
@ -196,6 +196,8 @@ import org.bukkit.profile.PlayerProfile;
|
||||||
import org.bukkit.scoreboard.Scoreboard;
|
import org.bukkit.scoreboard.Scoreboard;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import net.md_5.bungee.api.chat.BaseComponent; // Spigot
|
||||||
|
|
||||||
@DelegateDeserialization(CraftOfflinePlayer.class)
|
@DelegateDeserialization(CraftOfflinePlayer.class)
|
||||||
public class CraftPlayer extends CraftHumanEntity implements Player {
|
public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||||
private long firstPlayed = 0;
|
private long firstPlayed = 0;
|
||||||
|
@ -2381,6 +2383,48 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||||
|
|
||||||
return java.util.Collections.unmodifiableSet( ret );
|
return java.util.Collections.unmodifiableSet( ret );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(BaseComponent component) {
|
||||||
|
this.sendMessage( new BaseComponent[] { component } );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(BaseComponent... components) {
|
||||||
|
this.sendMessage(net.md_5.bungee.api.ChatMessageType.SYSTEM, components);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(UUID sender, BaseComponent component) {
|
||||||
|
this.sendMessage(net.md_5.bungee.api.ChatMessageType.CHAT, sender, component);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(UUID sender, BaseComponent... components) {
|
||||||
|
this.sendMessage(net.md_5.bungee.api.ChatMessageType.CHAT, sender, components);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(net.md_5.bungee.api.ChatMessageType position, BaseComponent component) {
|
||||||
|
this.sendMessage( position, new BaseComponent[] { component } );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(net.md_5.bungee.api.ChatMessageType position, BaseComponent... components) {
|
||||||
|
this.sendMessage(position, null, components);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(net.md_5.bungee.api.ChatMessageType position, UUID sender, BaseComponent component) {
|
||||||
|
this.sendMessage( position, sender, new BaseComponent[] { component } );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(net.md_5.bungee.api.ChatMessageType position, UUID sender, BaseComponent... components) {
|
||||||
|
if ( CraftPlayer.this.getHandle().connection == null ) return;
|
||||||
|
|
||||||
|
CraftPlayer.this.getHandle().connection.send(new net.minecraft.network.protocol.game.ClientboundSystemChatPacket(components, position == net.md_5.bungee.api.ChatMessageType.ACTION_BAR));
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public Player.Spigot spigot()
|
public Player.Spigot spigot()
|
||||||
|
|
|
@ -11,6 +11,7 @@ import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import net.minecraft.core.component.DataComponentPatch;
|
import net.minecraft.core.component.DataComponentPatch;
|
||||||
import net.minecraft.core.component.DataComponents;
|
import net.minecraft.core.component.DataComponents;
|
||||||
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.server.network.Filterable;
|
import net.minecraft.server.network.Filterable;
|
||||||
import net.minecraft.server.network.FilteredText;
|
import net.minecraft.server.network.FilteredText;
|
||||||
import net.minecraft.world.item.component.WritableBookContent;
|
import net.minecraft.world.item.component.WritableBookContent;
|
||||||
|
@ -20,6 +21,13 @@ import org.bukkit.craftbukkit.util.CraftChatMessage;
|
||||||
import org.bukkit.inventory.meta.BookMeta;
|
import org.bukkit.inventory.meta.BookMeta;
|
||||||
import org.bukkit.inventory.meta.WritableBookMeta;
|
import org.bukkit.inventory.meta.WritableBookMeta;
|
||||||
|
|
||||||
|
// Spigot start
|
||||||
|
import java.util.AbstractList;
|
||||||
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
|
import net.md_5.bungee.chat.ComponentSerializer;
|
||||||
|
import org.bukkit.craftbukkit.util.CraftChatMessage;
|
||||||
|
// Spigot end
|
||||||
|
|
||||||
@DelegateDeserialization(SerializableMeta.class)
|
@DelegateDeserialization(SerializableMeta.class)
|
||||||
public class CraftMetaBook extends CraftMetaItem implements BookMeta, WritableBookMeta {
|
public class CraftMetaBook extends CraftMetaItem implements BookMeta, WritableBookMeta {
|
||||||
@ItemMetaKey.Specific(ItemMetaKey.Specific.To.NBT)
|
@ItemMetaKey.Specific(ItemMetaKey.Specific.To.NBT)
|
||||||
|
@ -291,6 +299,84 @@ public class CraftMetaBook extends CraftMetaItem implements BookMeta, WritableBo
|
||||||
// Spigot start
|
// Spigot start
|
||||||
private BookMeta.Spigot spigot = new SpigotMeta();
|
private BookMeta.Spigot spigot = new SpigotMeta();
|
||||||
private class SpigotMeta extends BookMeta.Spigot {
|
private class SpigotMeta extends BookMeta.Spigot {
|
||||||
|
|
||||||
|
private String pageToJSON(String page) {
|
||||||
|
// Convert from plain String to JSON (similar to conversion between writable books and written books):
|
||||||
|
Component component = CraftChatMessage.fromString(page, true, true)[0];
|
||||||
|
return CraftChatMessage.toJSON(component);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String componentsToPage(BaseComponent[] components) {
|
||||||
|
// Convert component to plain String:
|
||||||
|
Component component = CraftChatMessage.fromJSONOrNull(ComponentSerializer.toString(components));
|
||||||
|
return CraftChatMessage.fromComponent(component);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BaseComponent[] getPage(final int page) {
|
||||||
|
Preconditions.checkArgument(CraftMetaBook.this.isValidPage(page), "Invalid page number");
|
||||||
|
return ComponentSerializer.parse(this.pageToJSON(CraftMetaBook.this.pages.get(page - 1)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPage(final int page, final BaseComponent... text) {
|
||||||
|
if (!CraftMetaBook.this.isValidPage(page)) {
|
||||||
|
throw new IllegalArgumentException("Invalid page number " + page + "/" + CraftMetaBook.this.getPageCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
BaseComponent[] newText = text == null ? new BaseComponent[0] : text;
|
||||||
|
CraftMetaBook.this.pages.set(page - 1, this.componentsToPage(newText));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPages(final BaseComponent[]... pages) {
|
||||||
|
this.setPages(Arrays.asList(pages));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addPage(final BaseComponent[]... pages) {
|
||||||
|
for (BaseComponent[] page : pages) {
|
||||||
|
if (page == null) {
|
||||||
|
page = new BaseComponent[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
CraftMetaBook.this.internalAddPage(this.componentsToPage(page));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<BaseComponent[]> getPages() {
|
||||||
|
if (CraftMetaBook.this.pages == null) return ImmutableList.of();
|
||||||
|
final List<String> copy = ImmutableList.copyOf(CraftMetaBook.this.pages);
|
||||||
|
return new AbstractList<BaseComponent[]>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BaseComponent[] get(int index) {
|
||||||
|
return ComponentSerializer.parse(SpigotMeta.this.pageToJSON(copy.get(index)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int size() {
|
||||||
|
return copy.size();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPages(List<BaseComponent[]> pages) {
|
||||||
|
if (pages.isEmpty()) {
|
||||||
|
CraftMetaBook.this.pages = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CraftMetaBook.this.pages != null) {
|
||||||
|
CraftMetaBook.this.pages.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (BaseComponent[] page : pages) {
|
||||||
|
this.addPage(page);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -21,6 +21,12 @@ import org.bukkit.configuration.serialization.DelegateDeserialization;
|
||||||
import org.bukkit.craftbukkit.util.CraftChatMessage;
|
import org.bukkit.craftbukkit.util.CraftChatMessage;
|
||||||
import org.bukkit.inventory.meta.BookMeta;
|
import org.bukkit.inventory.meta.BookMeta;
|
||||||
|
|
||||||
|
// Spigot start
|
||||||
|
import java.util.AbstractList;
|
||||||
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
|
import net.md_5.bungee.chat.ComponentSerializer;
|
||||||
|
// Spigot end
|
||||||
|
|
||||||
@DelegateDeserialization(SerializableMeta.class)
|
@DelegateDeserialization(SerializableMeta.class)
|
||||||
public class CraftMetaBookSigned extends CraftMetaItem implements BookMeta {
|
public class CraftMetaBookSigned extends CraftMetaItem implements BookMeta {
|
||||||
@ItemMetaKey.Specific(ItemMetaKey.Specific.To.NBT)
|
@ItemMetaKey.Specific(ItemMetaKey.Specific.To.NBT)
|
||||||
|
@ -369,6 +375,83 @@ public class CraftMetaBookSigned extends CraftMetaItem implements BookMeta {
|
||||||
// Spigot start
|
// Spigot start
|
||||||
private BookMeta.Spigot spigot = new SpigotMeta();
|
private BookMeta.Spigot spigot = new SpigotMeta();
|
||||||
private class SpigotMeta extends BookMeta.Spigot {
|
private class SpigotMeta extends BookMeta.Spigot {
|
||||||
|
|
||||||
|
private String pageToJSON(Component page) {
|
||||||
|
// Page data is already in JSON format:
|
||||||
|
return CraftChatMessage.toJSON(page);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Component componentsToPage(BaseComponent[] components) {
|
||||||
|
// asserted: components != null
|
||||||
|
// Pages are in JSON format:
|
||||||
|
return CraftChatMessage.fromJSON(ComponentSerializer.toString(components));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BaseComponent[] getPage(final int page) {
|
||||||
|
Preconditions.checkArgument(CraftMetaBookSigned.this.isValidPage(page), "Invalid page number");
|
||||||
|
return ComponentSerializer.parse(this.pageToJSON(CraftMetaBookSigned.this.pages.get(page - 1)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPage(final int page, final BaseComponent... text) {
|
||||||
|
if (!CraftMetaBookSigned.this.isValidPage(page)) {
|
||||||
|
throw new IllegalArgumentException("Invalid page number " + page + "/" + CraftMetaBookSigned.this.getPageCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
BaseComponent[] newText = text == null ? new BaseComponent[0] : text;
|
||||||
|
CraftMetaBookSigned.this.pages.set(page - 1, this.componentsToPage(newText));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPages(final BaseComponent[]... pages) {
|
||||||
|
this.setPages(Arrays.asList(pages));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addPage(final BaseComponent[]... pages) {
|
||||||
|
for (BaseComponent[] page : pages) {
|
||||||
|
if (page == null) {
|
||||||
|
page = new BaseComponent[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
CraftMetaBookSigned.this.internalAddPage(this.componentsToPage(page));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<BaseComponent[]> getPages() {
|
||||||
|
if (CraftMetaBookSigned.this.pages == null) return ImmutableList.of();
|
||||||
|
final List<Component> copy = ImmutableList.copyOf(CraftMetaBookSigned.this.pages);
|
||||||
|
return new AbstractList<BaseComponent[]>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BaseComponent[] get(int index) {
|
||||||
|
return ComponentSerializer.parse(SpigotMeta.this.pageToJSON(copy.get(index)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int size() {
|
||||||
|
return copy.size();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPages(List<BaseComponent[]> pages) {
|
||||||
|
if (pages.isEmpty()) {
|
||||||
|
CraftMetaBookSigned.this.pages = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CraftMetaBookSigned.this.pages != null) {
|
||||||
|
CraftMetaBookSigned.this.pages.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (BaseComponent[] page : pages) {
|
||||||
|
this.addPage(page);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in a new issue