From 2eeb6096241680c86acd35ea2a79e00b2c73841e Mon Sep 17 00:00:00 2001 From: VAKiliner <119078586+vakiliner@users.noreply.github.com> Date: Fri, 9 Jan 2026 19:02:54 +0300 Subject: [PATCH 01/19] feat: ChatPlayerList --- .../chatcomponentapi/base/ChatPlayerList.java | 9 +++++ .../chatcomponentapi/base/ChatServer.java | 5 +++ .../craftbukkit/BukkitChatPlayerList.java | 22 ++++++++++ .../craftbukkit/BukkitChatServer.java | 24 +++++++++++ .../craftbukkit/BukkitParser.java | 40 ++++++++++++++++++- .../fabric/FabricChatPlayerList.java | 27 +++++++++++++ .../fabric/FabricChatServer.java | 24 +++++++++++ .../chatcomponentapi/fabric/FabricParser.java | 11 ++++- .../forge/ForgeChatPlayerList.java | 26 ++++++++++++ .../forge/ForgeChatServer.java | 24 +++++++++++ .../chatcomponentapi/forge/ForgeParser.java | 15 +++++++ .../chatcomponentapi/paper/PaperParser.java | 21 ++++++++-- .../chatcomponentapi/spigot/SpigotParser.java | 33 ++++++++++----- 13 files changed, 264 insertions(+), 17 deletions(-) create mode 100644 base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java create mode 100644 base/src/main/java/vakiliner/chatcomponentapi/base/ChatServer.java create mode 100644 craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatPlayerList.java create mode 100644 craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java create mode 100644 fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java create mode 100644 fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatServer.java create mode 100644 forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java create mode 100644 forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatServer.java diff --git a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java new file mode 100644 index 0000000..e7e28f7 --- /dev/null +++ b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java @@ -0,0 +1,9 @@ +package vakiliner.chatcomponentapi.base; + +import java.util.UUID; +import vakiliner.chatcomponentapi.common.ChatMessageType; +import vakiliner.chatcomponentapi.component.ChatComponent; + +public interface ChatPlayerList { + void broadcastMessage(ChatComponent component, ChatMessageType type, UUID uuid); +} \ No newline at end of file diff --git a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatServer.java b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatServer.java new file mode 100644 index 0000000..c642cf6 --- /dev/null +++ b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatServer.java @@ -0,0 +1,5 @@ +package vakiliner.chatcomponentapi.base; + +public interface ChatServer { + ChatPlayerList getPlayerList(); +} \ No newline at end of file diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatPlayerList.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatPlayerList.java new file mode 100644 index 0000000..127a759 --- /dev/null +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatPlayerList.java @@ -0,0 +1,22 @@ +package vakiliner.chatcomponentapi.craftbukkit; + +import java.util.Objects; +import java.util.UUID; +import org.bukkit.Server; +import vakiliner.chatcomponentapi.base.ChatPlayerList; +import vakiliner.chatcomponentapi.common.ChatMessageType; +import vakiliner.chatcomponentapi.component.ChatComponent; + +public class BukkitChatPlayerList implements ChatPlayerList { + private final BukkitParser parser; + private final Server server; + + public BukkitChatPlayerList(BukkitParser parser, Server server) { + this.parser = Objects.requireNonNull(parser); + this.server = Objects.requireNonNull(server); + } + + public void broadcastMessage(ChatComponent component, ChatMessageType type, UUID uuid) { + this.parser.broadcastMessage(this.server, component, type, uuid); + } +} \ No newline at end of file diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java new file mode 100644 index 0000000..f195e14 --- /dev/null +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java @@ -0,0 +1,24 @@ +package vakiliner.chatcomponentapi.craftbukkit; + +import java.util.Objects; +import org.bukkit.Server; +import vakiliner.chatcomponentapi.base.ChatPlayerList; +import vakiliner.chatcomponentapi.base.ChatServer; + +public class BukkitChatServer implements ChatServer { + private final BukkitParser parser; + private final Server server; + + public BukkitChatServer(BukkitParser parser, Server server) { + this.parser = Objects.requireNonNull(parser); + this.server = Objects.requireNonNull(server); + } + + public Server getServer() { + return this.server; + } + + public ChatPlayerList getPlayerList() { + return this.parser.toChatPlayerList(this.server); + } +} \ No newline at end of file diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitParser.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitParser.java index 9f56fa9..f93ba8e 100644 --- a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitParser.java +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitParser.java @@ -1,15 +1,21 @@ package vakiliner.chatcomponentapi.craftbukkit; +import java.util.HashSet; +import java.util.Set; import java.util.UUID; import org.bukkit.ChatColor; import org.bukkit.OfflinePlayer; +import org.bukkit.Server; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.bukkit.permissions.Permissible; import org.bukkit.scoreboard.Team; import vakiliner.chatcomponentapi.base.BaseParser; import vakiliner.chatcomponentapi.base.ChatCommandSender; import vakiliner.chatcomponentapi.base.ChatOfflinePlayer; import vakiliner.chatcomponentapi.base.ChatPlayer; +import vakiliner.chatcomponentapi.base.ChatPlayerList; +import vakiliner.chatcomponentapi.base.ChatServer; import vakiliner.chatcomponentapi.base.ChatTeam; import vakiliner.chatcomponentapi.common.ChatMessageType; import vakiliner.chatcomponentapi.common.ChatTextFormat; @@ -21,10 +27,32 @@ public boolean supportsSeparatorInSelector() { } public void sendMessage(CommandSender sender, ChatComponent component, ChatMessageType type, UUID uuid) { + this.sendMessage(sender, component.toLegacyText(), type, uuid); + } + + private void sendMessage(CommandSender sender, String message, ChatMessageType type, UUID uuid) { if (type == ChatMessageType.CHAT) { - sender.sendMessage(uuid, component.toLegacyText()); + sender.sendMessage(uuid, message); } else { - sender.sendMessage(component.toLegacyText()); + sender.sendMessage(message); + } + } + + public void broadcastMessage(Server server, ChatComponent component, ChatMessageType type, UUID uuid) { + Set recipients = new HashSet<>(); + Set permissibles = server.getPluginManager().getPermissionSubscriptions(Server.BROADCAST_CHANNEL_USERS); + for (Permissible permissible : permissibles) { + if (permissible instanceof CommandSender && permissible.hasPermission(Server.BROADCAST_CHANNEL_USERS)) { + recipients.add((CommandSender) permissible); + } + } + this.broadcast(recipients, component, type, uuid); + } + + public void broadcast(Iterable recipients, ChatComponent chatComponent, ChatMessageType chatMessageType, UUID uuid) { + String message = chatComponent.toLegacyText(); + for (CommandSender recipient : recipients) { + this.sendMessage(recipient, message, chatMessageType, uuid); } } @@ -57,4 +85,12 @@ public ChatCommandSender toChatCommandSender(CommandSender sender) { public ChatTeam toChatTeam(Team team) { return team != null ? new BukkitChatTeam(this, team) : null; } + + public ChatServer toChatServer(Server server) { + return server != null ? new BukkitChatServer(this, server) : null; + } + + public ChatPlayerList toChatPlayerList(Server server) { + return server != null ? new BukkitChatPlayerList(this, server) : null; + } } \ No newline at end of file diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java new file mode 100644 index 0000000..c911d17 --- /dev/null +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java @@ -0,0 +1,27 @@ +package vakiliner.chatcomponentapi.fabric; + +import java.util.Objects; +import java.util.UUID; + +import net.minecraft.server.players.PlayerList; +import vakiliner.chatcomponentapi.base.ChatPlayerList; +import vakiliner.chatcomponentapi.common.ChatMessageType; +import vakiliner.chatcomponentapi.component.ChatComponent; + +public class FabricChatPlayerList implements ChatPlayerList { + private final FabricParser parser; + private final PlayerList playerList; + + public FabricChatPlayerList(FabricParser parser, PlayerList playerList) { + this.parser = Objects.requireNonNull(parser); + this.playerList = Objects.requireNonNull(playerList); + } + + public PlayerList getPlayerList() { + return this.playerList; + } + + public void broadcastMessage(ChatComponent component, ChatMessageType type, UUID uuid) { + this.parser.broadcastMessage(this.playerList, component, type, uuid); + } +} \ No newline at end of file diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatServer.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatServer.java new file mode 100644 index 0000000..9c904eb --- /dev/null +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatServer.java @@ -0,0 +1,24 @@ +package vakiliner.chatcomponentapi.fabric; + +import java.util.Objects; +import net.minecraft.server.MinecraftServer; +import vakiliner.chatcomponentapi.base.ChatPlayerList; +import vakiliner.chatcomponentapi.base.ChatServer; + +public class FabricChatServer implements ChatServer { + private final FabricParser parser; + private final MinecraftServer server; + + public FabricChatServer(FabricParser parser, MinecraftServer server) { + this.parser = Objects.requireNonNull(parser); + this.server = Objects.requireNonNull(server); + } + + public MinecraftServer getServer() { + return this.server; + } + + public ChatPlayerList getPlayerList() { + return this.parser.toChatPlayerList(this.server.getPlayerList()); + } +} \ No newline at end of file diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricParser.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricParser.java index 06847b2..4b98a95 100644 --- a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricParser.java +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricParser.java @@ -31,6 +31,8 @@ import vakiliner.chatcomponentapi.base.ChatCommandSender; import vakiliner.chatcomponentapi.base.ChatOfflinePlayer; import vakiliner.chatcomponentapi.base.ChatPlayer; +import vakiliner.chatcomponentapi.base.ChatPlayerList; +import vakiliner.chatcomponentapi.base.ChatServer; import vakiliner.chatcomponentapi.base.ChatTeam; import vakiliner.chatcomponentapi.common.ChatId; import vakiliner.chatcomponentapi.common.ChatMessageType; @@ -61,7 +63,6 @@ public void sendMessage(CommandSource commandSource, ChatComponent component, Ch } } - @Deprecated public void broadcastMessage(PlayerList playerList, ChatComponent component, ChatMessageType type, UUID uuid) { playerList.broadcastMessage(fabric(component), fabric(type), uuid); } @@ -255,4 +256,12 @@ public ChatCommandSender toChatCommandSender(CommandSource commandSource) { public ChatTeam toChatTeam(PlayerTeam team) { return team != null ? new FabricChatTeam(this, team) : null; } + + public ChatServer toChatServer(MinecraftServer server) { + return server != null ? new FabricChatServer(this, server) : null; + } + + public ChatPlayerList toChatPlayerList(PlayerList playerList) { + return playerList != null ? new FabricChatPlayerList(this, playerList) : null; + } } \ No newline at end of file diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java new file mode 100644 index 0000000..58bce7e --- /dev/null +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java @@ -0,0 +1,26 @@ +package vakiliner.chatcomponentapi.forge; + +import java.util.Objects; +import java.util.UUID; +import net.minecraft.server.management.PlayerList; +import vakiliner.chatcomponentapi.base.ChatPlayerList; +import vakiliner.chatcomponentapi.common.ChatMessageType; +import vakiliner.chatcomponentapi.component.ChatComponent; + +public class ForgeChatPlayerList implements ChatPlayerList { + private final ForgeParser parser; + private final PlayerList playerList; + + public ForgeChatPlayerList(ForgeParser parser, PlayerList playerList) { + this.parser = Objects.requireNonNull(parser); + this.playerList = Objects.requireNonNull(playerList); + } + + public PlayerList getPlayerList() { + return this.playerList; + } + + public void broadcastMessage(ChatComponent component, ChatMessageType type, UUID uuid) { + this.parser.broadcastMessage(this.playerList, component, type, uuid); + } +} \ No newline at end of file diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatServer.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatServer.java new file mode 100644 index 0000000..5772f45 --- /dev/null +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatServer.java @@ -0,0 +1,24 @@ +package vakiliner.chatcomponentapi.forge; + +import java.util.Objects; +import net.minecraft.server.MinecraftServer; +import vakiliner.chatcomponentapi.base.ChatPlayerList; +import vakiliner.chatcomponentapi.base.ChatServer; + +public class ForgeChatServer implements ChatServer { + private final ForgeParser parser; + private final MinecraftServer server; + + public ForgeChatServer(ForgeParser parser, MinecraftServer server) { + this.parser = Objects.requireNonNull(parser); + this.server = Objects.requireNonNull(server); + } + + public MinecraftServer getServer() { + return this.server; + } + + public ChatPlayerList getPlayerList() { + return this.parser.toChatPlayerList(this.server.getPlayerList()); + } +} \ No newline at end of file diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeParser.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeParser.java index 25fa933..fe5628c 100644 --- a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeParser.java +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeParser.java @@ -12,6 +12,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.scoreboard.ScorePlayerTeam; import net.minecraft.server.MinecraftServer; +import net.minecraft.server.management.PlayerList; import net.minecraft.util.ResourceLocation; import net.minecraft.util.Util; import net.minecraft.util.registry.Registry; @@ -29,6 +30,8 @@ import vakiliner.chatcomponentapi.base.ChatCommandSender; import vakiliner.chatcomponentapi.base.ChatOfflinePlayer; import vakiliner.chatcomponentapi.base.ChatPlayer; +import vakiliner.chatcomponentapi.base.ChatPlayerList; +import vakiliner.chatcomponentapi.base.ChatServer; import vakiliner.chatcomponentapi.base.ChatTeam; import vakiliner.chatcomponentapi.common.ChatId; import vakiliner.chatcomponentapi.common.ChatMessageType; @@ -58,6 +61,10 @@ public void sendMessage(ICommandSource commandSource, ChatComponent component, C } } + public void broadcastMessage(PlayerList playerList, ChatComponent component, ChatMessageType type, UUID uuid) { + playerList.broadcastMessage(forge(component), forge(type), uuid); + } + public static ITextComponent forge(ChatComponent raw) { return forge(raw, false); } @@ -243,4 +250,12 @@ public ChatCommandSender toChatCommandSender(ICommandSource commandSource) { public ChatTeam toChatTeam(ScorePlayerTeam team) { return team != null ? new ForgeChatTeam(this, team) : null; } + + public ChatServer toChatServer(MinecraftServer server) { + return server != null ? new ForgeChatServer(this, server) : null; + } + + public ChatPlayerList toChatPlayerList(PlayerList playerList) { + return playerList != null ? new ForgeChatPlayerList(this, playerList) : null; + } } \ No newline at end of file diff --git a/paper/src/main/java/vakiliner/chatcomponentapi/paper/PaperParser.java b/paper/src/main/java/vakiliner/chatcomponentapi/paper/PaperParser.java index 67f3c1d..6cafdff 100644 --- a/paper/src/main/java/vakiliner/chatcomponentapi/paper/PaperParser.java +++ b/paper/src/main/java/vakiliner/chatcomponentapi/paper/PaperParser.java @@ -43,11 +43,24 @@ public class PaperParser extends SpigotParser { public void sendMessage(CommandSender sender, ChatComponent component, ChatMessageType type, UUID uuid) { - boolean isConsole = sender instanceof ConsoleCommandSender; - if (uuid != null) { - sender.sendMessage(Identity.identity(uuid), paper(component, isConsole), paper(type)); + this.sendMessage(sender, paper(component, sender instanceof ConsoleCommandSender), paper(type), uuid != null ? Identity.identity(uuid) : null); + } + + private void sendMessage(CommandSender sender, Component component, MessageType type, Identity identity) { + if (identity != null) { + sender.sendMessage(identity, component, type); } else { - sender.sendMessage(paper(component, isConsole), paper(type)); + sender.sendMessage(component, type); + } + } + + public void broadcast(Iterable recipients, ChatComponent chatComponent, ChatMessageType chatMessageType, UUID uuid) { + Component component = paper(chatComponent, false); + Component consoleComponent = paper(chatComponent, true); + MessageType type = paper(chatMessageType); + Identity identity = uuid != null ? Identity.identity(uuid) : null; + for (CommandSender recipient : recipients) { + this.sendMessage(recipient, recipient instanceof ConsoleCommandSender ? consoleComponent : component, type, identity); } } diff --git a/spigot/src/main/java/vakiliner/chatcomponentapi/spigot/SpigotParser.java b/spigot/src/main/java/vakiliner/chatcomponentapi/spigot/SpigotParser.java index b453369..8350509 100644 --- a/spigot/src/main/java/vakiliner/chatcomponentapi/spigot/SpigotParser.java +++ b/spigot/src/main/java/vakiliner/chatcomponentapi/spigot/SpigotParser.java @@ -7,6 +7,7 @@ import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.HoverEvent; @@ -18,7 +19,6 @@ import net.md_5.bungee.api.chat.hover.content.Item; import net.md_5.bungee.api.chat.hover.content.Text; import vakiliner.chatcomponentapi.common.ChatId; -import vakiliner.chatcomponentapi.common.ChatMessageType; import vakiliner.chatcomponentapi.common.ChatTextColor; import vakiliner.chatcomponentapi.component.ChatClickEvent; import vakiliner.chatcomponentapi.component.ChatComponent; @@ -31,24 +31,37 @@ import vakiliner.chatcomponentapi.craftbukkit.BukkitParser; public class SpigotParser extends BukkitParser { - public void sendMessage(CommandSender sender, ChatComponent component, ChatMessageType type, UUID uuid) { + public void sendMessage(CommandSender sender, ChatComponent component, vakiliner.chatcomponentapi.common.ChatMessageType type, UUID uuid) { + this.sendMessage(sender, spigot(component, sender instanceof ConsoleCommandSender), spigot(type), uuid); + } + + private void sendMessage(CommandSender sender, BaseComponent component, ChatMessageType type, UUID uuid) { if (sender instanceof Player) { Player player = (Player) sender; if (uuid != null) { - player.spigot().sendMessage(spigot(type), uuid, spigot(component)); + player.spigot().sendMessage(type, uuid, component); } else { - player.spigot().sendMessage(spigot(type), spigot(component)); + player.spigot().sendMessage(type, component); } } else { boolean isConsole = sender instanceof ConsoleCommandSender; if (uuid != null) { - sender.spigot().sendMessage(uuid, spigot(component, isConsole)); + sender.spigot().sendMessage(uuid, component); } else { - sender.spigot().sendMessage(spigot(component, isConsole)); + sender.spigot().sendMessage(component); } } } + public void broadcast(Iterable recipients, ChatComponent chatComponent, vakiliner.chatcomponentapi.common.ChatMessageType chatMessageType, UUID uuid) { + BaseComponent component = spigot(chatComponent, false); + BaseComponent consoleComponent = spigot(chatComponent, true); + ChatMessageType type = spigot(chatMessageType); + for (CommandSender recipient : recipients) { + this.sendMessage(recipient, recipient instanceof ConsoleCommandSender ? consoleComponent : component, type, uuid); + } + } + public static BaseComponent spigot(ChatComponent raw) { return spigot(raw, false); } @@ -180,12 +193,12 @@ public static Object spigotContent2(Content raw) { } } - public static net.md_5.bungee.api.ChatMessageType spigot(ChatMessageType type) { - return type != null ? net.md_5.bungee.api.ChatMessageType.valueOf(type.name()) : null; + public static ChatMessageType spigot(vakiliner.chatcomponentapi.common.ChatMessageType type) { + return type != null ? ChatMessageType.valueOf(type.name()) : null; } - public static ChatMessageType spigot(net.md_5.bungee.api.ChatMessageType type) { - return type != null ? ChatMessageType.valueOf(type.name()) : null; + public static vakiliner.chatcomponentapi.common.ChatMessageType spigot(ChatMessageType type) { + return type != null ? vakiliner.chatcomponentapi.common.ChatMessageType.valueOf(type.name()) : null; } public static ChatColor spigot(ChatTextColor color) { From 3a4e326bd47d6c3088b87fd5340f99c0dc030841 Mon Sep 17 00:00:00 2001 From: VAKiliner <119078586+vakiliner@users.noreply.github.com> Date: Fri, 9 Jan 2026 19:11:27 +0300 Subject: [PATCH 02/19] =?UTF-8?q?fix:=20=D0=91=D0=B5=D0=BB=20=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BE=D0=B9=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java | 1 - 1 file changed, 1 deletion(-) diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java index c911d17..2a2f3cd 100644 --- a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java @@ -2,7 +2,6 @@ import java.util.Objects; import java.util.UUID; - import net.minecraft.server.players.PlayerList; import vakiliner.chatcomponentapi.base.ChatPlayerList; import vakiliner.chatcomponentapi.common.ChatMessageType; From 10b72103b9f865ae8d272e43adb9bcb565ce68f1 Mon Sep 17 00:00:00 2001 From: VAKiliner <119078586+vakiliner@users.noreply.github.com> Date: Fri, 9 Jan 2026 19:54:59 +0300 Subject: [PATCH 03/19] =?UTF-8?q?perf:=20=D0=97=D0=B0=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20ChatMessageType=20=D0=BD=D0=B0=20boolean?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chatcomponentapi/craftbukkit/BukkitParser.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitParser.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitParser.java index f93ba8e..8fac7a7 100644 --- a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitParser.java +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitParser.java @@ -27,11 +27,11 @@ public boolean supportsSeparatorInSelector() { } public void sendMessage(CommandSender sender, ChatComponent component, ChatMessageType type, UUID uuid) { - this.sendMessage(sender, component.toLegacyText(), type, uuid); + this.sendMessage(sender, component.toLegacyText(), type == ChatMessageType.CHAT, uuid); } - private void sendMessage(CommandSender sender, String message, ChatMessageType type, UUID uuid) { - if (type == ChatMessageType.CHAT) { + private void sendMessage(CommandSender sender, String message, boolean chat, UUID uuid) { + if (chat) { sender.sendMessage(uuid, message); } else { sender.sendMessage(message); @@ -51,8 +51,9 @@ public void broadcastMessage(Server server, ChatComponent component, ChatMessage public void broadcast(Iterable recipients, ChatComponent chatComponent, ChatMessageType chatMessageType, UUID uuid) { String message = chatComponent.toLegacyText(); + boolean chat = chatMessageType == ChatMessageType.CHAT; for (CommandSender recipient : recipients) { - this.sendMessage(recipient, message, chatMessageType, uuid); + this.sendMessage(recipient, message, chat, uuid); } } From 656e374b14e7b3370a9ec0273564cb8176d0a252 Mon Sep 17 00:00:00 2001 From: VAKiliner <119078586+vakiliner@users.noreply.github.com> Date: Sun, 11 Jan 2026 00:56:25 +0300 Subject: [PATCH 04/19] =?UTF-8?q?refactor:=20=D0=9E=D0=B1=D1=8A=D0=B5?= =?UTF-8?q?=D0=B4=D0=B8=D0=BD=D0=B8=D1=82=D1=8C=20BukkitChatServer=20?= =?UTF-8?q?=D1=81=20BukkitChatPlayerList?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../craftbukkit/BukkitChatPlayerList.java | 22 ------------------- .../craftbukkit/BukkitChatServer.java | 11 ++++++++-- .../craftbukkit/BukkitParser.java | 2 +- 3 files changed, 10 insertions(+), 25 deletions(-) delete mode 100644 craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatPlayerList.java diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatPlayerList.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatPlayerList.java deleted file mode 100644 index 127a759..0000000 --- a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatPlayerList.java +++ /dev/null @@ -1,22 +0,0 @@ -package vakiliner.chatcomponentapi.craftbukkit; - -import java.util.Objects; -import java.util.UUID; -import org.bukkit.Server; -import vakiliner.chatcomponentapi.base.ChatPlayerList; -import vakiliner.chatcomponentapi.common.ChatMessageType; -import vakiliner.chatcomponentapi.component.ChatComponent; - -public class BukkitChatPlayerList implements ChatPlayerList { - private final BukkitParser parser; - private final Server server; - - public BukkitChatPlayerList(BukkitParser parser, Server server) { - this.parser = Objects.requireNonNull(parser); - this.server = Objects.requireNonNull(server); - } - - public void broadcastMessage(ChatComponent component, ChatMessageType type, UUID uuid) { - this.parser.broadcastMessage(this.server, component, type, uuid); - } -} \ No newline at end of file diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java index f195e14..09c2795 100644 --- a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java @@ -1,11 +1,14 @@ package vakiliner.chatcomponentapi.craftbukkit; import java.util.Objects; +import java.util.UUID; import org.bukkit.Server; import vakiliner.chatcomponentapi.base.ChatPlayerList; import vakiliner.chatcomponentapi.base.ChatServer; +import vakiliner.chatcomponentapi.common.ChatMessageType; +import vakiliner.chatcomponentapi.component.ChatComponent; -public class BukkitChatServer implements ChatServer { +public class BukkitChatServer implements ChatServer, ChatPlayerList { private final BukkitParser parser; private final Server server; @@ -19,6 +22,10 @@ public Server getServer() { } public ChatPlayerList getPlayerList() { - return this.parser.toChatPlayerList(this.server); + return this; + } + + public void broadcastMessage(ChatComponent component, ChatMessageType type, UUID uuid) { + this.parser.broadcastMessage(this.server, component, type, uuid); } } \ No newline at end of file diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitParser.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitParser.java index 8fac7a7..5dab447 100644 --- a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitParser.java +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitParser.java @@ -92,6 +92,6 @@ public ChatServer toChatServer(Server server) { } public ChatPlayerList toChatPlayerList(Server server) { - return server != null ? new BukkitChatPlayerList(this, server) : null; + return server != null ? new BukkitChatServer(this, server) : null; } } \ No newline at end of file From 5e1bdb6f69460d7d74fd36a8e7019ad9fa5332f2 Mon Sep 17 00:00:00 2001 From: VAKiliner <119078586+vakiliner@users.noreply.github.com> Date: Sun, 11 Jan 2026 01:18:07 +0300 Subject: [PATCH 05/19] =?UTF-8?q?fix:=20Spigot=20=D1=83=D0=B4=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=BB=D0=B8=D1=88=D0=BD=D1=8E=D1=8E=20?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=BE=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/vakiliner/chatcomponentapi/spigot/SpigotParser.java | 1 - 1 file changed, 1 deletion(-) diff --git a/spigot/src/main/java/vakiliner/chatcomponentapi/spigot/SpigotParser.java b/spigot/src/main/java/vakiliner/chatcomponentapi/spigot/SpigotParser.java index 8350509..aec6b0d 100644 --- a/spigot/src/main/java/vakiliner/chatcomponentapi/spigot/SpigotParser.java +++ b/spigot/src/main/java/vakiliner/chatcomponentapi/spigot/SpigotParser.java @@ -44,7 +44,6 @@ private void sendMessage(CommandSender sender, BaseComponent component, ChatMess player.spigot().sendMessage(type, component); } } else { - boolean isConsole = sender instanceof ConsoleCommandSender; if (uuid != null) { sender.spigot().sendMessage(uuid, component); } else { From 72955dccb405ba84b43ced8b8e5b835c58a61fc6 Mon Sep 17 00:00:00 2001 From: VAKiliner <119078586+vakiliner@users.noreply.github.com> Date: Sun, 11 Jan 2026 01:19:09 +0300 Subject: [PATCH 06/19] =?UTF-8?q?feat:=20=D0=A4=D1=83=D0=BD=D0=BA=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20=D0=B4=D0=BB=D1=8F=20ChatPlayerList?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chatcomponentapi/base/ChatPlayerList.java | 13 +++++++++ .../craftbukkit/BukkitChatServer.java | 29 ++++++++++++++++++- .../fabric/FabricChatPlayerList.java | 28 ++++++++++++++++++ .../forge/ForgeChatPlayerList.java | 28 ++++++++++++++++++ 4 files changed, 97 insertions(+), 1 deletion(-) diff --git a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java index e7e28f7..0f6e03b 100644 --- a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java +++ b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java @@ -1,9 +1,22 @@ package vakiliner.chatcomponentapi.base; +import java.util.List; import java.util.UUID; import vakiliner.chatcomponentapi.common.ChatMessageType; import vakiliner.chatcomponentapi.component.ChatComponent; public interface ChatPlayerList { + ChatServer getServer(); + + int getPlayerCount(); + + int getMaxPlayers(); + + int getViewDistance(); + + List getPlayers(); + + public ChatPlayer getPlayer(UUID uuid); + void broadcastMessage(ChatComponent component, ChatMessageType type, UUID uuid); } \ No newline at end of file diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java index 09c2795..889df89 100644 --- a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java @@ -1,8 +1,11 @@ package vakiliner.chatcomponentapi.craftbukkit; +import java.util.List; import java.util.Objects; import java.util.UUID; +import java.util.stream.Collectors; import org.bukkit.Server; +import vakiliner.chatcomponentapi.base.ChatPlayer; import vakiliner.chatcomponentapi.base.ChatPlayerList; import vakiliner.chatcomponentapi.base.ChatServer; import vakiliner.chatcomponentapi.common.ChatMessageType; @@ -17,14 +20,38 @@ public BukkitChatServer(BukkitParser parser, Server server) { this.server = Objects.requireNonNull(server); } - public Server getServer() { + public Server getImpl() { return this.server; } + public ChatServer getServer() { + return this; + } + public ChatPlayerList getPlayerList() { return this; } + public int getPlayerCount() { + return this.server.getOnlinePlayers().size(); + } + + public int getMaxPlayers() { + return this.server.getMaxPlayers(); + } + + public int getViewDistance() { + return this.server.getViewDistance(); + } + + public List getPlayers() { + return this.server.getOnlinePlayers().stream().map(this.parser::toChatPlayer).collect(Collectors.toList()); + } + + public ChatPlayer getPlayer(UUID uuid) { + return this.parser.toChatPlayer(this.server.getPlayer(uuid)); + } + public void broadcastMessage(ChatComponent component, ChatMessageType type, UUID uuid) { this.parser.broadcastMessage(this.server, component, type, uuid); } diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java index 2a2f3cd..6409542 100644 --- a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java @@ -1,9 +1,13 @@ package vakiliner.chatcomponentapi.fabric; +import java.util.List; import java.util.Objects; import java.util.UUID; +import java.util.stream.Collectors; import net.minecraft.server.players.PlayerList; +import vakiliner.chatcomponentapi.base.ChatPlayer; import vakiliner.chatcomponentapi.base.ChatPlayerList; +import vakiliner.chatcomponentapi.base.ChatServer; import vakiliner.chatcomponentapi.common.ChatMessageType; import vakiliner.chatcomponentapi.component.ChatComponent; @@ -20,6 +24,30 @@ public PlayerList getPlayerList() { return this.playerList; } + public ChatServer getServer() { + return this.parser.toChatServer(this.playerList.getServer()); + } + + public int getPlayerCount() { + return this.playerList.getPlayerCount(); + } + + public int getMaxPlayers() { + return this.playerList.getMaxPlayers(); + } + + public int getViewDistance() { + return this.playerList.getViewDistance(); + } + + public List getPlayers() { + return this.playerList.getPlayers().stream().map(this.parser::toChatPlayer).collect(Collectors.toList()); + } + + public ChatPlayer getPlayer(UUID uuid) { + return this.parser.toChatPlayer(this.playerList.getPlayer(uuid)); + } + public void broadcastMessage(ChatComponent component, ChatMessageType type, UUID uuid) { this.parser.broadcastMessage(this.playerList, component, type, uuid); } diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java index 58bce7e..156030e 100644 --- a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java @@ -1,9 +1,13 @@ package vakiliner.chatcomponentapi.forge; +import java.util.List; import java.util.Objects; import java.util.UUID; +import java.util.stream.Collectors; import net.minecraft.server.management.PlayerList; +import vakiliner.chatcomponentapi.base.ChatPlayer; import vakiliner.chatcomponentapi.base.ChatPlayerList; +import vakiliner.chatcomponentapi.base.ChatServer; import vakiliner.chatcomponentapi.common.ChatMessageType; import vakiliner.chatcomponentapi.component.ChatComponent; @@ -20,6 +24,30 @@ public PlayerList getPlayerList() { return this.playerList; } + public ChatServer getServer() { + return this.parser.toChatServer(this.playerList.getServer()); + } + + public int getPlayerCount() { + return this.playerList.getPlayerCount(); + } + + public int getMaxPlayers() { + return this.playerList.getMaxPlayers(); + } + + public int getViewDistance() { + return this.playerList.getViewDistance(); + } + + public List getPlayers() { + return this.playerList.getPlayers().stream().map(this.parser::toChatPlayer).collect(Collectors.toList()); + } + + public ChatPlayer getPlayer(UUID uuid) { + return this.parser.toChatPlayer(this.playerList.getPlayer(uuid)); + } + public void broadcastMessage(ChatComponent component, ChatMessageType type, UUID uuid) { this.parser.broadcastMessage(this.playerList, component, type, uuid); } From c14e50dbc2e6013af4ecea5fa5612a8a7295595f Mon Sep 17 00:00:00 2001 From: VAKiliner <119078586+vakiliner@users.noreply.github.com> Date: Wed, 21 Jan 2026 20:21:41 +0300 Subject: [PATCH 07/19] fix: Console message for Fabric & Forge --- .../java/vakiliner/chatcomponentapi/fabric/FabricParser.java | 4 +++- .../java/vakiliner/chatcomponentapi/forge/ForgeParser.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricParser.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricParser.java index 5f10256..7fe023f 100644 --- a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricParser.java +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricParser.java @@ -20,6 +20,7 @@ import net.minecraft.network.chat.TextColor; import net.minecraft.network.chat.TextComponent; import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.network.protocol.game.ClientboundChatPacket; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; @@ -68,7 +69,8 @@ public void sendMessage(CommandSource commandSource, ChatComponent component, Ch } public void broadcastMessage(PlayerList playerList, ChatComponent component, ChatMessageType type, UUID uuid) { - playerList.broadcastMessage(fabric(component), fabric(type), uuid); + this.sendMessage(playerList.getServer(), component, type, uuid); + playerList.broadcastAll(new ClientboundChatPacket(fabric(component), fabric(type), uuid)); } public void execute(MinecraftServer server, IChatPlugin plugin, Runnable runnable) { diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeParser.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeParser.java index 06a2add..79ca774 100644 --- a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeParser.java +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeParser.java @@ -9,6 +9,7 @@ import net.minecraft.command.ICommandSource; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.item.ItemStack; +import net.minecraft.network.play.server.SChatPacket; import net.minecraft.scoreboard.ScorePlayerTeam; import net.minecraft.server.MinecraftServer; import net.minecraft.server.management.PlayerList; @@ -66,7 +67,8 @@ public void sendMessage(ICommandSource commandSource, ChatComponent component, C } public void broadcastMessage(PlayerList playerList, ChatComponent component, ChatMessageType type, UUID uuid) { - playerList.broadcastMessage(forge(component), forge(type), uuid); + this.sendMessage(playerList.getServer(), component, type, uuid); + playerList.broadcastAll(new SChatPacket(forge(component), forge(type), uuid)); } public void execute(MinecraftServer server, IChatPlugin plugin, Runnable runnable) { From c71f0b15bbbd7a0cc626ba5f112912592ebfa28a Mon Sep 17 00:00:00 2001 From: VAKiliner <119078586+vakiliner@users.noreply.github.com> Date: Sun, 25 Jan 2026 18:29:32 +0300 Subject: [PATCH 08/19] feat: ParseIterator & ParseCollection --- .../util/ParseCollection.java | 40 +++++++++++++++++++ .../chatcomponentapi/util/ParseIterator.java | 30 ++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 base/src/main/java/vakiliner/chatcomponentapi/util/ParseCollection.java create mode 100644 base/src/main/java/vakiliner/chatcomponentapi/util/ParseIterator.java diff --git a/base/src/main/java/vakiliner/chatcomponentapi/util/ParseCollection.java b/base/src/main/java/vakiliner/chatcomponentapi/util/ParseCollection.java new file mode 100644 index 0000000..9b7a14b --- /dev/null +++ b/base/src/main/java/vakiliner/chatcomponentapi/util/ParseCollection.java @@ -0,0 +1,40 @@ +package vakiliner.chatcomponentapi.util; + +import java.util.AbstractCollection; +import java.util.Collection; +import java.util.Iterator; +import java.util.function.Function; + +public class ParseCollection extends AbstractCollection { + protected final Collection original; + protected final Function i2o; + + public ParseCollection(Collection original, Function i2o) { + this.original = original; + this.i2o = i2o; + } + + public Collection getImpl() { + return original; + } + + public Iterator iterator() { + return new ParseIterator<>(this.original.iterator(), this.i2o); + } + + public int size() { + return this.original.size(); + } + + public boolean isEmpty() { + return this.original.isEmpty(); + } + + public boolean add(Output e) { + throw new UnsupportedOperationException(); + } + + public void clear() { + this.original.clear(); + } +} \ No newline at end of file diff --git a/base/src/main/java/vakiliner/chatcomponentapi/util/ParseIterator.java b/base/src/main/java/vakiliner/chatcomponentapi/util/ParseIterator.java new file mode 100644 index 0000000..fe9a530 --- /dev/null +++ b/base/src/main/java/vakiliner/chatcomponentapi/util/ParseIterator.java @@ -0,0 +1,30 @@ +package vakiliner.chatcomponentapi.util; + +import java.util.Iterator; +import java.util.function.Function; + +public class ParseIterator implements Iterator { + protected final Iterator original; + protected final Function i2o; + + public ParseIterator(Iterator original, Function i2o) { + this.original = original; + this.i2o = i2o; + } + + public Iterator getImpl() { + return this.original; + } + + public boolean hasNext() { + return this.original.hasNext(); + } + + public Output next() { + return this.i2o.apply(this.original.next()); + } + + public void remove() { + this.original.remove(); + } +} \ No newline at end of file From 586973a5867292ce81cd6fa91d7896751e90c8eb Mon Sep 17 00:00:00 2001 From: VAKiliner <119078586+vakiliner@users.noreply.github.com> Date: Sun, 25 Jan 2026 18:33:41 +0300 Subject: [PATCH 09/19] perf: Use ParseCollection for ChatPlayerList.getPlayers() --- .../vakiliner/chatcomponentapi/base/ChatPlayerList.java | 4 ++-- .../chatcomponentapi/craftbukkit/BukkitChatServer.java | 8 ++++---- .../chatcomponentapi/fabric/FabricChatPlayerList.java | 8 ++++---- .../chatcomponentapi/forge/ForgeChatPlayerList.java | 8 ++++---- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java index 0f6e03b..d3bd523 100644 --- a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java +++ b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java @@ -1,6 +1,6 @@ package vakiliner.chatcomponentapi.base; -import java.util.List; +import java.util.Collection; import java.util.UUID; import vakiliner.chatcomponentapi.common.ChatMessageType; import vakiliner.chatcomponentapi.component.ChatComponent; @@ -14,7 +14,7 @@ public interface ChatPlayerList { int getViewDistance(); - List getPlayers(); + Collection getPlayers(); public ChatPlayer getPlayer(UUID uuid); diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java index 8125602..6342046 100644 --- a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java @@ -1,9 +1,8 @@ package vakiliner.chatcomponentapi.craftbukkit; -import java.util.List; +import java.util.Collection; import java.util.Objects; import java.util.UUID; -import java.util.stream.Collectors; import org.bukkit.Server; import vakiliner.chatcomponentapi.base.ChatPlayer; import vakiliner.chatcomponentapi.base.ChatPlayerList; @@ -11,6 +10,7 @@ import vakiliner.chatcomponentapi.base.IChatPlugin; import vakiliner.chatcomponentapi.common.ChatMessageType; import vakiliner.chatcomponentapi.component.ChatComponent; +import vakiliner.chatcomponentapi.util.ParseCollection; public class BukkitChatServer implements ChatServer, ChatPlayerList { private final BukkitParser parser; @@ -45,8 +45,8 @@ public int getViewDistance() { return this.server.getViewDistance(); } - public List getPlayers() { - return this.server.getOnlinePlayers().stream().map(this.parser::toChatPlayer).collect(Collectors.toList()); + public Collection getPlayers() { + return new ParseCollection<>(this.server.getOnlinePlayers(), this.parser::toChatPlayer); } public ChatPlayer getPlayer(UUID uuid) { diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java index 6409542..582bbe5 100644 --- a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java @@ -1,15 +1,15 @@ package vakiliner.chatcomponentapi.fabric; -import java.util.List; +import java.util.Collection; import java.util.Objects; import java.util.UUID; -import java.util.stream.Collectors; import net.minecraft.server.players.PlayerList; import vakiliner.chatcomponentapi.base.ChatPlayer; import vakiliner.chatcomponentapi.base.ChatPlayerList; import vakiliner.chatcomponentapi.base.ChatServer; import vakiliner.chatcomponentapi.common.ChatMessageType; import vakiliner.chatcomponentapi.component.ChatComponent; +import vakiliner.chatcomponentapi.util.ParseCollection; public class FabricChatPlayerList implements ChatPlayerList { private final FabricParser parser; @@ -40,8 +40,8 @@ public int getViewDistance() { return this.playerList.getViewDistance(); } - public List getPlayers() { - return this.playerList.getPlayers().stream().map(this.parser::toChatPlayer).collect(Collectors.toList()); + public Collection getPlayers() { + return new ParseCollection<>(this.playerList.getPlayers(), this.parser::toChatPlayer); } public ChatPlayer getPlayer(UUID uuid) { diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java index 156030e..8b9e23c 100644 --- a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java @@ -1,15 +1,15 @@ package vakiliner.chatcomponentapi.forge; -import java.util.List; +import java.util.Collection; import java.util.Objects; import java.util.UUID; -import java.util.stream.Collectors; import net.minecraft.server.management.PlayerList; import vakiliner.chatcomponentapi.base.ChatPlayer; import vakiliner.chatcomponentapi.base.ChatPlayerList; import vakiliner.chatcomponentapi.base.ChatServer; import vakiliner.chatcomponentapi.common.ChatMessageType; import vakiliner.chatcomponentapi.component.ChatComponent; +import vakiliner.chatcomponentapi.util.ParseCollection; public class ForgeChatPlayerList implements ChatPlayerList { private final ForgeParser parser; @@ -40,8 +40,8 @@ public int getViewDistance() { return this.playerList.getViewDistance(); } - public List getPlayers() { - return this.playerList.getPlayers().stream().map(this.parser::toChatPlayer).collect(Collectors.toList()); + public Collection getPlayers() { + return new ParseCollection<>(this.playerList.getPlayers(), this.parser::toChatPlayer); } public ChatPlayer getPlayer(UUID uuid) { From 9655c57c4bb1118eb34dfc124ae2fb29dd6adb04 Mon Sep 17 00:00:00 2001 From: VAKiliner <119078586+vakiliner@users.noreply.github.com> Date: Thu, 5 Feb 2026 23:41:56 +0300 Subject: [PATCH 10/19] feat: ChatPlayerList.broadcastMessage(ChatComponent) --- .../java/vakiliner/chatcomponentapi/base/ChatPlayerList.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java index d3bd523..75bc40a 100644 --- a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java +++ b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java @@ -18,5 +18,9 @@ public interface ChatPlayerList { public ChatPlayer getPlayer(UUID uuid); + default void broadcastMessage(ChatComponent component) { + this.broadcastMessage(component, ChatMessageType.SYSTEM, null); + } + void broadcastMessage(ChatComponent component, ChatMessageType type, UUID uuid); } \ No newline at end of file From 8af15c7e9070084b2f3cad9a97ee367447b6cbbd Mon Sep 17 00:00:00 2001 From: VAKiliner <119078586+vakiliner@users.noreply.github.com> Date: Sat, 7 Feb 2026 21:42:06 +0300 Subject: [PATCH 11/19] refactor: Override method equals --- .../chatcomponentapi/fabric/FabricChatPlayerList.java | 11 +++++++++++ .../chatcomponentapi/forge/ForgeChatPlayerList.java | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java index 582bbe5..19df1aa 100644 --- a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java @@ -51,4 +51,15 @@ public ChatPlayer getPlayer(UUID uuid) { public void broadcastMessage(ChatComponent component, ChatMessageType type, UUID uuid) { this.parser.broadcastMessage(this.playerList, component, type, uuid); } + + public boolean equals(Object obj) { + if (obj == this) { + return true; + } else if (obj != null && this.getClass() == obj.getClass()) { + FabricChatPlayerList other = (FabricChatPlayerList) obj; + return this.parser.equals(other.parser) && this.playerList.equals(other.playerList); + } else { + return false; + } + } } \ No newline at end of file diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java index 8b9e23c..32f015a 100644 --- a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java @@ -51,4 +51,15 @@ public ChatPlayer getPlayer(UUID uuid) { public void broadcastMessage(ChatComponent component, ChatMessageType type, UUID uuid) { this.parser.broadcastMessage(this.playerList, component, type, uuid); } + + public boolean equals(Object obj) { + if (obj == this) { + return true; + } else if (obj != null && this.getClass() == obj.getClass()) { + ForgeChatPlayerList other = (ForgeChatPlayerList) obj; + return this.parser.equals(other.parser) && this.playerList.equals(other.playerList); + } else { + return false; + } + } } \ No newline at end of file From 56a026168df4d17752c5e835c5c25b6b6161db10 Mon Sep 17 00:00:00 2001 From: VAKiliner <119078586+vakiliner@users.noreply.github.com> Date: Sat, 7 Feb 2026 22:17:19 +0300 Subject: [PATCH 12/19] refactor: Make fields ChatServer & ChatPlayerList as protected --- .../chatcomponentapi/craftbukkit/BukkitChatServer.java | 4 ++-- .../chatcomponentapi/fabric/FabricChatPlayerList.java | 4 ++-- .../vakiliner/chatcomponentapi/fabric/FabricChatServer.java | 4 ++-- .../vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java | 4 ++-- .../vakiliner/chatcomponentapi/forge/ForgeChatServer.java | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java index fcc758d..e8ad452 100644 --- a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java @@ -13,8 +13,8 @@ import vakiliner.chatcomponentapi.util.ParseCollection; public class BukkitChatServer implements ChatServer, ChatPlayerList { - private final BukkitParser parser; - private final Server server; + protected final BukkitParser parser; + protected final Server server; public BukkitChatServer(BukkitParser parser, Server server) { this.parser = Objects.requireNonNull(parser); diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java index 19df1aa..1848c9f 100644 --- a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java @@ -12,8 +12,8 @@ import vakiliner.chatcomponentapi.util.ParseCollection; public class FabricChatPlayerList implements ChatPlayerList { - private final FabricParser parser; - private final PlayerList playerList; + protected final FabricParser parser; + protected final PlayerList playerList; public FabricChatPlayerList(FabricParser parser, PlayerList playerList) { this.parser = Objects.requireNonNull(parser); diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatServer.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatServer.java index c5e6e98..3718796 100644 --- a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatServer.java +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatServer.java @@ -7,8 +7,8 @@ import vakiliner.chatcomponentapi.base.IChatPlugin; public class FabricChatServer implements ChatServer { - private final FabricParser parser; - private final MinecraftServer server; + protected final FabricParser parser; + protected final MinecraftServer server; public FabricChatServer(FabricParser parser, MinecraftServer server) { this.parser = Objects.requireNonNull(parser); diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java index 32f015a..639f90c 100644 --- a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java @@ -12,8 +12,8 @@ import vakiliner.chatcomponentapi.util.ParseCollection; public class ForgeChatPlayerList implements ChatPlayerList { - private final ForgeParser parser; - private final PlayerList playerList; + protected final ForgeParser parser; + protected final PlayerList playerList; public ForgeChatPlayerList(ForgeParser parser, PlayerList playerList) { this.parser = Objects.requireNonNull(parser); diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatServer.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatServer.java index 5b44974..b641a48 100644 --- a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatServer.java +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatServer.java @@ -7,8 +7,8 @@ import vakiliner.chatcomponentapi.base.IChatPlugin; public class ForgeChatServer implements ChatServer { - private final ForgeParser parser; - private final MinecraftServer server; + protected final ForgeParser parser; + protected final MinecraftServer server; public ForgeChatServer(ForgeParser parser, MinecraftServer server) { this.parser = Objects.requireNonNull(parser); From 5f3d9c16c074d9ad2a87183a75e46d0603b4eada Mon Sep 17 00:00:00 2001 From: VAKiliner <119078586+vakiliner@users.noreply.github.com> Date: Mon, 9 Feb 2026 22:30:42 +0300 Subject: [PATCH 13/19] feat: ChatPlayerList.getPlayer(String) --- .../java/vakiliner/chatcomponentapi/base/ChatPlayerList.java | 4 +++- .../chatcomponentapi/craftbukkit/BukkitChatServer.java | 4 ++++ .../vakiliner/chatcomponentapi/craftbukkit/BukkitParser.java | 1 - .../chatcomponentapi/fabric/FabricChatPlayerList.java | 4 ++++ .../vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java | 4 ++++ 5 files changed, 15 insertions(+), 2 deletions(-) diff --git a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java index 75bc40a..82cdfc8 100644 --- a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java +++ b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java @@ -16,7 +16,9 @@ public interface ChatPlayerList { Collection getPlayers(); - public ChatPlayer getPlayer(UUID uuid); + ChatPlayer getPlayer(UUID uuid); + + ChatPlayer getPlayer(String name); default void broadcastMessage(ChatComponent component) { this.broadcastMessage(component, ChatMessageType.SYSTEM, null); diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java index e8ad452..b3d2da0 100644 --- a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java @@ -53,6 +53,10 @@ public ChatPlayer getPlayer(UUID uuid) { return this.parser.toChatPlayer(this.server.getPlayer(uuid)); } + public ChatPlayer getPlayer(String name) { + return this.parser.toChatPlayer(this.server.getPlayerExact(name)); + } + public void broadcastMessage(ChatComponent component, ChatMessageType type, UUID uuid) { this.parser.broadcastMessage(this.server, component, type, uuid); } diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitParser.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitParser.java index de25f40..ae38690 100644 --- a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitParser.java +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitParser.java @@ -10,7 +10,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.permissions.Permissible; -import org.bukkit.plugin.Plugin; import org.bukkit.scheduler.BukkitScheduler; import org.bukkit.scoreboard.Team; import vakiliner.chatcomponentapi.base.BaseParser; diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java index 1848c9f..b2e3270 100644 --- a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java @@ -48,6 +48,10 @@ public ChatPlayer getPlayer(UUID uuid) { return this.parser.toChatPlayer(this.playerList.getPlayer(uuid)); } + public ChatPlayer getPlayer(String name) { + return this.parser.toChatPlayer(this.playerList.getPlayerByName(name)); + } + public void broadcastMessage(ChatComponent component, ChatMessageType type, UUID uuid) { this.parser.broadcastMessage(this.playerList, component, type, uuid); } diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java index 639f90c..eb09226 100644 --- a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java @@ -48,6 +48,10 @@ public ChatPlayer getPlayer(UUID uuid) { return this.parser.toChatPlayer(this.playerList.getPlayer(uuid)); } + public ChatPlayer getPlayer(String name) { + return this.parser.toChatPlayer(this.playerList.getPlayerByName(name)); + } + public void broadcastMessage(ChatComponent component, ChatMessageType type, UUID uuid) { this.parser.broadcastMessage(this.playerList, component, type, uuid); } From c22469a696543624f5d3e51de6be1cd91811c894 Mon Sep 17 00:00:00 2001 From: VAKiliner <119078586+vakiliner@users.noreply.github.com> Date: Tue, 10 Feb 2026 14:16:06 +0300 Subject: [PATCH 14/19] feat: ChatBanList --- .../chatcomponentapi/base/ChatBanEntry.java | 11 +++++ .../chatcomponentapi/base/ChatIpBanList.java | 5 +++ .../chatcomponentapi/base/ChatPlayerList.java | 4 ++ .../base/ChatStoredUserEntry.java | 4 ++ .../base/ChatStoredUserList.java | 11 +++++ .../base/ChatUserBanList.java | 7 +++ .../craftbukkit/BukkitChatBanEntry.java | 31 +++++++++++++ .../craftbukkit/BukkitChatBanList.java | 37 +++++++++++++++ .../craftbukkit/BukkitChatIpBanList.java | 10 +++++ .../craftbukkit/BukkitChatServer.java | 11 +++++ .../craftbukkit/BukkitChatUserBanList.java | 20 +++++++++ .../craftbukkit/BukkitParser.java | 17 +++++++ .../fabric/FabricChatBanEntry.java | 23 ++++++++++ .../fabric/FabricChatIpBanList.java | 25 +++++++++++ .../fabric/FabricChatPlayerList.java | 10 +++++ .../fabric/FabricChatStoredUserEntry.java | 30 +++++++++++++ .../fabric/FabricChatStoredUserList.java | 45 +++++++++++++++++++ .../fabric/FabricChatUserBanList.java | 17 +++++++ .../chatcomponentapi/fabric/FabricParser.java | 18 ++++++++ .../forge/ForgeChatBanEntry.java | 23 ++++++++++ .../forge/ForgeChatIpBanList.java | 25 +++++++++++ .../forge/ForgeChatPlayerList.java | 10 +++++ .../forge/ForgeChatStoredUserEntry.java | 30 +++++++++++++ .../forge/ForgeChatStoredUserList.java | 45 +++++++++++++++++++ .../forge/ForgeChatUserBanList.java | 17 +++++++ .../chatcomponentapi/forge/ForgeParser.java | 18 ++++++++ 26 files changed, 504 insertions(+) create mode 100644 base/src/main/java/vakiliner/chatcomponentapi/base/ChatBanEntry.java create mode 100644 base/src/main/java/vakiliner/chatcomponentapi/base/ChatIpBanList.java create mode 100644 base/src/main/java/vakiliner/chatcomponentapi/base/ChatStoredUserEntry.java create mode 100644 base/src/main/java/vakiliner/chatcomponentapi/base/ChatStoredUserList.java create mode 100644 base/src/main/java/vakiliner/chatcomponentapi/base/ChatUserBanList.java create mode 100644 craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatBanEntry.java create mode 100644 craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatBanList.java create mode 100644 craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatIpBanList.java create mode 100644 craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatUserBanList.java create mode 100644 fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatBanEntry.java create mode 100644 fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatIpBanList.java create mode 100644 fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatStoredUserEntry.java create mode 100644 fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatStoredUserList.java create mode 100644 fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatUserBanList.java create mode 100644 forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatBanEntry.java create mode 100644 forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatIpBanList.java create mode 100644 forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatStoredUserEntry.java create mode 100644 forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatStoredUserList.java create mode 100644 forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatUserBanList.java diff --git a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatBanEntry.java b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatBanEntry.java new file mode 100644 index 0000000..6e2fda5 --- /dev/null +++ b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatBanEntry.java @@ -0,0 +1,11 @@ +package vakiliner.chatcomponentapi.base; + +import java.util.Date; + +public interface ChatBanEntry extends ChatStoredUserEntry { + String getSource(); + + Date getExpires(); + + String getReason(); +} \ No newline at end of file diff --git a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatIpBanList.java b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatIpBanList.java new file mode 100644 index 0000000..25400ca --- /dev/null +++ b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatIpBanList.java @@ -0,0 +1,5 @@ +package vakiliner.chatcomponentapi.base; + +public interface ChatIpBanList extends ChatStoredUserList { + boolean isBanned(String ip); +} \ No newline at end of file diff --git a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java index 82cdfc8..3402bab 100644 --- a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java +++ b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatPlayerList.java @@ -8,6 +8,10 @@ public interface ChatPlayerList { ChatServer getServer(); + ChatIpBanList getIpBanList(); + + ChatUserBanList getUserBanList(); + int getPlayerCount(); int getMaxPlayers(); diff --git a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatStoredUserEntry.java b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatStoredUserEntry.java new file mode 100644 index 0000000..311960b --- /dev/null +++ b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatStoredUserEntry.java @@ -0,0 +1,4 @@ +package vakiliner.chatcomponentapi.base; + +public interface ChatStoredUserEntry { +} \ No newline at end of file diff --git a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatStoredUserList.java b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatStoredUserList.java new file mode 100644 index 0000000..6ac9577 --- /dev/null +++ b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatStoredUserList.java @@ -0,0 +1,11 @@ +package vakiliner.chatcomponentapi.base; + +import java.util.Collection; + +public interface ChatStoredUserList { + V get(K key); + + Collection getEntries(); + + boolean isEmpty(); +} \ No newline at end of file diff --git a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatUserBanList.java b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatUserBanList.java new file mode 100644 index 0000000..bb6909b --- /dev/null +++ b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatUserBanList.java @@ -0,0 +1,7 @@ +package vakiliner.chatcomponentapi.base; + +import com.mojang.authlib.GameProfile; + +public interface ChatUserBanList extends ChatStoredUserList { + boolean isBanned(GameProfile gameProfile); +} \ No newline at end of file diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatBanEntry.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatBanEntry.java new file mode 100644 index 0000000..e225ddd --- /dev/null +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatBanEntry.java @@ -0,0 +1,31 @@ +package vakiliner.chatcomponentapi.craftbukkit; + +import java.util.Date; +import org.bukkit.BanEntry; +import vakiliner.chatcomponentapi.base.ChatBanEntry; + +public class BukkitChatBanEntry implements ChatBanEntry { + protected final BukkitParser parser; + protected final BanEntry banEntry; + + public BukkitChatBanEntry(BukkitParser parser, BanEntry banEntry) { + this.parser = parser; + this.banEntry = banEntry; + } + + public BanEntry getImpl() { + return this.banEntry; + } + + public String getReason() { + return this.banEntry.getReason(); + } + + public String getSource() { + return this.banEntry.getSource(); + } + + public Date getExpires() { + return this.banEntry.getExpiration(); + } +} \ No newline at end of file diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatBanList.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatBanList.java new file mode 100644 index 0000000..74730f0 --- /dev/null +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatBanList.java @@ -0,0 +1,37 @@ +package vakiliner.chatcomponentapi.craftbukkit; + +import java.util.Collection; +import org.bukkit.BanList; +import vakiliner.chatcomponentapi.base.ChatBanEntry; +import vakiliner.chatcomponentapi.base.ChatStoredUserList; +import vakiliner.chatcomponentapi.util.ParseCollection; + +public abstract class BukkitChatBanList implements ChatStoredUserList { + protected final BukkitParser parser; + protected final BanList banList; + + public BukkitChatBanList(BukkitParser parser, BanList banList) { + this.parser = parser; + this.banList = banList; + } + + public BanList getImpl() { + return this.banList; + } + + public ChatBanEntry get(String key) { + return this.parser.toChatBanEntry(this.banList.getBanEntry(key)); + } + + public boolean isBanned(String key) { + return this.banList.isBanned(key); + } + + public Collection getEntries() { + return new ParseCollection<>(this.banList.getBanEntries(), this.parser::toChatBanEntry); + } + + public boolean isEmpty() { + return this.banList.getBanEntries().isEmpty(); + } +} \ No newline at end of file diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatIpBanList.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatIpBanList.java new file mode 100644 index 0000000..7319f14 --- /dev/null +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatIpBanList.java @@ -0,0 +1,10 @@ +package vakiliner.chatcomponentapi.craftbukkit; + +import org.bukkit.BanList; +import vakiliner.chatcomponentapi.base.ChatIpBanList; + +public class BukkitChatIpBanList extends BukkitChatBanList implements ChatIpBanList { + public BukkitChatIpBanList(BukkitParser parser, BanList banList) { + super(parser, banList); + } +} \ No newline at end of file diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java index b3d2da0..3fcb9cc 100644 --- a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatServer.java @@ -4,9 +4,12 @@ import java.util.Objects; import java.util.UUID; import org.bukkit.Server; +import org.bukkit.BanList.Type; +import vakiliner.chatcomponentapi.base.ChatIpBanList; import vakiliner.chatcomponentapi.base.ChatPlayer; import vakiliner.chatcomponentapi.base.ChatPlayerList; import vakiliner.chatcomponentapi.base.ChatServer; +import vakiliner.chatcomponentapi.base.ChatUserBanList; import vakiliner.chatcomponentapi.base.IChatPlugin; import vakiliner.chatcomponentapi.common.ChatMessageType; import vakiliner.chatcomponentapi.component.ChatComponent; @@ -33,6 +36,14 @@ public ChatPlayerList getPlayerList() { return this; } + public ChatIpBanList getIpBanList() { + return this.parser.toChatIpBanList(this.server.getBanList(Type.IP)); + } + + public ChatUserBanList getUserBanList() { + return this.parser.toChatUserBanList(this.server.getBanList(Type.NAME)); + } + public int getPlayerCount() { return this.server.getOnlinePlayers().size(); } diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatUserBanList.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatUserBanList.java new file mode 100644 index 0000000..80f219f --- /dev/null +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatUserBanList.java @@ -0,0 +1,20 @@ +package vakiliner.chatcomponentapi.craftbukkit; + +import org.bukkit.BanList; +import com.mojang.authlib.GameProfile; +import vakiliner.chatcomponentapi.base.ChatBanEntry; +import vakiliner.chatcomponentapi.base.ChatUserBanList; + +public class BukkitChatUserBanList extends BukkitChatBanList implements ChatUserBanList { + public BukkitChatUserBanList(BukkitParser parser, BanList banList) { + super(parser, banList); + } + + public ChatBanEntry get(GameProfile key) { + return this.get(key.getName()); + } + + public boolean isBanned(GameProfile gameProfile) { + return this.isBanned(gameProfile.getName()); + } +} \ No newline at end of file diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitParser.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitParser.java index ae38690..b385c1b 100644 --- a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitParser.java +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitParser.java @@ -3,6 +3,8 @@ import java.util.HashSet; import java.util.Set; import java.util.UUID; +import org.bukkit.BanEntry; +import org.bukkit.BanList; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.OfflinePlayer; @@ -13,12 +15,15 @@ import org.bukkit.scheduler.BukkitScheduler; import org.bukkit.scoreboard.Team; import vakiliner.chatcomponentapi.base.BaseParser; +import vakiliner.chatcomponentapi.base.ChatBanEntry; import vakiliner.chatcomponentapi.base.ChatCommandSender; +import vakiliner.chatcomponentapi.base.ChatIpBanList; import vakiliner.chatcomponentapi.base.ChatOfflinePlayer; import vakiliner.chatcomponentapi.base.ChatPlayer; import vakiliner.chatcomponentapi.base.ChatPlayerList; import vakiliner.chatcomponentapi.base.ChatServer; import vakiliner.chatcomponentapi.base.ChatTeam; +import vakiliner.chatcomponentapi.base.ChatUserBanList; import vakiliner.chatcomponentapi.base.IChatPlugin; import vakiliner.chatcomponentapi.common.ChatMessageType; import vakiliner.chatcomponentapi.common.ChatTextFormat; @@ -117,4 +122,16 @@ public ChatServer toChatServer(Server server) { public ChatPlayerList toChatPlayerList(Server server) { return server != null ? new BukkitChatServer(this, server) : null; } + + public ChatIpBanList toChatIpBanList(BanList banList) { + return banList != null ? new BukkitChatIpBanList(this, banList) : null; + } + + public ChatUserBanList toChatUserBanList(BanList banList) { + return banList != null ? new BukkitChatUserBanList(this, banList) : null; + } + + public ChatBanEntry toChatBanEntry(BanEntry banEntry) { + return banEntry != null ? new BukkitChatBanEntry(this, banEntry) : null; + } } \ No newline at end of file diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatBanEntry.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatBanEntry.java new file mode 100644 index 0000000..e3af04e --- /dev/null +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatBanEntry.java @@ -0,0 +1,23 @@ +package vakiliner.chatcomponentapi.fabric; + +import java.util.Date; +import net.minecraft.server.players.BanListEntry; +import vakiliner.chatcomponentapi.base.ChatBanEntry; + +public class FabricChatBanEntry> extends FabricChatStoredUserEntry implements ChatBanEntry { + public FabricChatBanEntry(FabricParser parser, Entry entry) { + super(parser, entry); + } + + public String getReason() { + return this.entry.getReason(); + } + + public String getSource() { + return this.entry.getSource(); + } + + public Date getExpires() { + return this.entry.getExpires(); + } +} \ No newline at end of file diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatIpBanList.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatIpBanList.java new file mode 100644 index 0000000..d289187 --- /dev/null +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatIpBanList.java @@ -0,0 +1,25 @@ +package vakiliner.chatcomponentapi.fabric; + +import java.net.SocketAddress; +import net.minecraft.server.players.IpBanList; +import net.minecraft.server.players.IpBanListEntry; +import vakiliner.chatcomponentapi.base.ChatBanEntry; +import vakiliner.chatcomponentapi.base.ChatIpBanList; + +public class FabricChatIpBanList extends FabricChatStoredUserList implements ChatIpBanList { + public FabricChatIpBanList(FabricParser parser, IpBanList list) { + super(parser, list, parser::toChatBanEntry); + } + + public ChatBanEntry get(SocketAddress address) { + return this.i2o.apply(this.list.get(address)); + } + + public boolean isBanned(SocketAddress address) { + return this.list.isBanned(address); + } + + public boolean isBanned(String ip) { + return this.list.isBanned(ip); + } +} \ No newline at end of file diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java index b2e3270..d6ed4a0 100644 --- a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatPlayerList.java @@ -4,9 +4,11 @@ import java.util.Objects; import java.util.UUID; import net.minecraft.server.players.PlayerList; +import vakiliner.chatcomponentapi.base.ChatIpBanList; import vakiliner.chatcomponentapi.base.ChatPlayer; import vakiliner.chatcomponentapi.base.ChatPlayerList; import vakiliner.chatcomponentapi.base.ChatServer; +import vakiliner.chatcomponentapi.base.ChatUserBanList; import vakiliner.chatcomponentapi.common.ChatMessageType; import vakiliner.chatcomponentapi.component.ChatComponent; import vakiliner.chatcomponentapi.util.ParseCollection; @@ -28,6 +30,14 @@ public ChatServer getServer() { return this.parser.toChatServer(this.playerList.getServer()); } + public ChatIpBanList getIpBanList() { + return this.parser.toChatIpBanList(this.playerList.getIpBans()); + } + + public ChatUserBanList getUserBanList() { + return this.parser.toChatUserBanList(this.playerList.getBans()); + } + public int getPlayerCount() { return this.playerList.getPlayerCount(); } diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatStoredUserEntry.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatStoredUserEntry.java new file mode 100644 index 0000000..a820042 --- /dev/null +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatStoredUserEntry.java @@ -0,0 +1,30 @@ +package vakiliner.chatcomponentapi.fabric; + +import net.minecraft.server.players.StoredUserEntry; +import vakiliner.chatcomponentapi.base.ChatStoredUserEntry; + +public class FabricChatStoredUserEntry> implements ChatStoredUserEntry { + protected final FabricParser parser; + protected final Entry entry; + + public FabricChatStoredUserEntry(FabricParser parser, Entry entry) { + this.parser = parser; + this.entry = entry; + } + + public Entry getImpl() { + return this.entry; + } + + public boolean equals(Object obj) { + if (obj == this) { + return true; + } else if (obj != null && this.getClass() == obj.getClass()) { + @SuppressWarnings("rawtypes") + FabricChatStoredUserEntry other = (FabricChatStoredUserEntry) obj; + return this.parser.equals(other.parser) && this.entry.equals(other.entry); + } else { + return false; + } + } +} \ No newline at end of file diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatStoredUserList.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatStoredUserList.java new file mode 100644 index 0000000..7d45dde --- /dev/null +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatStoredUserList.java @@ -0,0 +1,45 @@ +package vakiliner.chatcomponentapi.fabric; + +import java.util.Collection; +import java.util.function.Function; +import net.minecraft.server.players.StoredUserEntry; +import net.minecraft.server.players.StoredUserList; +import vakiliner.chatcomponentapi.base.ChatStoredUserEntry; +import vakiliner.chatcomponentapi.base.ChatStoredUserList; +import vakiliner.chatcomponentapi.util.ParseCollection; + +public abstract class FabricChatStoredUserList, Output extends ChatStoredUserEntry, Input extends StoredUserEntry> implements ChatStoredUserList { + protected final FabricParser parser; + protected final List list; + protected final Function i2o; + + public FabricChatStoredUserList(FabricParser parser, List list, Function i2o) { + this.parser = parser; + this.list = list; + this.i2o = i2o; + } + + public Output get(Key key) { + return this.i2o.apply(this.list.get(key)); + } + + public Collection getEntries() { + return new ParseCollection<>(this.list.getEntries(), this.i2o); + } + + public boolean isEmpty() { + return this.list.isEmpty(); + } + + public boolean equals(Object obj) { + if (obj == this) { + return true; + } else if (obj != null && this.getClass() == obj.getClass()) { + @SuppressWarnings("rawtypes") + FabricChatStoredUserList other = (FabricChatStoredUserList) obj; + return this.parser.equals(other.parser) && this.list.equals(other.list); + } else { + return false; + } + } +} \ No newline at end of file diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatUserBanList.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatUserBanList.java new file mode 100644 index 0000000..8ed3d96 --- /dev/null +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatUserBanList.java @@ -0,0 +1,17 @@ +package vakiliner.chatcomponentapi.fabric; + +import com.mojang.authlib.GameProfile; +import net.minecraft.server.players.UserBanList; +import net.minecraft.server.players.UserBanListEntry; +import vakiliner.chatcomponentapi.base.ChatBanEntry; +import vakiliner.chatcomponentapi.base.ChatUserBanList; + +public class FabricChatUserBanList extends FabricChatStoredUserList implements ChatUserBanList { + public FabricChatUserBanList(FabricParser parser, UserBanList list) { + super(parser, list, parser::toChatBanEntry); + } + + public boolean isBanned(GameProfile gameProfile) { + return this.list.isBanned(gameProfile); + } +} \ No newline at end of file diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricParser.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricParser.java index 9593999..97cbaea 100644 --- a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricParser.java +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricParser.java @@ -23,16 +23,22 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.players.BanListEntry; +import net.minecraft.server.players.IpBanList; import net.minecraft.server.players.PlayerList; +import net.minecraft.server.players.UserBanList; import net.minecraft.world.item.ItemStack; import net.minecraft.world.scores.PlayerTeam; import vakiliner.chatcomponentapi.base.BaseParser; +import vakiliner.chatcomponentapi.base.ChatBanEntry; import vakiliner.chatcomponentapi.base.ChatCommandSender; +import vakiliner.chatcomponentapi.base.ChatIpBanList; import vakiliner.chatcomponentapi.base.ChatOfflinePlayer; import vakiliner.chatcomponentapi.base.ChatPlayer; import vakiliner.chatcomponentapi.base.ChatPlayerList; import vakiliner.chatcomponentapi.base.ChatServer; import vakiliner.chatcomponentapi.base.ChatTeam; +import vakiliner.chatcomponentapi.base.ChatUserBanList; import vakiliner.chatcomponentapi.base.IChatPlugin; import vakiliner.chatcomponentapi.common.ChatId; import vakiliner.chatcomponentapi.common.ChatMessageType; @@ -277,4 +283,16 @@ public ChatServer toChatServer(MinecraftServer server) { public ChatPlayerList toChatPlayerList(PlayerList playerList) { return playerList != null ? new FabricChatPlayerList(this, playerList) : null; } + + public ChatIpBanList toChatIpBanList(IpBanList ipBanList) { + return ipBanList != null ? new FabricChatIpBanList(this, ipBanList) : null; + } + + public ChatUserBanList toChatUserBanList(UserBanList userBanList) { + return userBanList != null ? new FabricChatUserBanList(this, userBanList) : null; + } + + public ChatBanEntry toChatBanEntry(BanListEntry banListEntry) { + return banListEntry != null ? new FabricChatBanEntry<>(this, banListEntry) : null; + } } \ No newline at end of file diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatBanEntry.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatBanEntry.java new file mode 100644 index 0000000..9f02636 --- /dev/null +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatBanEntry.java @@ -0,0 +1,23 @@ +package vakiliner.chatcomponentapi.forge; + +import java.util.Date; +import net.minecraft.server.management.BanEntry; +import vakiliner.chatcomponentapi.base.ChatBanEntry; + +public class ForgeChatBanEntry> extends ForgeChatStoredUserEntry implements ChatBanEntry { + public ForgeChatBanEntry(ForgeParser parser, Entry entry) { + super(parser, entry); + } + + public String getReason() { + return this.entry.getReason(); + } + + public String getSource() { + return this.entry.getSource(); + } + + public Date getExpires() { + return this.entry.getExpires(); + } +} \ No newline at end of file diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatIpBanList.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatIpBanList.java new file mode 100644 index 0000000..dc4e4a3 --- /dev/null +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatIpBanList.java @@ -0,0 +1,25 @@ +package vakiliner.chatcomponentapi.forge; + +import java.net.SocketAddress; +import net.minecraft.server.management.IPBanEntry; +import net.minecraft.server.management.IPBanList; +import vakiliner.chatcomponentapi.base.ChatBanEntry; +import vakiliner.chatcomponentapi.base.ChatIpBanList; + +public class ForgeChatIpBanList extends ForgeChatStoredUserList implements ChatIpBanList { + public ForgeChatIpBanList(ForgeParser parser, IPBanList list) { + super(parser, list, parser::toChatBanEntry); + } + + public ChatBanEntry get(SocketAddress address) { + return this.i2o.apply(this.list.get(address)); + } + + public boolean isBanned(SocketAddress address) { + return this.list.isBanned(address); + } + + public boolean isBanned(String ip) { + return this.list.isBanned(ip); + } +} \ No newline at end of file diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java index eb09226..3770ecb 100644 --- a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatPlayerList.java @@ -4,9 +4,11 @@ import java.util.Objects; import java.util.UUID; import net.minecraft.server.management.PlayerList; +import vakiliner.chatcomponentapi.base.ChatIpBanList; import vakiliner.chatcomponentapi.base.ChatPlayer; import vakiliner.chatcomponentapi.base.ChatPlayerList; import vakiliner.chatcomponentapi.base.ChatServer; +import vakiliner.chatcomponentapi.base.ChatUserBanList; import vakiliner.chatcomponentapi.common.ChatMessageType; import vakiliner.chatcomponentapi.component.ChatComponent; import vakiliner.chatcomponentapi.util.ParseCollection; @@ -28,6 +30,14 @@ public ChatServer getServer() { return this.parser.toChatServer(this.playerList.getServer()); } + public ChatIpBanList getIpBanList() { + return this.parser.toChatIpBanList(this.playerList.getIpBans()); + } + + public ChatUserBanList getUserBanList() { + return this.parser.toChatUserBanList(this.playerList.getBans()); + } + public int getPlayerCount() { return this.playerList.getPlayerCount(); } diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatStoredUserEntry.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatStoredUserEntry.java new file mode 100644 index 0000000..e8480e4 --- /dev/null +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatStoredUserEntry.java @@ -0,0 +1,30 @@ +package vakiliner.chatcomponentapi.forge; + +import net.minecraft.server.management.UserListEntry; +import vakiliner.chatcomponentapi.base.ChatStoredUserEntry; + +public class ForgeChatStoredUserEntry> implements ChatStoredUserEntry { + protected final ForgeParser parser; + protected final Entry entry; + + public ForgeChatStoredUserEntry(ForgeParser parser, Entry entry) { + this.parser = parser; + this.entry = entry; + } + + public Entry getImpl() { + return this.entry; + } + + public boolean equals(Object obj) { + if (obj == this) { + return true; + } else if (obj != null && this.getClass() == obj.getClass()) { + @SuppressWarnings("rawtypes") + ForgeChatStoredUserEntry other = (ForgeChatStoredUserEntry) obj; + return this.parser.equals(other.parser) && this.entry.equals(other.entry); + } else { + return false; + } + } +} \ No newline at end of file diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatStoredUserList.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatStoredUserList.java new file mode 100644 index 0000000..3e79ff9 --- /dev/null +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatStoredUserList.java @@ -0,0 +1,45 @@ +package vakiliner.chatcomponentapi.forge; + +import java.util.Collection; +import java.util.function.Function; +import net.minecraft.server.management.UserList; +import net.minecraft.server.management.UserListEntry; +import vakiliner.chatcomponentapi.base.ChatStoredUserEntry; +import vakiliner.chatcomponentapi.base.ChatStoredUserList; +import vakiliner.chatcomponentapi.util.ParseCollection; + +public abstract class ForgeChatStoredUserList, Output extends ChatStoredUserEntry, Input extends UserListEntry> implements ChatStoredUserList { + protected final ForgeParser parser; + protected final List list; + protected final Function i2o; + + public ForgeChatStoredUserList(ForgeParser parser, List list, Function i2o) { + this.parser = parser; + this.list = list; + this.i2o = i2o; + } + + public Output get(Key key) { + return this.i2o.apply(this.list.get(key)); + } + + public Collection getEntries() { + return new ParseCollection<>(this.list.getEntries(), this.i2o); + } + + public boolean isEmpty() { + return this.list.isEmpty(); + } + + public boolean equals(Object obj) { + if (obj == this) { + return true; + } else if (obj != null && this.getClass() == obj.getClass()) { + @SuppressWarnings("rawtypes") + ForgeChatStoredUserList other = (ForgeChatStoredUserList) obj; + return this.parser.equals(other.parser) && this.list.equals(other.list); + } else { + return false; + } + } +} \ No newline at end of file diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatUserBanList.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatUserBanList.java new file mode 100644 index 0000000..5461d61 --- /dev/null +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatUserBanList.java @@ -0,0 +1,17 @@ +package vakiliner.chatcomponentapi.forge; + +import com.mojang.authlib.GameProfile; +import net.minecraft.server.management.BanList; +import net.minecraft.server.management.ProfileBanEntry; +import vakiliner.chatcomponentapi.base.ChatBanEntry; +import vakiliner.chatcomponentapi.base.ChatUserBanList; + +public class ForgeChatUserBanList extends ForgeChatStoredUserList implements ChatUserBanList { + public ForgeChatUserBanList(ForgeParser parser, BanList list) { + super(parser, list, parser::toChatBanEntry); + } + + public boolean isBanned(GameProfile gameProfile) { + return this.list.isBanned(gameProfile); + } +} \ No newline at end of file diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeParser.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeParser.java index 83f7a2a..7c6954f 100644 --- a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeParser.java +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeParser.java @@ -11,6 +11,9 @@ import net.minecraft.network.play.server.SChatPacket; import net.minecraft.scoreboard.ScorePlayerTeam; import net.minecraft.server.MinecraftServer; +import net.minecraft.server.management.BanEntry; +import net.minecraft.server.management.BanList; +import net.minecraft.server.management.IPBanList; import net.minecraft.server.management.PlayerList; import net.minecraft.util.ResourceLocation; import net.minecraft.util.Util; @@ -26,12 +29,15 @@ import net.minecraft.util.text.event.ClickEvent; import net.minecraft.util.text.event.HoverEvent; import vakiliner.chatcomponentapi.base.BaseParser; +import vakiliner.chatcomponentapi.base.ChatBanEntry; import vakiliner.chatcomponentapi.base.ChatCommandSender; +import vakiliner.chatcomponentapi.base.ChatIpBanList; import vakiliner.chatcomponentapi.base.ChatOfflinePlayer; import vakiliner.chatcomponentapi.base.ChatPlayer; import vakiliner.chatcomponentapi.base.ChatPlayerList; import vakiliner.chatcomponentapi.base.ChatServer; import vakiliner.chatcomponentapi.base.ChatTeam; +import vakiliner.chatcomponentapi.base.ChatUserBanList; import vakiliner.chatcomponentapi.base.IChatPlugin; import vakiliner.chatcomponentapi.common.ChatId; import vakiliner.chatcomponentapi.common.ChatMessageType; @@ -271,4 +277,16 @@ public ChatServer toChatServer(MinecraftServer server) { public ChatPlayerList toChatPlayerList(PlayerList playerList) { return playerList != null ? new ForgeChatPlayerList(this, playerList) : null; } + + public ChatIpBanList toChatIpBanList(IPBanList ipBanList) { + return ipBanList != null ? new ForgeChatIpBanList(this, ipBanList) : null; + } + + public ChatUserBanList toChatUserBanList(BanList userBanList) { + return userBanList != null ? new ForgeChatUserBanList(this, userBanList) : null; + } + + public ChatBanEntry toChatBanEntry(BanEntry banListEntry) { + return banListEntry != null ? new ForgeChatBanEntry<>(this, banListEntry) : null; + } } \ No newline at end of file From 2bc913b9f5cd55e8377194b3f2babd7dcc788b1c Mon Sep 17 00:00:00 2001 From: VAKiliner <119078586+vakiliner@users.noreply.github.com> Date: Tue, 10 Feb 2026 14:50:13 +0300 Subject: [PATCH 15/19] feat: ChatStoredUserList.remove(K) --- .../vakiliner/chatcomponentapi/base/ChatStoredUserList.java | 2 ++ .../chatcomponentapi/craftbukkit/BukkitChatBanList.java | 4 ++++ .../chatcomponentapi/craftbukkit/BukkitChatUserBanList.java | 4 ++++ .../chatcomponentapi/fabric/FabricChatStoredUserList.java | 6 +++++- .../chatcomponentapi/forge/ForgeChatStoredUserList.java | 6 +++++- 5 files changed, 20 insertions(+), 2 deletions(-) diff --git a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatStoredUserList.java b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatStoredUserList.java index 6ac9577..668f9af 100644 --- a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatStoredUserList.java +++ b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatStoredUserList.java @@ -5,6 +5,8 @@ public interface ChatStoredUserList { V get(K key); + void remove(K key); + Collection getEntries(); boolean isEmpty(); diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatBanList.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatBanList.java index 74730f0..192ce68 100644 --- a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatBanList.java +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatBanList.java @@ -23,6 +23,10 @@ public ChatBanEntry get(String key) { return this.parser.toChatBanEntry(this.banList.getBanEntry(key)); } + public void remove(String key) { + this.banList.pardon(key); + } + public boolean isBanned(String key) { return this.banList.isBanned(key); } diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatUserBanList.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatUserBanList.java index 80f219f..0705889 100644 --- a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatUserBanList.java +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatUserBanList.java @@ -14,6 +14,10 @@ public ChatBanEntry get(GameProfile key) { return this.get(key.getName()); } + public void remove(GameProfile key) { + this.remove(key.getName()); + } + public boolean isBanned(GameProfile gameProfile) { return this.isBanned(gameProfile.getName()); } diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatStoredUserList.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatStoredUserList.java index 7d45dde..0b32154 100644 --- a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatStoredUserList.java +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatStoredUserList.java @@ -8,7 +8,7 @@ import vakiliner.chatcomponentapi.base.ChatStoredUserList; import vakiliner.chatcomponentapi.util.ParseCollection; -public abstract class FabricChatStoredUserList, Output extends ChatStoredUserEntry, Input extends StoredUserEntry> implements ChatStoredUserList { +public class FabricChatStoredUserList, Output extends ChatStoredUserEntry, Input extends StoredUserEntry> implements ChatStoredUserList { protected final FabricParser parser; protected final List list; protected final Function i2o; @@ -23,6 +23,10 @@ public Output get(Key key) { return this.i2o.apply(this.list.get(key)); } + public void remove(Key key) { + this.list.remove(key); + } + public Collection getEntries() { return new ParseCollection<>(this.list.getEntries(), this.i2o); } diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatStoredUserList.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatStoredUserList.java index 3e79ff9..f092948 100644 --- a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatStoredUserList.java +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatStoredUserList.java @@ -8,7 +8,7 @@ import vakiliner.chatcomponentapi.base.ChatStoredUserList; import vakiliner.chatcomponentapi.util.ParseCollection; -public abstract class ForgeChatStoredUserList, Output extends ChatStoredUserEntry, Input extends UserListEntry> implements ChatStoredUserList { +public class ForgeChatStoredUserList, Output extends ChatStoredUserEntry, Input extends UserListEntry> implements ChatStoredUserList { protected final ForgeParser parser; protected final List list; protected final Function i2o; @@ -23,6 +23,10 @@ public Output get(Key key) { return this.i2o.apply(this.list.get(key)); } + public void remove(Key key) { + this.list.remove(key); + } + public Collection getEntries() { return new ParseCollection<>(this.list.getEntries(), this.i2o); } From 7ca8923ec2d006556975f4b71414da40cc79e92d Mon Sep 17 00:00:00 2001 From: VAKiliner <119078586+vakiliner@users.noreply.github.com> Date: Tue, 10 Feb 2026 14:55:19 +0300 Subject: [PATCH 16/19] refactor: Change param names --- .../chatcomponentapi/base/ChatStoredUserList.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatStoredUserList.java b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatStoredUserList.java index 668f9af..98d4d40 100644 --- a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatStoredUserList.java +++ b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatStoredUserList.java @@ -2,12 +2,12 @@ import java.util.Collection; -public interface ChatStoredUserList { - V get(K key); +public interface ChatStoredUserList { + Entry get(Key key); - void remove(K key); + void remove(Key key); - Collection getEntries(); + Collection getEntries(); boolean isEmpty(); } \ No newline at end of file From d74c4890df99816d5a2597416a4faee3dadb48bb Mon Sep 17 00:00:00 2001 From: VAKiliner <119078586+vakiliner@users.noreply.github.com> Date: Tue, 10 Feb 2026 15:06:01 +0300 Subject: [PATCH 17/19] feat: ChatStoredUserList.add(Key) --- .../vakiliner/chatcomponentapi/base/ChatStoredUserList.java | 2 ++ .../chatcomponentapi/craftbukkit/BukkitChatBanList.java | 4 ++++ .../chatcomponentapi/craftbukkit/BukkitChatUserBanList.java | 4 ++++ .../chatcomponentapi/fabric/FabricChatIpBanList.java | 6 ++++++ .../chatcomponentapi/fabric/FabricChatStoredUserList.java | 2 +- .../chatcomponentapi/fabric/FabricChatUserBanList.java | 6 ++++++ .../chatcomponentapi/forge/ForgeChatIpBanList.java | 6 ++++++ .../chatcomponentapi/forge/ForgeChatStoredUserList.java | 2 +- .../chatcomponentapi/forge/ForgeChatUserBanList.java | 6 ++++++ 9 files changed, 36 insertions(+), 2 deletions(-) diff --git a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatStoredUserList.java b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatStoredUserList.java index 98d4d40..694f524 100644 --- a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatStoredUserList.java +++ b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatStoredUserList.java @@ -3,6 +3,8 @@ import java.util.Collection; public interface ChatStoredUserList { + Entry add(Key key); + Entry get(Key key); void remove(Key key); diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatBanList.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatBanList.java index 192ce68..5a68ee2 100644 --- a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatBanList.java +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatBanList.java @@ -19,6 +19,10 @@ public BanList getImpl() { return this.banList; } + public ChatBanEntry add(String key) { + return this.parser.toChatBanEntry(this.banList.addBan(key, null, null, null)); + } + public ChatBanEntry get(String key) { return this.parser.toChatBanEntry(this.banList.getBanEntry(key)); } diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatUserBanList.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatUserBanList.java index 0705889..eea934f 100644 --- a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatUserBanList.java +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatUserBanList.java @@ -10,6 +10,10 @@ public BukkitChatUserBanList(BukkitParser parser, BanList banList) { super(parser, banList); } + public ChatBanEntry add(GameProfile key) { + return this.add(key.getName()); + } + public ChatBanEntry get(GameProfile key) { return this.get(key.getName()); } diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatIpBanList.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatIpBanList.java index d289187..45dd49a 100644 --- a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatIpBanList.java +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatIpBanList.java @@ -11,6 +11,12 @@ public FabricChatIpBanList(FabricParser parser, IpBanList list) { super(parser, list, parser::toChatBanEntry); } + public ChatBanEntry add(String key) { + IpBanListEntry entry = new IpBanListEntry(key); + this.list.add(entry); + return this.i2o.apply(entry); + } + public ChatBanEntry get(SocketAddress address) { return this.i2o.apply(this.list.get(address)); } diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatStoredUserList.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatStoredUserList.java index 0b32154..efb8662 100644 --- a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatStoredUserList.java +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatStoredUserList.java @@ -8,7 +8,7 @@ import vakiliner.chatcomponentapi.base.ChatStoredUserList; import vakiliner.chatcomponentapi.util.ParseCollection; -public class FabricChatStoredUserList, Output extends ChatStoredUserEntry, Input extends StoredUserEntry> implements ChatStoredUserList { +public abstract class FabricChatStoredUserList, Output extends ChatStoredUserEntry, Input extends StoredUserEntry> implements ChatStoredUserList { protected final FabricParser parser; protected final List list; protected final Function i2o; diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatUserBanList.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatUserBanList.java index 8ed3d96..fdafc14 100644 --- a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatUserBanList.java +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatUserBanList.java @@ -11,6 +11,12 @@ public FabricChatUserBanList(FabricParser parser, UserBanList list) { super(parser, list, parser::toChatBanEntry); } + public ChatBanEntry add(GameProfile key) { + UserBanListEntry entry = new UserBanListEntry(key); + this.list.add(entry); + return this.i2o.apply(entry); + } + public boolean isBanned(GameProfile gameProfile) { return this.list.isBanned(gameProfile); } diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatIpBanList.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatIpBanList.java index dc4e4a3..b257ac4 100644 --- a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatIpBanList.java +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatIpBanList.java @@ -11,6 +11,12 @@ public ForgeChatIpBanList(ForgeParser parser, IPBanList list) { super(parser, list, parser::toChatBanEntry); } + public ChatBanEntry add(String key) { + IPBanEntry entry = new IPBanEntry(key); + this.list.add(entry); + return this.i2o.apply(entry); + } + public ChatBanEntry get(SocketAddress address) { return this.i2o.apply(this.list.get(address)); } diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatStoredUserList.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatStoredUserList.java index f092948..6d95a5b 100644 --- a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatStoredUserList.java +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatStoredUserList.java @@ -8,7 +8,7 @@ import vakiliner.chatcomponentapi.base.ChatStoredUserList; import vakiliner.chatcomponentapi.util.ParseCollection; -public class ForgeChatStoredUserList, Output extends ChatStoredUserEntry, Input extends UserListEntry> implements ChatStoredUserList { +public abstract class ForgeChatStoredUserList, Output extends ChatStoredUserEntry, Input extends UserListEntry> implements ChatStoredUserList { protected final ForgeParser parser; protected final List list; protected final Function i2o; diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatUserBanList.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatUserBanList.java index 5461d61..13c5240 100644 --- a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatUserBanList.java +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatUserBanList.java @@ -11,6 +11,12 @@ public ForgeChatUserBanList(ForgeParser parser, BanList list) { super(parser, list, parser::toChatBanEntry); } + public ChatBanEntry add(GameProfile key) { + ProfileBanEntry entry = new ProfileBanEntry(key); + this.list.add(entry); + return this.i2o.apply(entry); + } + public boolean isBanned(GameProfile gameProfile) { return this.list.isBanned(gameProfile); } From 0246dea3488d9bcf8ce55f4adf7c5d2e4b3cc4d6 Mon Sep 17 00:00:00 2001 From: VAKiliner <119078586+vakiliner@users.noreply.github.com> Date: Tue, 10 Feb 2026 15:16:57 +0300 Subject: [PATCH 18/19] feat: ChatBanList --- .../vakiliner/chatcomponentapi/base/ChatBanList.java | 7 +++++++ .../chatcomponentapi/base/ChatIpBanList.java | 2 +- .../chatcomponentapi/base/ChatUserBanList.java | 2 +- .../craftbukkit/BukkitChatBanList.java | 11 ++++++++--- .../craftbukkit/BukkitChatUserBanList.java | 5 +++++ .../chatcomponentapi/fabric/FabricChatIpBanList.java | 7 +++++++ .../fabric/FabricChatUserBanList.java | 7 +++++++ .../chatcomponentapi/forge/ForgeChatIpBanList.java | 7 +++++++ .../chatcomponentapi/forge/ForgeChatUserBanList.java | 7 +++++++ 9 files changed, 50 insertions(+), 5 deletions(-) create mode 100644 base/src/main/java/vakiliner/chatcomponentapi/base/ChatBanList.java diff --git a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatBanList.java b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatBanList.java new file mode 100644 index 0000000..d74d1be --- /dev/null +++ b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatBanList.java @@ -0,0 +1,7 @@ +package vakiliner.chatcomponentapi.base; + +import java.util.Date; + +public interface ChatBanList extends ChatStoredUserList { + ChatBanEntry add(Key key, String reason, String source, Date expires); +} \ No newline at end of file diff --git a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatIpBanList.java b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatIpBanList.java index 25400ca..1b475ce 100644 --- a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatIpBanList.java +++ b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatIpBanList.java @@ -1,5 +1,5 @@ package vakiliner.chatcomponentapi.base; -public interface ChatIpBanList extends ChatStoredUserList { +public interface ChatIpBanList extends ChatBanList { boolean isBanned(String ip); } \ No newline at end of file diff --git a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatUserBanList.java b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatUserBanList.java index bb6909b..18e7c34 100644 --- a/base/src/main/java/vakiliner/chatcomponentapi/base/ChatUserBanList.java +++ b/base/src/main/java/vakiliner/chatcomponentapi/base/ChatUserBanList.java @@ -2,6 +2,6 @@ import com.mojang.authlib.GameProfile; -public interface ChatUserBanList extends ChatStoredUserList { +public interface ChatUserBanList extends ChatBanList { boolean isBanned(GameProfile gameProfile); } \ No newline at end of file diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatBanList.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatBanList.java index 5a68ee2..5aae073 100644 --- a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatBanList.java +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatBanList.java @@ -1,12 +1,13 @@ package vakiliner.chatcomponentapi.craftbukkit; import java.util.Collection; +import java.util.Date; import org.bukkit.BanList; import vakiliner.chatcomponentapi.base.ChatBanEntry; -import vakiliner.chatcomponentapi.base.ChatStoredUserList; +import vakiliner.chatcomponentapi.base.ChatBanList; import vakiliner.chatcomponentapi.util.ParseCollection; -public abstract class BukkitChatBanList implements ChatStoredUserList { +public abstract class BukkitChatBanList implements ChatBanList { protected final BukkitParser parser; protected final BanList banList; @@ -20,7 +21,11 @@ public BanList getImpl() { } public ChatBanEntry add(String key) { - return this.parser.toChatBanEntry(this.banList.addBan(key, null, null, null)); + return this.add(key, null, null, null); + } + + public ChatBanEntry add(String key, String reason, String source, Date expires) { + return this.parser.toChatBanEntry(this.banList.addBan(key, reason, expires, source)); } public ChatBanEntry get(String key) { diff --git a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatUserBanList.java b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatUserBanList.java index eea934f..c26b81d 100644 --- a/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatUserBanList.java +++ b/craftbukkit/src/main/java/vakiliner/chatcomponentapi/craftbukkit/BukkitChatUserBanList.java @@ -1,5 +1,6 @@ package vakiliner.chatcomponentapi.craftbukkit; +import java.util.Date; import org.bukkit.BanList; import com.mojang.authlib.GameProfile; import vakiliner.chatcomponentapi.base.ChatBanEntry; @@ -14,6 +15,10 @@ public ChatBanEntry add(GameProfile key) { return this.add(key.getName()); } + public ChatBanEntry add(GameProfile key, String reason, String source, Date expires) { + return this.add(key.getName(), reason, source, expires); + } + public ChatBanEntry get(GameProfile key) { return this.get(key.getName()); } diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatIpBanList.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatIpBanList.java index 45dd49a..d723a9c 100644 --- a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatIpBanList.java +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatIpBanList.java @@ -1,6 +1,7 @@ package vakiliner.chatcomponentapi.fabric; import java.net.SocketAddress; +import java.util.Date; import net.minecraft.server.players.IpBanList; import net.minecraft.server.players.IpBanListEntry; import vakiliner.chatcomponentapi.base.ChatBanEntry; @@ -17,6 +18,12 @@ public ChatBanEntry add(String key) { return this.i2o.apply(entry); } + public ChatBanEntry add(String key, String reason, String source, Date expires) { + IpBanListEntry entry = new IpBanListEntry(key, null, source, expires, reason); + this.list.add(entry); + return this.i2o.apply(entry); + } + public ChatBanEntry get(SocketAddress address) { return this.i2o.apply(this.list.get(address)); } diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatUserBanList.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatUserBanList.java index fdafc14..8dcc289 100644 --- a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatUserBanList.java +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricChatUserBanList.java @@ -1,5 +1,6 @@ package vakiliner.chatcomponentapi.fabric; +import java.util.Date; import com.mojang.authlib.GameProfile; import net.minecraft.server.players.UserBanList; import net.minecraft.server.players.UserBanListEntry; @@ -17,6 +18,12 @@ public ChatBanEntry add(GameProfile key) { return this.i2o.apply(entry); } + public ChatBanEntry add(GameProfile key, String reason, String source, Date expires) { + UserBanListEntry entry = new UserBanListEntry(key, null, source, expires, reason); + this.list.add(entry); + return this.i2o.apply(entry); + } + public boolean isBanned(GameProfile gameProfile) { return this.list.isBanned(gameProfile); } diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatIpBanList.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatIpBanList.java index b257ac4..94339d4 100644 --- a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatIpBanList.java +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatIpBanList.java @@ -1,6 +1,7 @@ package vakiliner.chatcomponentapi.forge; import java.net.SocketAddress; +import java.util.Date; import net.minecraft.server.management.IPBanEntry; import net.minecraft.server.management.IPBanList; import vakiliner.chatcomponentapi.base.ChatBanEntry; @@ -17,6 +18,12 @@ public ChatBanEntry add(String key) { return this.i2o.apply(entry); } + public ChatBanEntry add(String key, String reason, String source, Date expires) { + IPBanEntry entry = new IPBanEntry(key, null, source, expires, reason); + this.list.add(entry); + return this.i2o.apply(entry); + } + public ChatBanEntry get(SocketAddress address) { return this.i2o.apply(this.list.get(address)); } diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatUserBanList.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatUserBanList.java index 13c5240..7e99da7 100644 --- a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatUserBanList.java +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeChatUserBanList.java @@ -1,5 +1,6 @@ package vakiliner.chatcomponentapi.forge; +import java.util.Date; import com.mojang.authlib.GameProfile; import net.minecraft.server.management.BanList; import net.minecraft.server.management.ProfileBanEntry; @@ -17,6 +18,12 @@ public ChatBanEntry add(GameProfile key) { return this.i2o.apply(entry); } + public ChatBanEntry add(GameProfile key, String reason, String source, Date expires) { + ProfileBanEntry entry = new ProfileBanEntry(key, null, source, expires, reason); + this.list.add(entry); + return this.i2o.apply(entry); + } + public boolean isBanned(GameProfile gameProfile) { return this.list.isBanned(gameProfile); } From 410074826d46fc0a948f6899a73ab9229096751d Mon Sep 17 00:00:00 2001 From: VAKiliner <119078586+vakiliner@users.noreply.github.com> Date: Wed, 11 Feb 2026 04:06:53 +0300 Subject: [PATCH 19/19] fix: broadcastMessage null uuid for Fabric & Forge --- .../vakiliner/chatcomponentapi/fabric/FabricParser.java | 1 + .../java/vakiliner/chatcomponentapi/forge/ForgeParser.java | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricParser.java b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricParser.java index 97cbaea..dee7896 100644 --- a/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricParser.java +++ b/fabric/src/main/java/vakiliner/chatcomponentapi/fabric/FabricParser.java @@ -74,6 +74,7 @@ public void sendMessage(CommandSource commandSource, ChatComponent component, Ch } public void broadcastMessage(PlayerList playerList, ChatComponent component, ChatMessageType type, UUID uuid) { + if (uuid == null) uuid = Util.NIL_UUID; this.sendMessage(playerList.getServer(), component, type, uuid); playerList.broadcastAll(new ClientboundChatPacket(fabric(component), fabric(type), uuid)); } diff --git a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeParser.java b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeParser.java index 7c6954f..88c1ed2 100644 --- a/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeParser.java +++ b/forge/src/main/java/vakiliner/chatcomponentapi/forge/ForgeParser.java @@ -63,15 +63,16 @@ public boolean supportsFontInStyle() { } public void sendMessage(ICommandSource commandSource, ChatComponent component, ChatMessageType type, UUID uuid) { + if (uuid == null) uuid = Util.NIL_UUID; if (commandSource instanceof ServerPlayerEntity) { - ServerPlayerEntity player = (ServerPlayerEntity) commandSource; - player.sendMessage(forge(component), forge(type), uuid != null ? uuid : Util.NIL_UUID); + ((ServerPlayerEntity) commandSource).sendMessage(forge(component), forge(type), uuid); } else { - commandSource.sendMessage(forge(component, commandSource instanceof MinecraftServer), uuid != null ? uuid : Util.NIL_UUID); + commandSource.sendMessage(forge(component, commandSource instanceof MinecraftServer), uuid); } } public void broadcastMessage(PlayerList playerList, ChatComponent component, ChatMessageType type, UUID uuid) { + if (uuid == null) uuid = Util.NIL_UUID; this.sendMessage(playerList.getServer(), component, type, uuid); playerList.broadcastAll(new SChatPacket(forge(component), forge(type), uuid)); }