From 04b8ce1c3c850ca03b77bb88324425e262427c22 Mon Sep 17 00:00:00 2001 From: Allink Date: Sat, 21 May 2022 20:28:42 +0100 Subject: [PATCH] Migrate commands to Adventure, add new commands New additions are Adventure-centric. --- README.md | 38 +++++++++--------- src/main/java/pw/kaboom/extras/Main.java | 11 +++-- .../extras/commands/CommandBroadcastMM.java | 28 +++++++++++++ .../commands/CommandBroadcastVanilla.java | 14 +++++-- .../extras/commands/CommandClearChat.java | 25 ++++++++---- .../extras/commands/CommandConsole.java | 18 ++++++--- .../commands/CommandDestroyEntities.java | 12 ++++-- .../extras/commands/CommandEnchantAll.java | 16 ++++++-- .../extras/commands/CommandGetJSON.java | 39 ++++++++++++++++++ .../extras/commands/CommandJumpscare.java | 24 +++++++---- .../kaboom/extras/commands/CommandKaboom.java | 14 ++++--- .../kaboom/extras/commands/CommandPing.java | 31 ++++++++------ .../kaboom/extras/commands/CommandPrefix.java | 40 +++++++++++-------- .../extras/commands/CommandPumpkin.java | 13 ++++-- .../extras/commands/CommandServerInfo.java | 25 +++++++----- .../kaboom/extras/commands/CommandSkin.java | 20 +++++++--- .../kaboom/extras/commands/CommandSpawn.java | 18 ++++++--- .../kaboom/extras/commands/CommandSpidey.java | 10 ++++- .../extras/commands/CommandTellraw.java | 21 +++++++--- .../extras/commands/CommandUsername.java | 34 +++++++++++----- .../extras/modules/player/PlayerChat.java | 10 ++--- src/main/resources/plugin.yml | 14 +++++-- 22 files changed, 337 insertions(+), 138 deletions(-) create mode 100644 src/main/java/pw/kaboom/extras/commands/CommandBroadcastMM.java create mode 100644 src/main/java/pw/kaboom/extras/commands/CommandGetJSON.java diff --git a/README.md b/README.md index 2a7e08a..6132262 100644 --- a/README.md +++ b/README.md @@ -4,24 +4,26 @@ Extras is a Bukkit plugin that that adds extra functionality to the Kaboom serve ## Commands -| Command | Aliases | Permission | Description | -| ------- | ----- | ---------- | ----------- | -|/broadcastraw | /bcraw, /tellraw | extras.broadcastraw | Broadcasts raw text to the server| -|/broadcastvanilla | /bcv | extras.broadcastvanilla | Broadcasts text in vanilla style| -|/clearchat | /cc | extras.clearchat | Clears messages from the chat| -|/console | | extras.console | Broadcasts a message as the console| -|/destroyentities | /de | extras.destroyentities | Destroys all entities in every world| -|/enchantall | | extras.enchantall | Adds every enchantment to a held item| -|/jumpscare | /scare | extras.jumpscare | Scares a player| -|/kaboom | | extras.kaboom | I wonder...| -|/ping | /ms, /delay | extras.ping | Gets your ping| -|/prefix | /rank, /tag | extras.prefix | Changes your tag| -|/pumpkin | | extras.pumpkin | Places a pumpkin on a player's head| -|/serverinfo | /specs | extras.serverinfo | Shows detailed server information| -|/skin | | extras.skin | Changes your skin| -|/spawn | | extras.spawn | Teleports you to spawn| -|/spidey | | extras.spidey | Annoying little spider...| -|/username | | extras.username | Changes your username on the server| +| Command | Aliases | Permission | Description | +|-----------------------|----------------------------------------------|-----------------------------|---------------------------------------------------------------| +| /broadcastminimessage | /broadcastmm, /bcmm | extras.broadcastminimessage | Broadcasts a deserialized MiniMessage component | +| /broadcastraw | /bcraw, /tellraw | extras.broadcastraw | Broadcasts raw text to the server | +| /broadcastvanilla | /bcv | extras.broadcastvanilla | Broadcasts text in vanilla style | +| /clearchat | /cc | extras.clearchat | Clears messages from the chat | +| /console | | extras.console | Broadcasts a message as the console | +| /destroyentities | /de | extras.destroyentities | Destroys all entities in every world | +| /enchantall | | extras.enchantall | Adds every enchantment to a held item | +| /getjson | /gj, /gmm | extras.getjson | Gets the JSON of a deserialized MiniMessage/legacy component | +| /jumpscare | /scare | extras.jumpscare | Scares a player | +| /kaboom | | extras.kaboom | I wonder... | +| /ping | /ms, /delay | extras.ping | Gets your ping | +| /prefix | /rank, /tag | extras.prefix | Changes your tag | +| /pumpkin | | extras.pumpkin | Places a pumpkin on a player's head | +| /serverinfo | /specs | extras.serverinfo | Shows detailed server information | +| /skin | | extras.skin | Changes your skin | +| /spawn | | extras.spawn | Teleports you to spawn | +| /spidey | | extras.spidey | Annoying little spider... | +| /username | | extras.username | Changes your username on the server | ## Compiling diff --git a/src/main/java/pw/kaboom/extras/Main.java b/src/main/java/pw/kaboom/extras/Main.java index 3df1071..ee0140e 100644 --- a/src/main/java/pw/kaboom/extras/Main.java +++ b/src/main/java/pw/kaboom/extras/Main.java @@ -1,20 +1,18 @@ package pw.kaboom.extras; -import java.io.File; -import java.util.Collections; - import org.bukkit.WorldCreator; import org.bukkit.WorldType; import org.bukkit.block.BlockFace; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.java.JavaPlugin; - +import pw.kaboom.extras.commands.CommandBroadcastMM; import pw.kaboom.extras.commands.CommandBroadcastVanilla; import pw.kaboom.extras.commands.CommandClearChat; import pw.kaboom.extras.commands.CommandConsole; import pw.kaboom.extras.commands.CommandDestroyEntities; import pw.kaboom.extras.commands.CommandEnchantAll; +import pw.kaboom.extras.commands.CommandGetJSON; import pw.kaboom.extras.commands.CommandJumpscare; import pw.kaboom.extras.commands.CommandKaboom; import pw.kaboom.extras.commands.CommandPing; @@ -44,6 +42,9 @@ import pw.kaboom.extras.modules.server.ServerGameRule; import pw.kaboom.extras.modules.server.ServerTabComplete; import pw.kaboom.extras.modules.server.ServerTick; +import java.io.File; +import java.util.Collections; + public final class Main extends JavaPlugin { private File prefixConfigFile; private FileConfiguration prefixConfig; @@ -72,11 +73,13 @@ public final class Main extends JavaPlugin { prefixConfig = YamlConfiguration.loadConfiguration(prefixConfigFile); /* Commands */ + this.getCommand("broadcastminimessage").setExecutor(new CommandBroadcastMM()); this.getCommand("broadcastvanilla").setExecutor(new CommandBroadcastVanilla()); this.getCommand("clearchat").setExecutor(new CommandClearChat()); this.getCommand("console").setExecutor(new CommandConsole()); this.getCommand("destroyentities").setExecutor(new CommandDestroyEntities()); this.getCommand("enchantall").setExecutor(new CommandEnchantAll()); + this.getCommand("getjson").setExecutor(new CommandGetJSON()); this.getCommand("jumpscare").setExecutor(new CommandJumpscare()); this.getCommand("kaboom").setExecutor(new CommandKaboom()); this.getCommand("ping").setExecutor(new CommandPing()); diff --git a/src/main/java/pw/kaboom/extras/commands/CommandBroadcastMM.java b/src/main/java/pw/kaboom/extras/commands/CommandBroadcastMM.java new file mode 100644 index 0000000..036e35f --- /dev/null +++ b/src/main/java/pw/kaboom/extras/commands/CommandBroadcastMM.java @@ -0,0 +1,28 @@ +package pw.kaboom.extras.commands; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +import javax.annotation.Nonnull; + +public class CommandBroadcastMM implements CommandExecutor { + private static final MiniMessage MINI_MESSAGE = MiniMessage.miniMessage(); + + public boolean onCommand(final @Nonnull CommandSender sender, + final @Nonnull Command command, + final @Nonnull String label, + final String[] args) { + if (args.length == 0) { + sender.sendMessage(Component + .text("Usage: /" + label + " ", NamedTextColor.RED)); + } else { + Bukkit.broadcast(MINI_MESSAGE.deserialize(String.join(" ", args))); + } + return true; + } +} diff --git a/src/main/java/pw/kaboom/extras/commands/CommandBroadcastVanilla.java b/src/main/java/pw/kaboom/extras/commands/CommandBroadcastVanilla.java index 9ab0576..d7f046e 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandBroadcastVanilla.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandBroadcastVanilla.java @@ -1,18 +1,26 @@ package pw.kaboom.extras.commands; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; +import javax.annotation.Nonnull; + public final class CommandBroadcastVanilla implements CommandExecutor { - public boolean onCommand(final CommandSender sender, final Command command, final String label, + public boolean onCommand(final @Nonnull CommandSender sender, + final @Nonnull Command command, + final @Nonnull String label, final String[] args) { if (args.length == 0) { - sender.sendMessage(ChatColor.RED + "Usage: /" + label + " "); + sender.sendMessage(Component + .text("Usage: /" + label + " ", + NamedTextColor.RED)); } else { Command.broadcastCommandMessage(sender, ChatColor.translateAlternateColorCodes( - '&', String.join(" ", args))); + '&', String.join(" ", args))); } return true; } diff --git a/src/main/java/pw/kaboom/extras/commands/CommandClearChat.java b/src/main/java/pw/kaboom/extras/commands/CommandClearChat.java index bcb1c59..6f128bf 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandClearChat.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandClearChat.java @@ -1,23 +1,32 @@ package pw.kaboom.extras.commands; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; + +import javax.annotation.Nonnull; public final class CommandClearChat implements CommandExecutor { - public boolean onCommand(final CommandSender sender, final Command command, final String label, + public boolean onCommand(final @Nonnull CommandSender sender, + final @Nonnull Command command, + final @Nonnull String label, final String[] args) { final int maxMessages = 100; + Component clearChatComponent = Component.empty(); - for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { - for (int i = 0; i < maxMessages; ++i) { - onlinePlayer.sendMessage(""); - } - onlinePlayer.sendMessage(ChatColor.DARK_GREEN + "The chat has been cleared"); + for (int i = 0; i < maxMessages; i++) { + clearChatComponent = clearChatComponent + .append(Component.newline()); } + + Bukkit.getServer().broadcast(clearChatComponent + .append(Component + .text("The chat has been cleared", + NamedTextColor.DARK_GREEN))); + return true; } } diff --git a/src/main/java/pw/kaboom/extras/commands/CommandConsole.java b/src/main/java/pw/kaboom/extras/commands/CommandConsole.java index 3e4d1f4..5e75394 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandConsole.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandConsole.java @@ -1,21 +1,29 @@ package pw.kaboom.extras.commands; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; +import javax.annotation.Nonnull; + public final class CommandConsole implements CommandExecutor { - public boolean onCommand(final CommandSender sender, final Command command, final String label, + public boolean onCommand(final @Nonnull CommandSender sender, + final @Nonnull Command command, + final @Nonnull String label, final String[] args) { if (args.length == 0) { - sender.sendMessage(ChatColor.RED + "Usage: /" + label + " "); + sender.sendMessage(Component + .text("Usage: /" + label + " ", + NamedTextColor.RED)); } else { Bukkit.dispatchCommand( - Bukkit.getConsoleSender(), - "minecraft:say " + ChatColor.translateAlternateColorCodes( - '&', String.join(" ", args)) + Bukkit.getConsoleSender(), + "minecraft:say " + ChatColor.translateAlternateColorCodes( + '&', String.join(" ", args)) ); } return true; diff --git a/src/main/java/pw/kaboom/extras/commands/CommandDestroyEntities.java b/src/main/java/pw/kaboom/extras/commands/CommandDestroyEntities.java index ca112a6..5294f24 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandDestroyEntities.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandDestroyEntities.java @@ -1,5 +1,6 @@ package pw.kaboom.extras.commands; +import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.command.Command; @@ -8,9 +9,13 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; +import javax.annotation.Nonnull; + public final class CommandDestroyEntities implements CommandExecutor { @Override - public boolean onCommand(final CommandSender sender, final Command command, final String label, + public boolean onCommand(final @Nonnull CommandSender sender, + final @Nonnull Command command, + final @Nonnull String label, final String[] args) { int entityCount = 0; int worldCount = 0; @@ -25,8 +30,9 @@ public final class CommandDestroyEntities implements CommandExecutor { worldCount++; } - sender.sendMessage("Successfully destroyed " + entityCount + " entities in " - + worldCount + " worlds"); + sender.sendMessage(Component.text( + "Successfully destroyed " + entityCount + " entities in " + + worldCount + " worlds")); return true; } } diff --git a/src/main/java/pw/kaboom/extras/commands/CommandEnchantAll.java b/src/main/java/pw/kaboom/extras/commands/CommandEnchantAll.java index 48fcb6e..4b20d1a 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandEnchantAll.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandEnchantAll.java @@ -1,5 +1,6 @@ package pw.kaboom.extras.commands; +import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; @@ -9,22 +10,29 @@ import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import javax.annotation.Nonnull; + public final class CommandEnchantAll implements CommandExecutor { - public boolean onCommand(final CommandSender sender, final Command command, final String label, + public boolean onCommand(final @Nonnull CommandSender sender, + final @Nonnull Command command, + final @Nonnull String label, final String[] args) { if (sender instanceof ConsoleCommandSender) { - sender.sendMessage("Command has to be run by a player"); + sender.sendMessage(Component + .text("Command has to be run by a player")); } else { final Player player = (Player) sender; final ItemStack item = player.getInventory().getItemInMainHand(); if (Material.AIR.equals(item.getType())) { - player.sendMessage("Please hold an item in your hand to enchant it"); + player.sendMessage(Component + .text("Please hold an item in your hand to enchant it")); } else { for (Enchantment enchantment : Enchantment.values()) { item.addUnsafeEnchantment(enchantment, Short.MAX_VALUE); } - player.sendMessage("I killed Martin."); + player.sendMessage(Component + .text("I killed Martin.")); } } return true; diff --git a/src/main/java/pw/kaboom/extras/commands/CommandGetJSON.java b/src/main/java/pw/kaboom/extras/commands/CommandGetJSON.java new file mode 100644 index 0000000..3adac6d --- /dev/null +++ b/src/main/java/pw/kaboom/extras/commands/CommandGetJSON.java @@ -0,0 +1,39 @@ +package pw.kaboom.extras.commands; + +import javax.annotation.Nonnull; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +public class CommandGetJSON implements CommandExecutor { + public boolean onCommand(final @Nonnull CommandSender sender, + final @Nonnull Command command, + final @Nonnull String label, + final String[] args) { + if (args.length == 0) { + sender.sendMessage(Component + .text("Usage: /" + label + " ", NamedTextColor.RED)); + } else { + final String message = String.join(" ", args); + Component createdComponent = LegacyComponentSerializer + .legacyAmpersand() + .deserialize(message); + + String asJson = GsonComponentSerializer.gson().serialize(createdComponent); + + Component feedback = Component.empty() + .append(Component.text("Your component as JSON (click to copy): ")) + .append(Component.text(asJson, NamedTextColor.GREEN)) + .clickEvent(ClickEvent.copyToClipboard(asJson)); + + sender.sendMessage(feedback); + } + + return true; + } +} \ No newline at end of file diff --git a/src/main/java/pw/kaboom/extras/commands/CommandJumpscare.java b/src/main/java/pw/kaboom/extras/commands/CommandJumpscare.java index 615bd51..f8c7aa1 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandJumpscare.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandJumpscare.java @@ -1,7 +1,8 @@ package pw.kaboom.extras.commands; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.Particle; import org.bukkit.Sound; import org.bukkit.command.Command; @@ -9,6 +10,8 @@ import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import javax.annotation.Nonnull; + public final class CommandJumpscare implements CommandExecutor { private void createJumpscare(final Player player) { final int count = 4; @@ -20,24 +23,31 @@ public final class CommandJumpscare implements CommandExecutor { } } - public boolean onCommand(final CommandSender sender, final Command command, final String label, + public boolean onCommand(final @Nonnull CommandSender sender, + final @Nonnull Command command, + final @Nonnull String label, final String[] args) { if (args.length == 0) { - sender.sendMessage(ChatColor.RED + "Usage: /" + label + " "); + sender.sendMessage(Component + .text("Usage: /" + label + " ", + NamedTextColor.RED)); } else { if (args[0].equals("*") || args[0].equals("**")) { for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { createJumpscare(onlinePlayer); } - sender.sendMessage("Successfully created jumpscare for every player"); + sender.sendMessage(Component + .text("Successfully created jumpscare for every player")); } else { final Player target = Bukkit.getPlayer(args[0]); if (target != null) { createJumpscare(target); - sender.sendMessage("Successfully created jumpscare for player \"" - + target.getName() + "\""); + sender.sendMessage(Component + .text("Successfully created jumpscare for player \"" + + target.getName() + "\"")); } else { - sender.sendMessage("Player \"" + args[0] + "\" not found"); + sender.sendMessage(Component + .text("Player \"" + args[0] + "\" not found")); } } } diff --git a/src/main/java/pw/kaboom/extras/commands/CommandKaboom.java b/src/main/java/pw/kaboom/extras/commands/CommandKaboom.java index 2428cdc..1f9d538 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandKaboom.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandKaboom.java @@ -1,7 +1,6 @@ package pw.kaboom.extras.commands; -import java.util.concurrent.ThreadLocalRandom; - +import net.kyori.adventure.text.Component; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; @@ -11,9 +10,14 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import javax.annotation.Nonnull; +import java.util.concurrent.ThreadLocalRandom; + public final class CommandKaboom implements CommandExecutor { - public boolean onCommand(final CommandSender sender, final Command command, final String label, + public boolean onCommand(final @Nonnull CommandSender sender, + final @Nonnull Command command, + final @Nonnull String label, final String[] args) { final Player player = (Player) sender; boolean explode = ThreadLocalRandom.current().nextBoolean(); @@ -38,10 +42,10 @@ public final class CommandKaboom implements CommandExecutor { explodeLocation.getBlock().setType(Material.LAVA); } - player.sendMessage("Forgive me :c"); + player.sendMessage(Component.text("Forgive me :c")); } else { player.getInventory().setItemInMainHand(new ItemStack(Material.CAKE)); - player.sendMessage("Have a nice day :)"); + player.sendMessage(Component.text("Have a nice day :)")); } return true; } diff --git a/src/main/java/pw/kaboom/extras/commands/CommandPing.java b/src/main/java/pw/kaboom/extras/commands/CommandPing.java index 23699cd..b4fd8b1 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandPing.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandPing.java @@ -1,15 +1,20 @@ package pw.kaboom.extras.commands; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import javax.annotation.Nonnull; + public final class CommandPing implements CommandExecutor { - public boolean onCommand(final CommandSender sender, final Command command, final String label, + public boolean onCommand(final @Nonnull CommandSender sender, + final @Nonnull Command command, + final @Nonnull String label, final String[] args) { Player target; @@ -20,39 +25,39 @@ public final class CommandPing implements CommandExecutor { } if (target == null) { - sender.sendMessage("Player \"" + args[0] + "\" not found"); + sender.sendMessage(Component + .text("Player \"" + args[0] + "\" not found")); return true; } final int ping = target.spigot().getPing(); final int d = (int) Math.floor((float) ping / 100); - ChatColor highlighting = ChatColor.WHITE; + NamedTextColor highlighting = NamedTextColor.WHITE; switch (d) { case 0: - highlighting = ChatColor.GREEN; + highlighting = NamedTextColor.GREEN; break; case 1: case 2: case 3: case 4: - highlighting = ChatColor.YELLOW; + highlighting = NamedTextColor.YELLOW; break; case 5: - highlighting = ChatColor.RED; + highlighting = NamedTextColor.RED; break; default: if (d > 5) { - highlighting = ChatColor.DARK_RED; + highlighting = NamedTextColor.DARK_RED; } break; } - if (args.length == 0) { - sender.sendMessage("Your ping is " + highlighting + ping + "ms."); - } else { - sender.sendMessage(target.getName() + "'s ping is " + highlighting + ping + "ms."); - } + sender.sendMessage(Component.text((args.length == 0 ? + "Your" : target.getName() + "'s") + " ping is ") + .append(Component.text(ping, highlighting)) + .append(Component.text("ms.", highlighting))); return true; } } diff --git a/src/main/java/pw/kaboom/extras/commands/CommandPrefix.java b/src/main/java/pw/kaboom/extras/commands/CommandPrefix.java index 9988706..b33163d 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandPrefix.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandPrefix.java @@ -1,49 +1,57 @@ package pw.kaboom.extras.commands; -import java.io.File; - -import org.bukkit.ChatColor; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; - import pw.kaboom.extras.Main; +import javax.annotation.Nonnull; +import java.io.File; + public final class CommandPrefix implements CommandExecutor { private static final File PREFIX_CONFIG_FILE = JavaPlugin - .getPlugin(Main.class).getPrefixConfigFile(); + .getPlugin(Main.class).getPrefixConfigFile(); private static final FileConfiguration PREFIX_CONFIG = JavaPlugin - .getPlugin(Main.class).getPrefixConfig(); + .getPlugin(Main.class).getPrefixConfig(); - public boolean onCommand(final CommandSender sender, final Command cmd, final String label, + public boolean onCommand(final @Nonnull CommandSender sender, + final @Nonnull Command cmd, + final @Nonnull String label, final String[] args) { if (sender instanceof ConsoleCommandSender) { - sender.sendMessage("Command has to be run by a player"); + sender.sendMessage(Component + .text("Command has to be run by a player")); } else { final Player player = (Player) sender; try { if (args.length == 0) { - player.sendMessage(ChatColor.RED + "Usage: /" + label + " "); + player.sendMessage(Component + .text("Usage: /" + label + " ", + NamedTextColor.RED)); } else if ("off".equalsIgnoreCase(args[0])) { PREFIX_CONFIG.set(player.getUniqueId().toString(), null); PREFIX_CONFIG.save(PREFIX_CONFIG_FILE); - player.sendMessage("You no longer have a tag"); + player.sendMessage(Component + .text("You no longer have a tag")); } else { PREFIX_CONFIG.set(player.getUniqueId().toString(), String.join(" ", args)); PREFIX_CONFIG.save(PREFIX_CONFIG_FILE); - player.sendMessage("You now have the tag: " - + ChatColor.translateAlternateColorCodes( - '&', String.join(" ", args))); + player.sendMessage(Component.text("You now have the tag: ") + .append(LegacyComponentSerializer.legacyAmpersand() + .deserialize(String.join(" ", args)))); } } catch (Exception exception) { - player.sendMessage("Something went wrong while saving the prefix. " - + "Please check console."); + player.sendMessage(Component + .text("Something went wrong while saving the prefix. " + + "Please check console.")); exception.printStackTrace(); } } diff --git a/src/main/java/pw/kaboom/extras/commands/CommandPumpkin.java b/src/main/java/pw/kaboom/extras/commands/CommandPumpkin.java index 3ca82d8..668d4fd 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandPumpkin.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandPumpkin.java @@ -1,7 +1,8 @@ package pw.kaboom.extras.commands; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; @@ -9,15 +10,21 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import javax.annotation.Nonnull; + public final class CommandPumpkin implements CommandExecutor { private void placePumpkin(final Player player) { player.getInventory().setHelmet(new ItemStack(Material.CARVED_PUMPKIN)); } - public boolean onCommand(final CommandSender sender, final Command command, final String label, + public boolean onCommand(final @Nonnull CommandSender sender, + final @Nonnull Command command, + final @Nonnull String label, final String[] args) { if (args.length == 0) { - sender.sendMessage(ChatColor.RED + "Usage: /" + label + " "); + sender.sendMessage(Component + .text("Usage: /" + label + " ", + NamedTextColor.RED)); } else { if (args[0].equals("*") || args[0].equals("**")) { for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { diff --git a/src/main/java/pw/kaboom/extras/commands/CommandServerInfo.java b/src/main/java/pw/kaboom/extras/commands/CommandServerInfo.java index 995e9a2..0348054 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandServerInfo.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandServerInfo.java @@ -1,32 +1,35 @@ package pw.kaboom.extras.commands; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +import javax.annotation.Nonnull; import java.io.BufferedReader; import java.io.InputStreamReader; import java.lang.management.ManagementFactory; import java.net.InetAddress; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; - public final class CommandServerInfo implements CommandExecutor { private void sendInfoMessage(final CommandSender target, final String description, final String value) { target.sendMessage( - ChatColor.GRAY + description + ": " - + ChatColor.WHITE + value - ); + Component.text(description, NamedTextColor.GRAY) + .append(Component.text(": " + value, NamedTextColor.WHITE))); } - public boolean onCommand(final CommandSender sender, final Command command, final String label, + public boolean onCommand(final @Nonnull CommandSender sender, + final @Nonnull Command command, + final @Nonnull String label, final String[] args) { try { sendInfoMessage(sender, "Hostname", - InetAddress.getLocalHost().getHostName() + InetAddress.getLocalHost().getHostName() ); sendInfoMessage(sender, "IP address", - InetAddress.getLocalHost().getHostAddress() + InetAddress.getLocalHost().getHostAddress() ); } catch (Exception ignored) { } diff --git a/src/main/java/pw/kaboom/extras/commands/CommandSkin.java b/src/main/java/pw/kaboom/extras/commands/CommandSkin.java index 955a19e..ad71926 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandSkin.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandSkin.java @@ -1,31 +1,39 @@ package pw.kaboom.extras.commands; -import org.bukkit.ChatColor; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; 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 pw.kaboom.extras.helpers.SkinDownloader; +import javax.annotation.Nonnull; + public final class CommandSkin implements CommandExecutor { private long millis; @Override - public boolean onCommand(final CommandSender sender, final Command command, final String label, + public boolean onCommand(final @Nonnull CommandSender sender, + final @Nonnull Command command, + final @Nonnull String label, final String[] args) { if (sender instanceof ConsoleCommandSender) { - sender.sendMessage("Command has to be run by a player"); + sender.sendMessage(Component + .text("Command has to be run by a player")); } else { final Player player = (Player) sender; final long millisDifference = System.currentTimeMillis() - millis; if (args.length == 0) { - player.sendMessage(ChatColor.RED + "Usage: /" + label + " "); + player.sendMessage(Component + .text("Usage: /" + label + " ", + NamedTextColor.RED)); } else if (millisDifference <= 2000) { - player.sendMessage("Please wait a few seconds before changing your skin"); + player.sendMessage(Component + .text("Please wait a few seconds before changing your skin")); } else { final String name = args[0]; final boolean shouldSendMessage = true; diff --git a/src/main/java/pw/kaboom/extras/commands/CommandSpawn.java b/src/main/java/pw/kaboom/extras/commands/CommandSpawn.java index 71818d5..6cd00c3 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandSpawn.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandSpawn.java @@ -1,5 +1,6 @@ package pw.kaboom.extras.commands; +import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; @@ -11,20 +12,26 @@ import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; +import javax.annotation.Nonnull; + public final class CommandSpawn implements CommandExecutor { - public boolean onCommand(final CommandSender sender, final Command command, final String label, + public boolean onCommand(final @Nonnull CommandSender sender, + final @Nonnull Command command, + final @Nonnull String label, final String[] args) { if (sender instanceof ConsoleCommandSender) { - sender.sendMessage("Command has to be run by a player"); + sender.sendMessage(Component + .text("Command has to be run by a player")); } else { final Player player = (Player) sender; - final World world = Bukkit.getWorld("world"); + final World defaultWorld = Bukkit.getWorld("world"); + final World world = (defaultWorld == null) ? Bukkit.getWorlds().get(0) : defaultWorld; final Location spawnLocation = world.getSpawnLocation(); final int maxWorldHeight = 256; for (double y = spawnLocation.getY(); y <= maxWorldHeight; y++) { final Location yLocation = new Location(world, spawnLocation.getX(), y, - spawnLocation.getZ()); + spawnLocation.getZ()); final Block coordBlock = world.getBlockAt(yLocation); if (!coordBlock.getType().isSolid() @@ -34,7 +41,8 @@ public final class CommandSpawn implements CommandExecutor { } } - player.sendMessage("Successfully moved to spawn"); + player.sendMessage(Component + .text("Successfully moved to spawn")); } return true; } diff --git a/src/main/java/pw/kaboom/extras/commands/CommandSpidey.java b/src/main/java/pw/kaboom/extras/commands/CommandSpidey.java index ab3a3b7..af47569 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandSpidey.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandSpidey.java @@ -1,5 +1,6 @@ package pw.kaboom.extras.commands; +import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.command.Command; @@ -10,11 +11,16 @@ import org.bukkit.entity.Player; import org.bukkit.util.BlockIterator; import org.bukkit.util.Vector; +import javax.annotation.Nonnull; + public final class CommandSpidey implements CommandExecutor { - public boolean onCommand(final CommandSender sender, final Command command, final String label, + public boolean onCommand(final @Nonnull CommandSender sender, + final @Nonnull Command command, + final @Nonnull String label, final String[] args) { if (sender instanceof ConsoleCommandSender) { - sender.sendMessage("Command has to be run by a player"); + sender.sendMessage(Component + .text("Command has to be run by a player")); } else { final Player player = (Player) sender; final World world = player.getWorld(); diff --git a/src/main/java/pw/kaboom/extras/commands/CommandTellraw.java b/src/main/java/pw/kaboom/extras/commands/CommandTellraw.java index c00fbf7..28b5bb1 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandTellraw.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandTellraw.java @@ -1,21 +1,30 @@ package pw.kaboom.extras.commands; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import javax.annotation.Nonnull; + public final class CommandTellraw implements CommandExecutor { - public boolean onCommand(final CommandSender sender, final Command command, final String label, + public boolean onCommand(final @Nonnull CommandSender sender, + final @Nonnull Command command, + final @Nonnull String label, final String[] args) { if (args.length == 0) { - sender.sendMessage(ChatColor.RED + "Usage: /" + label + " "); + sender.sendMessage(Component + .text("Usage: /" + label + " ", NamedTextColor.RED)); } else { - for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { - onlinePlayer.sendMessage(ChatColor.translateAlternateColorCodes( - '&', String.join(" ", args))); + final Component message = LegacyComponentSerializer.legacyAmpersand() + .deserialize(String.join(" ", args)); + + for (Player onlinePlayer: Bukkit.getOnlinePlayers()) { + onlinePlayer.sendMessage(message); } } return true; diff --git a/src/main/java/pw/kaboom/extras/commands/CommandUsername.java b/src/main/java/pw/kaboom/extras/commands/CommandUsername.java index 2188e02..b3d554e 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandUsername.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandUsername.java @@ -1,5 +1,8 @@ package pw.kaboom.extras.commands; +import com.destroystokyo.paper.profile.PlayerProfile; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.Command; @@ -8,47 +11,56 @@ import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; -import com.destroystokyo.paper.profile.PlayerProfile; +import javax.annotation.Nonnull; public final class CommandUsername implements CommandExecutor { private long millis; @Override - public boolean onCommand(final CommandSender sender, final Command command, final String label, + public boolean onCommand(final @Nonnull CommandSender sender, + final @Nonnull Command command, + final @Nonnull String label, final String[] args) { if (sender instanceof ConsoleCommandSender) { - sender.sendMessage("Command has to be run by a player"); + sender.sendMessage(Component + .text("Command has to be run by a player")); } else { final Player player = (Player) sender; final String nameColor = ChatColor.translateAlternateColorCodes( - '&', String.join(" ", args)); + '&', String.join(" ", args)); final String name = nameColor.substring(0, Math.min(16, nameColor.length())); final long millisDifference = System.currentTimeMillis() - millis; if (args.length == 0) { - player.sendMessage(ChatColor.RED + "Usage: /" + label + " "); + player.sendMessage(Component + .text("Usage: /" + label + " ", + NamedTextColor.RED)); } else if (name.equals(player.getName())) { - player.sendMessage("You already have the username \"" + name + "\""); + player.sendMessage(Component + .text("You already have the username \"" + name + "\"")); } else if (millisDifference <= 2000) { - player.sendMessage("Please wait a few seconds before changing your username"); + player.sendMessage(Component + .text("Please wait a few seconds before changing your username.")); } else { - if (Bukkit.getPlayer(name) != null - && Bukkit.getPlayer(name).isOnline()) { - player.sendMessage("A player with that username is already logged in"); + if (Bukkit.getPlayer(name) != null) { + player.sendMessage(Component + .text("A player with that username is already logged in.")); return true; } final PlayerProfile profile = player.getPlayerProfile(); + //FIXME Marked for removal profile.setName(name); player.setPlayerProfile(profile); millis = System.currentTimeMillis(); - player.sendMessage("Successfully set your username to \"" + name + "\""); + player.sendMessage(Component + .text("Successfully set your username to \"" + name + "\"")); } } return true; diff --git a/src/main/java/pw/kaboom/extras/modules/player/PlayerChat.java b/src/main/java/pw/kaboom/extras/modules/player/PlayerChat.java index 9f9c76d..f21fb60 100644 --- a/src/main/java/pw/kaboom/extras/modules/player/PlayerChat.java +++ b/src/main/java/pw/kaboom/extras/modules/player/PlayerChat.java @@ -2,6 +2,7 @@ package pw.kaboom.extras.modules.player; import io.papermc.paper.chat.ChatRenderer; import io.papermc.paper.event.player.AsyncChatEvent; +import javax.annotation.Nonnull; import net.kyori.adventure.audience.Audience; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; @@ -12,7 +13,6 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin; -import org.jetbrains.annotations.NotNull; import pw.kaboom.extras.Main; import java.util.UUID; @@ -52,10 +52,10 @@ public final class PlayerChat implements Listener { public static class PlayerChatRenderer implements ChatRenderer { @Override - public @NotNull Component render(@NotNull Player player, - @NotNull Component displayName, - @NotNull Component component, - @NotNull Audience audience) { + public @Nonnull Component render(@Nonnull Player player, + @Nonnull Component displayName, + @Nonnull Component component, + @Nonnull Audience audience) { Component newComponent = Component.empty(); final String legacyPrefix = PREFIX_CONFIG.getString(player.getUniqueId().toString()); final Component prefix = legacyPrefix == null ? diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index e16ae80..46a382b 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -5,12 +5,16 @@ api-version: 1.13 version: master commands: + broadcastminimessage: + aliases: [ broadcastmm, bcmm ] + description: Broadcasts a deserialized MiniMessage component + permission: extras.broadcastminimessage broadcastraw: - aliases: [bcraw, tellraw] + aliases: [ bcraw, tellraw ] description: Broadcasts raw text to the server permission: extras.broadcastraw broadcastvanilla: - aliases: [bcv] + aliases: [ bcv ] description: Broadcasts text in vanilla style permission: extras.broadcastvanilla clearchat: @@ -27,6 +31,10 @@ commands: enchantall: description: Adds every enchantment to a held item permission: extras.enchantall + getjson: + aliases: [ gj, gmm ] + description: Gets the JSON of a deserialized MiniMessage/legacy component + permission: extras.getjson jumpscare: aliases: scare description: Scares a player @@ -60,4 +68,4 @@ commands: permission: extras.spidey username: description: Changes your username on the server - permission: extras.username + permission: extras.username \ No newline at end of file