diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 0aa48e3..eb720bc 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -15,7 +15,7 @@ jobs:
- uses: actions/setup-java@v2
with:
distribution: 'temurin'
- java-version: 8
+ java-version: 17
- name: Cache maven packages to speed up build
uses: actions/cache@v1
diff --git a/.gitignore b/.gitignore
index 629e03e..d3ee570 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,4 +6,5 @@ target/
.classpath
.project
*.iml
-.theia/
\ No newline at end of file
+.theia/
+run/
\ No newline at end of file
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/pom.xml b/pom.xml
index 3c2ecec..15b379e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,17 +5,18 @@
master
- 1.8
- 1.8
+ 17
+ 17
true
UTF-8
- com.destroystokyo.paper
+ io.papermc.paper
paper-api
- 1.16.5-R0.1-SNAPSHOT
+ 1.18.2-R0.1-SNAPSHOT
+ provided
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..6eeebd9 100644
--- a/src/main/java/pw/kaboom/extras/commands/CommandClearChat.java
+++ b/src/main/java/pw/kaboom/extras/commands/CommandClearChat.java
@@ -1,23 +1,35 @@
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 (int i = 0; i < maxMessages; i++) {
+ clearChatComponent = clearChatComponent
+ .append(Component.newline());
+ }
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
- for (int i = 0; i < maxMessages; ++i) {
- onlinePlayer.sendMessage("");
- }
- onlinePlayer.sendMessage(ChatColor.DARK_GREEN + "The chat has been cleared");
+ onlinePlayer.sendMessage(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 22f1c92..fee7fbc 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;
@@ -30,8 +35,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 0661982..f21fb60 100644
--- a/src/main/java/pw/kaboom/extras/modules/player/PlayerChat.java
+++ b/src/main/java/pw/kaboom/extras/modules/player/PlayerChat.java
@@ -1,30 +1,35 @@
package pw.kaboom.extras.modules.player;
-import java.io.File;
-import java.util.UUID;
-
-import org.bukkit.ChatColor;
+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;
+import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.configuration.file.FileConfiguration;
-import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
-import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.plugin.java.JavaPlugin;
-
import pw.kaboom.extras.Main;
+import java.util.UUID;
+
public final class PlayerChat implements Listener {
private static final FileConfiguration CONFIG = JavaPlugin.getPlugin(Main.class).getConfig();
private static final FileConfiguration PREFIX_CONFIG = JavaPlugin
- .getPlugin(Main.class).getPrefixConfig();
+ .getPlugin(Main.class).getPrefixConfig();
- private static final String OP_TAG = CONFIG.getString("opTag");
- private static final String DEOP_TAG = CONFIG.getString("deOpTag");
+ private static final Component OP_TAG = LegacyComponentSerializer
+ .legacySection().deserialize(CONFIG.getString("opTag", ""));
+ private static final Component DEOP_TAG = LegacyComponentSerializer
+ .legacySection().deserialize(CONFIG.getString("deOpTag", ""));
+ private static final PlayerChatRenderer CHAT_RENDERER = new PlayerChatRenderer();
- @EventHandler
- void onAsyncPlayerChat(final AsyncPlayerChatEvent event) {
- final Player player = event.getPlayer();
+ @EventHandler(priority = EventPriority.HIGHEST)
+ void onAsyncChatEventProcess(final AsyncChatEvent event) {
final UUID playerUuid = event.getPlayer().getUniqueId();
if (PlayerCommand.getCommandMillisList().get(playerUuid) != null) {
@@ -37,25 +42,39 @@ public final class PlayerChat implements Listener {
}
PlayerCommand.getCommandMillisList().put(playerUuid, System.currentTimeMillis());
+ }
- if (event.isCancelled()) {
- return;
+ @EventHandler(priority = EventPriority.MONITOR)
+ void onAsyncChatEventRenderer(final AsyncChatEvent event) {
+ event.renderer(CHAT_RENDERER);
+ }
+
+ public static class PlayerChatRenderer implements ChatRenderer {
+
+ @Override
+ 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 ?
+ ((player.isOp()) ? OP_TAG : DEOP_TAG)
+ : LegacyComponentSerializer.legacyAmpersand().deserialize(legacyPrefix)
+ .append(Component.space());
+
+ final String message = ((TextComponent) component).content();
+
+ newComponent = newComponent
+ .append(prefix)
+ .append(displayName)
+ .append(Component.text(":"))
+ .append(Component.space());
+
+ return newComponent.append(LegacyComponentSerializer
+ .legacyAmpersand()
+ .deserialize(message)
+ );
}
-
- final String name = player.getDisplayName().toString();
- String prefix = PREFIX_CONFIG.getString(player.getUniqueId().toString());
-
- if (prefix != null) {
- prefix = ChatColor.translateAlternateColorCodes('&', prefix + " " + ChatColor.RESET);
- } else if (event.getPlayer().isOp()) {
- prefix = OP_TAG;
- } else {
- prefix = DEOP_TAG;
- }
-
- event.setFormat(prefix + name + ChatColor.RESET + ": " + ChatColor.RESET + "%2$s");
- event.setMessage(
- ChatColor.translateAlternateColorCodes('&', event.getMessage())
- );
}
}
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