From d3f55a0451d39ddebb4fbe7f5655fdd653d530a4 Mon Sep 17 00:00:00 2001 From: Allink Date: Sun, 2 Apr 2023 00:47:21 +0100 Subject: [PATCH] Implement /bcv ourselves instead of using the Command class It was broken. --- .../commands/CommandBroadcastVanilla.java | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/main/java/pw/kaboom/extras/commands/CommandBroadcastVanilla.java b/src/main/java/pw/kaboom/extras/commands/CommandBroadcastVanilla.java index 6ea160a..78ea956 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandBroadcastVanilla.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandBroadcastVanilla.java @@ -2,14 +2,23 @@ package pw.kaboom.extras.commands; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; -import org.bukkit.ChatColor; +import net.kyori.adventure.text.format.TextDecoration; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.entity.Player; import javax.annotation.Nonnull; +import java.util.Collection; public final class CommandBroadcastVanilla implements CommandExecutor { + private static final LegacyComponentSerializer LEGACY_COMPONENT_SERIALIZER = + LegacyComponentSerializer + .legacyAmpersand(); + public boolean onCommand(final @Nonnull CommandSender sender, final @Nonnull Command command, final @Nonnull String label, @@ -21,8 +30,29 @@ public final class CommandBroadcastVanilla implements CommandExecutor { return true; } - Command.broadcastCommandMessage(sender, ChatColor.translateAlternateColorCodes( - '&', String.join(" ", args))); + final Component senderName = sender.name(); + final String input = String.join(" ", args); + final Component component = LEGACY_COMPONENT_SERIALIZER.deserialize(input); + final Component broadcastComponent = Component.translatable("chat.type.admin") + .decorate(TextDecoration.ITALIC) + .color(NamedTextColor.GRAY) + .args(senderName, component); + + sender.sendMessage(component); + + final Collection onlinePlayers = Bukkit.getOnlinePlayers(); + + for (final Player onlinePlayer : onlinePlayers) { + if (onlinePlayer.equals(sender)) { + continue; + } + + onlinePlayer.sendMessage(broadcastComponent); + } + + final ConsoleCommandSender consoleCommandSender = Bukkit.getConsoleSender(); + consoleCommandSender.sendMessage(broadcastComponent); + return true; } }