Migrate commands to Adventure, add new commands

New additions are Adventure-centric.
This commit is contained in:
Allink 2022-05-21 20:28:42 +01:00
parent 6bb5f374e3
commit 04b8ce1c3c
No known key found for this signature in database
22 changed files with 337 additions and 138 deletions

View File

@ -4,24 +4,26 @@ Extras is a Bukkit plugin that that adds extra functionality to the Kaboom serve
## Commands ## Commands
| Command | Aliases | Permission | Description | | Command | Aliases | Permission | Description |
| ------- | ----- | ---------- | ----------- | |-----------------------|----------------------------------------------|-----------------------------|---------------------------------------------------------------|
|/broadcastraw | /bcraw, /tellraw | extras.broadcastraw | Broadcasts raw text to the server| | /broadcastminimessage | /broadcastmm, /bcmm | extras.broadcastminimessage | Broadcasts a deserialized MiniMessage component |
|/broadcastvanilla | /bcv | extras.broadcastvanilla | Broadcasts text in vanilla style| | /broadcastraw | /bcraw, /tellraw | extras.broadcastraw | Broadcasts raw text to the server |
|/clearchat | /cc | extras.clearchat | Clears messages from the chat| | /broadcastvanilla | /bcv | extras.broadcastvanilla | Broadcasts text in vanilla style |
|/console | | extras.console | Broadcasts a message as the console| | /clearchat | /cc | extras.clearchat | Clears messages from the chat |
|/destroyentities | /de | extras.destroyentities | Destroys all entities in every world| | /console | | extras.console | Broadcasts a message as the console |
|/enchantall | | extras.enchantall | Adds every enchantment to a held item| | /destroyentities | /de | extras.destroyentities | Destroys all entities in every world |
|/jumpscare | /scare | extras.jumpscare | Scares a player| | /enchantall | | extras.enchantall | Adds every enchantment to a held item |
|/kaboom | | extras.kaboom | I wonder...| | /getjson | /gj, /gmm | extras.getjson | Gets the JSON of a deserialized MiniMessage/legacy component |
|/ping | /ms, /delay | extras.ping | Gets your ping| | /jumpscare | /scare | extras.jumpscare | Scares a player |
|/prefix | /rank, /tag | extras.prefix | Changes your tag| | /kaboom | | extras.kaboom | I wonder... |
|/pumpkin | | extras.pumpkin | Places a pumpkin on a player's head| | /ping | /ms, /delay | extras.ping | Gets your ping |
|/serverinfo | /specs | extras.serverinfo | Shows detailed server information| | /prefix | /rank, /tag | extras.prefix | Changes your tag |
|/skin | | extras.skin | Changes your skin| | /pumpkin | | extras.pumpkin | Places a pumpkin on a player's head |
|/spawn | | extras.spawn | Teleports you to spawn| | /serverinfo | /specs | extras.serverinfo | Shows detailed server information |
|/spidey | | extras.spidey | Annoying little spider...| | /skin | | extras.skin | Changes your skin |
|/username | | extras.username | Changes your username on the server| | /spawn | | extras.spawn | Teleports you to spawn |
| /spidey | | extras.spidey | Annoying little spider... |
| /username | | extras.username | Changes your username on the server |
## Compiling ## Compiling

View File

@ -1,20 +1,18 @@
package pw.kaboom.extras; package pw.kaboom.extras;
import java.io.File;
import java.util.Collections;
import org.bukkit.WorldCreator; import org.bukkit.WorldCreator;
import org.bukkit.WorldType; import org.bukkit.WorldType;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import pw.kaboom.extras.commands.CommandBroadcastMM;
import pw.kaboom.extras.commands.CommandBroadcastVanilla; import pw.kaboom.extras.commands.CommandBroadcastVanilla;
import pw.kaboom.extras.commands.CommandClearChat; import pw.kaboom.extras.commands.CommandClearChat;
import pw.kaboom.extras.commands.CommandConsole; import pw.kaboom.extras.commands.CommandConsole;
import pw.kaboom.extras.commands.CommandDestroyEntities; import pw.kaboom.extras.commands.CommandDestroyEntities;
import pw.kaboom.extras.commands.CommandEnchantAll; import pw.kaboom.extras.commands.CommandEnchantAll;
import pw.kaboom.extras.commands.CommandGetJSON;
import pw.kaboom.extras.commands.CommandJumpscare; import pw.kaboom.extras.commands.CommandJumpscare;
import pw.kaboom.extras.commands.CommandKaboom; import pw.kaboom.extras.commands.CommandKaboom;
import pw.kaboom.extras.commands.CommandPing; 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.ServerTabComplete;
import pw.kaboom.extras.modules.server.ServerTick; import pw.kaboom.extras.modules.server.ServerTick;
import java.io.File;
import java.util.Collections;
public final class Main extends JavaPlugin { public final class Main extends JavaPlugin {
private File prefixConfigFile; private File prefixConfigFile;
private FileConfiguration prefixConfig; private FileConfiguration prefixConfig;
@ -72,11 +73,13 @@ public final class Main extends JavaPlugin {
prefixConfig = YamlConfiguration.loadConfiguration(prefixConfigFile); prefixConfig = YamlConfiguration.loadConfiguration(prefixConfigFile);
/* Commands */ /* Commands */
this.getCommand("broadcastminimessage").setExecutor(new CommandBroadcastMM());
this.getCommand("broadcastvanilla").setExecutor(new CommandBroadcastVanilla()); this.getCommand("broadcastvanilla").setExecutor(new CommandBroadcastVanilla());
this.getCommand("clearchat").setExecutor(new CommandClearChat()); this.getCommand("clearchat").setExecutor(new CommandClearChat());
this.getCommand("console").setExecutor(new CommandConsole()); this.getCommand("console").setExecutor(new CommandConsole());
this.getCommand("destroyentities").setExecutor(new CommandDestroyEntities()); this.getCommand("destroyentities").setExecutor(new CommandDestroyEntities());
this.getCommand("enchantall").setExecutor(new CommandEnchantAll()); this.getCommand("enchantall").setExecutor(new CommandEnchantAll());
this.getCommand("getjson").setExecutor(new CommandGetJSON());
this.getCommand("jumpscare").setExecutor(new CommandJumpscare()); this.getCommand("jumpscare").setExecutor(new CommandJumpscare());
this.getCommand("kaboom").setExecutor(new CommandKaboom()); this.getCommand("kaboom").setExecutor(new CommandKaboom());
this.getCommand("ping").setExecutor(new CommandPing()); this.getCommand("ping").setExecutor(new CommandPing());

View File

@ -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 + " <message ..>", NamedTextColor.RED));
} else {
Bukkit.broadcast(MINI_MESSAGE.deserialize(String.join(" ", args)));
}
return true;
}
}

View File

@ -1,18 +1,26 @@
package pw.kaboom.extras.commands; 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.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import javax.annotation.Nonnull;
public final class CommandBroadcastVanilla implements CommandExecutor { 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) { final String[] args) {
if (args.length == 0) { if (args.length == 0) {
sender.sendMessage(ChatColor.RED + "Usage: /" + label + " <message ..>"); sender.sendMessage(Component
.text("Usage: /" + label + " <message ..>",
NamedTextColor.RED));
} else { } else {
Command.broadcastCommandMessage(sender, ChatColor.translateAlternateColorCodes( Command.broadcastCommandMessage(sender, ChatColor.translateAlternateColorCodes(
'&', String.join(" ", args))); '&', String.join(" ", args)));
} }
return true; return true;
} }

View File

@ -1,23 +1,32 @@
package pw.kaboom.extras.commands; 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.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import javax.annotation.Nonnull;
public final class CommandClearChat implements CommandExecutor { 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 String[] args) {
final int maxMessages = 100; final int maxMessages = 100;
Component clearChatComponent = Component.empty();
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { for (int i = 0; i < maxMessages; i++) {
for (int i = 0; i < maxMessages; ++i) { clearChatComponent = clearChatComponent
onlinePlayer.sendMessage(""); .append(Component.newline());
}
onlinePlayer.sendMessage(ChatColor.DARK_GREEN + "The chat has been cleared");
} }
Bukkit.getServer().broadcast(clearChatComponent
.append(Component
.text("The chat has been cleared",
NamedTextColor.DARK_GREEN)));
return true; return true;
} }
} }

View File

@ -1,21 +1,29 @@
package pw.kaboom.extras.commands; 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.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import javax.annotation.Nonnull;
public final class CommandConsole implements CommandExecutor { 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) { final String[] args) {
if (args.length == 0) { if (args.length == 0) {
sender.sendMessage(ChatColor.RED + "Usage: /" + label + " <message ..>"); sender.sendMessage(Component
.text("Usage: /" + label + " <message ..>",
NamedTextColor.RED));
} else { } else {
Bukkit.dispatchCommand( Bukkit.dispatchCommand(
Bukkit.getConsoleSender(), Bukkit.getConsoleSender(),
"minecraft:say " + ChatColor.translateAlternateColorCodes( "minecraft:say " + ChatColor.translateAlternateColorCodes(
'&', String.join(" ", args)) '&', String.join(" ", args))
); );
} }
return true; return true;

View File

@ -1,5 +1,6 @@
package pw.kaboom.extras.commands; package pw.kaboom.extras.commands;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.command.Command; import org.bukkit.command.Command;
@ -8,9 +9,13 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import javax.annotation.Nonnull;
public final class CommandDestroyEntities implements CommandExecutor { public final class CommandDestroyEntities implements CommandExecutor {
@Override @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) { final String[] args) {
int entityCount = 0; int entityCount = 0;
int worldCount = 0; int worldCount = 0;
@ -25,8 +30,9 @@ public final class CommandDestroyEntities implements CommandExecutor {
worldCount++; worldCount++;
} }
sender.sendMessage("Successfully destroyed " + entityCount + " entities in " sender.sendMessage(Component.text(
+ worldCount + " worlds"); "Successfully destroyed " + entityCount + " entities in "
+ worldCount + " worlds"));
return true; return true;
} }
} }

View File

@ -1,5 +1,6 @@
package pw.kaboom.extras.commands; package pw.kaboom.extras.commands;
import net.kyori.adventure.text.Component;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
@ -9,22 +10,29 @@ import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import javax.annotation.Nonnull;
public final class CommandEnchantAll implements CommandExecutor { 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) { final String[] args) {
if (sender instanceof ConsoleCommandSender) { 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 { } else {
final Player player = (Player) sender; final Player player = (Player) sender;
final ItemStack item = player.getInventory().getItemInMainHand(); final ItemStack item = player.getInventory().getItemInMainHand();
if (Material.AIR.equals(item.getType())) { 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 { } else {
for (Enchantment enchantment : Enchantment.values()) { for (Enchantment enchantment : Enchantment.values()) {
item.addUnsafeEnchantment(enchantment, Short.MAX_VALUE); item.addUnsafeEnchantment(enchantment, Short.MAX_VALUE);
} }
player.sendMessage("I killed Martin."); player.sendMessage(Component
.text("I killed Martin."));
} }
} }
return true; return true;

View File

@ -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 + " <message ..>", 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;
}
}

View File

@ -1,7 +1,8 @@
package pw.kaboom.extras.commands; 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.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Particle; import org.bukkit.Particle;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.command.Command; import org.bukkit.command.Command;
@ -9,6 +10,8 @@ import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import javax.annotation.Nonnull;
public final class CommandJumpscare implements CommandExecutor { public final class CommandJumpscare implements CommandExecutor {
private void createJumpscare(final Player player) { private void createJumpscare(final Player player) {
final int count = 4; 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) { final String[] args) {
if (args.length == 0) { if (args.length == 0) {
sender.sendMessage(ChatColor.RED + "Usage: /" + label + " <player>"); sender.sendMessage(Component
.text("Usage: /" + label + " <player>",
NamedTextColor.RED));
} else { } else {
if (args[0].equals("*") || args[0].equals("**")) { if (args[0].equals("*") || args[0].equals("**")) {
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
createJumpscare(onlinePlayer); createJumpscare(onlinePlayer);
} }
sender.sendMessage("Successfully created jumpscare for every player"); sender.sendMessage(Component
.text("Successfully created jumpscare for every player"));
} else { } else {
final Player target = Bukkit.getPlayer(args[0]); final Player target = Bukkit.getPlayer(args[0]);
if (target != null) { if (target != null) {
createJumpscare(target); createJumpscare(target);
sender.sendMessage("Successfully created jumpscare for player \"" sender.sendMessage(Component
+ target.getName() + "\""); .text("Successfully created jumpscare for player \""
+ target.getName() + "\""));
} else { } else {
sender.sendMessage("Player \"" + args[0] + "\" not found"); sender.sendMessage(Component
.text("Player \"" + args[0] + "\" not found"));
} }
} }
} }

View File

@ -1,7 +1,6 @@
package pw.kaboom.extras.commands; package pw.kaboom.extras.commands;
import java.util.concurrent.ThreadLocalRandom; import net.kyori.adventure.text.Component;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.World; import org.bukkit.World;
@ -11,9 +10,14 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import javax.annotation.Nonnull;
import java.util.concurrent.ThreadLocalRandom;
public final class CommandKaboom implements CommandExecutor { 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 String[] args) {
final Player player = (Player) sender; final Player player = (Player) sender;
boolean explode = ThreadLocalRandom.current().nextBoolean(); boolean explode = ThreadLocalRandom.current().nextBoolean();
@ -38,10 +42,10 @@ public final class CommandKaboom implements CommandExecutor {
explodeLocation.getBlock().setType(Material.LAVA); explodeLocation.getBlock().setType(Material.LAVA);
} }
player.sendMessage("Forgive me :c"); player.sendMessage(Component.text("Forgive me :c"));
} else { } else {
player.getInventory().setItemInMainHand(new ItemStack(Material.CAKE)); player.getInventory().setItemInMainHand(new ItemStack(Material.CAKE));
player.sendMessage("Have a nice day :)"); player.sendMessage(Component.text("Have a nice day :)"));
} }
return true; return true;
} }

View File

@ -1,15 +1,20 @@
package pw.kaboom.extras.commands; 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.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import javax.annotation.Nonnull;
public final class CommandPing implements CommandExecutor { 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) { final String[] args) {
Player target; Player target;
@ -20,39 +25,39 @@ public final class CommandPing implements CommandExecutor {
} }
if (target == null) { if (target == null) {
sender.sendMessage("Player \"" + args[0] + "\" not found"); sender.sendMessage(Component
.text("Player \"" + args[0] + "\" not found"));
return true; return true;
} }
final int ping = target.spigot().getPing(); final int ping = target.spigot().getPing();
final int d = (int) Math.floor((float) ping / 100); final int d = (int) Math.floor((float) ping / 100);
ChatColor highlighting = ChatColor.WHITE; NamedTextColor highlighting = NamedTextColor.WHITE;
switch (d) { switch (d) {
case 0: case 0:
highlighting = ChatColor.GREEN; highlighting = NamedTextColor.GREEN;
break; break;
case 1: case 1:
case 2: case 2:
case 3: case 3:
case 4: case 4:
highlighting = ChatColor.YELLOW; highlighting = NamedTextColor.YELLOW;
break; break;
case 5: case 5:
highlighting = ChatColor.RED; highlighting = NamedTextColor.RED;
break; break;
default: default:
if (d > 5) { if (d > 5) {
highlighting = ChatColor.DARK_RED; highlighting = NamedTextColor.DARK_RED;
} }
break; break;
} }
if (args.length == 0) { sender.sendMessage(Component.text((args.length == 0 ?
sender.sendMessage("Your ping is " + highlighting + ping + "ms."); "Your" : target.getName() + "'s") + " ping is ")
} else { .append(Component.text(ping, highlighting))
sender.sendMessage(target.getName() + "'s ping is " + highlighting + ping + "ms."); .append(Component.text("ms.", highlighting)));
}
return true; return true;
} }
} }

View File

@ -1,49 +1,57 @@
package pw.kaboom.extras.commands; package pw.kaboom.extras.commands;
import java.io.File; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.ChatColor; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender; import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import pw.kaboom.extras.Main; import pw.kaboom.extras.Main;
import javax.annotation.Nonnull;
import java.io.File;
public final class CommandPrefix implements CommandExecutor { public final class CommandPrefix implements CommandExecutor {
private static final File PREFIX_CONFIG_FILE = JavaPlugin private static final File PREFIX_CONFIG_FILE = JavaPlugin
.getPlugin(Main.class).getPrefixConfigFile(); .getPlugin(Main.class).getPrefixConfigFile();
private static final FileConfiguration PREFIX_CONFIG = JavaPlugin 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) { final String[] args) {
if (sender instanceof ConsoleCommandSender) { 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 { } else {
final Player player = (Player) sender; final Player player = (Player) sender;
try { try {
if (args.length == 0) { if (args.length == 0) {
player.sendMessage(ChatColor.RED + "Usage: /" + label + " <prefix|off>"); player.sendMessage(Component
.text("Usage: /" + label + " <prefix|off>",
NamedTextColor.RED));
} else if ("off".equalsIgnoreCase(args[0])) { } else if ("off".equalsIgnoreCase(args[0])) {
PREFIX_CONFIG.set(player.getUniqueId().toString(), null); PREFIX_CONFIG.set(player.getUniqueId().toString(), null);
PREFIX_CONFIG.save(PREFIX_CONFIG_FILE); 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 { } else {
PREFIX_CONFIG.set(player.getUniqueId().toString(), String.join(" ", args)); PREFIX_CONFIG.set(player.getUniqueId().toString(), String.join(" ", args));
PREFIX_CONFIG.save(PREFIX_CONFIG_FILE); PREFIX_CONFIG.save(PREFIX_CONFIG_FILE);
player.sendMessage("You now have the tag: " player.sendMessage(Component.text("You now have the tag: ")
+ ChatColor.translateAlternateColorCodes( .append(LegacyComponentSerializer.legacyAmpersand()
'&', String.join(" ", args))); .deserialize(String.join(" ", args))));
} }
} catch (Exception exception) { } catch (Exception exception) {
player.sendMessage("Something went wrong while saving the prefix. " player.sendMessage(Component
+ "Please check console."); .text("Something went wrong while saving the prefix. " +
"Please check console."));
exception.printStackTrace(); exception.printStackTrace();
} }
} }

View File

@ -1,7 +1,8 @@
package pw.kaboom.extras.commands; 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.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
@ -9,15 +10,21 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import javax.annotation.Nonnull;
public final class CommandPumpkin implements CommandExecutor { public final class CommandPumpkin implements CommandExecutor {
private void placePumpkin(final Player player) { private void placePumpkin(final Player player) {
player.getInventory().setHelmet(new ItemStack(Material.CARVED_PUMPKIN)); 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) { final String[] args) {
if (args.length == 0) { if (args.length == 0) {
sender.sendMessage(ChatColor.RED + "Usage: /" + label + " <player>"); sender.sendMessage(Component
.text("Usage: /" + label + " <player>",
NamedTextColor.RED));
} else { } else {
if (args[0].equals("*") || args[0].equals("**")) { if (args[0].equals("*") || args[0].equals("**")) {
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {

View File

@ -1,32 +1,35 @@
package pw.kaboom.extras.commands; 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.BufferedReader;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.lang.management.ManagementFactory; import java.lang.management.ManagementFactory;
import java.net.InetAddress; 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 { public final class CommandServerInfo implements CommandExecutor {
private void sendInfoMessage(final CommandSender target, final String description, private void sendInfoMessage(final CommandSender target, final String description,
final String value) { final String value) {
target.sendMessage( target.sendMessage(
ChatColor.GRAY + description + ": " Component.text(description, NamedTextColor.GRAY)
+ ChatColor.WHITE + value .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) { final String[] args) {
try { try {
sendInfoMessage(sender, "Hostname", sendInfoMessage(sender, "Hostname",
InetAddress.getLocalHost().getHostName() InetAddress.getLocalHost().getHostName()
); );
sendInfoMessage(sender, "IP address", sendInfoMessage(sender, "IP address",
InetAddress.getLocalHost().getHostAddress() InetAddress.getLocalHost().getHostAddress()
); );
} catch (Exception ignored) { } catch (Exception ignored) {
} }

View File

@ -1,31 +1,39 @@
package pw.kaboom.extras.commands; 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.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender; import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import pw.kaboom.extras.helpers.SkinDownloader; import pw.kaboom.extras.helpers.SkinDownloader;
import javax.annotation.Nonnull;
public final class CommandSkin implements CommandExecutor { public final class CommandSkin implements CommandExecutor {
private long millis; private long millis;
@Override @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) { final String[] args) {
if (sender instanceof ConsoleCommandSender) { 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 { } else {
final Player player = (Player) sender; final Player player = (Player) sender;
final long millisDifference = System.currentTimeMillis() - millis; final long millisDifference = System.currentTimeMillis() - millis;
if (args.length == 0) { if (args.length == 0) {
player.sendMessage(ChatColor.RED + "Usage: /" + label + " <username>"); player.sendMessage(Component
.text("Usage: /" + label + " <username>",
NamedTextColor.RED));
} else if (millisDifference <= 2000) { } 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 { } else {
final String name = args[0]; final String name = args[0];
final boolean shouldSendMessage = true; final boolean shouldSendMessage = true;

View File

@ -1,5 +1,6 @@
package pw.kaboom.extras.commands; package pw.kaboom.extras.commands;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.World; import org.bukkit.World;
@ -11,20 +12,26 @@ import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender; import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import javax.annotation.Nonnull;
public final class CommandSpawn implements CommandExecutor { 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) { final String[] args) {
if (sender instanceof ConsoleCommandSender) { 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 { } else {
final Player player = (Player) sender; 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 Location spawnLocation = world.getSpawnLocation();
final int maxWorldHeight = 256; final int maxWorldHeight = 256;
for (double y = spawnLocation.getY(); y <= maxWorldHeight; y++) { for (double y = spawnLocation.getY(); y <= maxWorldHeight; y++) {
final Location yLocation = new Location(world, spawnLocation.getX(), y, final Location yLocation = new Location(world, spawnLocation.getX(), y,
spawnLocation.getZ()); spawnLocation.getZ());
final Block coordBlock = world.getBlockAt(yLocation); final Block coordBlock = world.getBlockAt(yLocation);
if (!coordBlock.getType().isSolid() 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; return true;
} }

View File

@ -1,5 +1,6 @@
package pw.kaboom.extras.commands; package pw.kaboom.extras.commands;
import net.kyori.adventure.text.Component;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.command.Command; import org.bukkit.command.Command;
@ -10,11 +11,16 @@ import org.bukkit.entity.Player;
import org.bukkit.util.BlockIterator; import org.bukkit.util.BlockIterator;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import javax.annotation.Nonnull;
public final class CommandSpidey implements CommandExecutor { 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) { final String[] args) {
if (sender instanceof ConsoleCommandSender) { 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 { } else {
final Player player = (Player) sender; final Player player = (Player) sender;
final World world = player.getWorld(); final World world = player.getWorld();

View File

@ -1,21 +1,30 @@
package pw.kaboom.extras.commands; 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.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import javax.annotation.Nonnull;
public final class CommandTellraw implements CommandExecutor { 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) { final String[] args) {
if (args.length == 0) { if (args.length == 0) {
sender.sendMessage(ChatColor.RED + "Usage: /" + label + " <message ..>"); sender.sendMessage(Component
.text("Usage: /" + label + " <message ..>", NamedTextColor.RED));
} else { } else {
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { final Component message = LegacyComponentSerializer.legacyAmpersand()
onlinePlayer.sendMessage(ChatColor.translateAlternateColorCodes( .deserialize(String.join(" ", args));
'&', String.join(" ", args)));
for (Player onlinePlayer: Bukkit.getOnlinePlayers()) {
onlinePlayer.sendMessage(message);
} }
} }
return true; return true;

View File

@ -1,5 +1,8 @@
package pw.kaboom.extras.commands; 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.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
@ -8,47 +11,56 @@ import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender; import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import com.destroystokyo.paper.profile.PlayerProfile; import javax.annotation.Nonnull;
public final class CommandUsername implements CommandExecutor { public final class CommandUsername implements CommandExecutor {
private long millis; private long millis;
@Override @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) { final String[] args) {
if (sender instanceof ConsoleCommandSender) { 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 { } else {
final Player player = (Player) sender; final Player player = (Player) sender;
final String nameColor = ChatColor.translateAlternateColorCodes( final String nameColor = ChatColor.translateAlternateColorCodes(
'&', String.join(" ", args)); '&', String.join(" ", args));
final String name = nameColor.substring(0, Math.min(16, nameColor.length())); final String name = nameColor.substring(0, Math.min(16, nameColor.length()));
final long millisDifference = System.currentTimeMillis() - millis; final long millisDifference = System.currentTimeMillis() - millis;
if (args.length == 0) { if (args.length == 0) {
player.sendMessage(ChatColor.RED + "Usage: /" + label + " <username>"); player.sendMessage(Component
.text("Usage: /" + label + " <username>",
NamedTextColor.RED));
} else if (name.equals(player.getName())) { } 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) { } 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 { } else {
if (Bukkit.getPlayer(name) != null if (Bukkit.getPlayer(name) != null) {
&& Bukkit.getPlayer(name).isOnline()) { player.sendMessage(Component
player.sendMessage("A player with that username is already logged in"); .text("A player with that username is already logged in."));
return true; return true;
} }
final PlayerProfile profile = player.getPlayerProfile(); final PlayerProfile profile = player.getPlayerProfile();
//FIXME Marked for removal
profile.setName(name); profile.setName(name);
player.setPlayerProfile(profile); player.setPlayerProfile(profile);
millis = System.currentTimeMillis(); millis = System.currentTimeMillis();
player.sendMessage("Successfully set your username to \"" + name + "\""); player.sendMessage(Component
.text("Successfully set your username to \"" + name + "\""));
} }
} }
return true; return true;

View File

@ -2,6 +2,7 @@ package pw.kaboom.extras.modules.player;
import io.papermc.paper.chat.ChatRenderer; import io.papermc.paper.chat.ChatRenderer;
import io.papermc.paper.event.player.AsyncChatEvent; import io.papermc.paper.event.player.AsyncChatEvent;
import javax.annotation.Nonnull;
import net.kyori.adventure.audience.Audience; import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.TextComponent;
@ -12,7 +13,6 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import pw.kaboom.extras.Main; import pw.kaboom.extras.Main;
import java.util.UUID; import java.util.UUID;
@ -52,10 +52,10 @@ public final class PlayerChat implements Listener {
public static class PlayerChatRenderer implements ChatRenderer { public static class PlayerChatRenderer implements ChatRenderer {
@Override @Override
public @NotNull Component render(@NotNull Player player, public @Nonnull Component render(@Nonnull Player player,
@NotNull Component displayName, @Nonnull Component displayName,
@NotNull Component component, @Nonnull Component component,
@NotNull Audience audience) { @Nonnull Audience audience) {
Component newComponent = Component.empty(); Component newComponent = Component.empty();
final String legacyPrefix = PREFIX_CONFIG.getString(player.getUniqueId().toString()); final String legacyPrefix = PREFIX_CONFIG.getString(player.getUniqueId().toString());
final Component prefix = legacyPrefix == null ? final Component prefix = legacyPrefix == null ?

View File

@ -5,12 +5,16 @@ api-version: 1.13
version: master version: master
commands: commands:
broadcastminimessage:
aliases: [ broadcastmm, bcmm ]
description: Broadcasts a deserialized MiniMessage component
permission: extras.broadcastminimessage
broadcastraw: broadcastraw:
aliases: [bcraw, tellraw] aliases: [ bcraw, tellraw ]
description: Broadcasts raw text to the server description: Broadcasts raw text to the server
permission: extras.broadcastraw permission: extras.broadcastraw
broadcastvanilla: broadcastvanilla:
aliases: [bcv] aliases: [ bcv ]
description: Broadcasts text in vanilla style description: Broadcasts text in vanilla style
permission: extras.broadcastvanilla permission: extras.broadcastvanilla
clearchat: clearchat:
@ -27,6 +31,10 @@ commands:
enchantall: enchantall:
description: Adds every enchantment to a held item description: Adds every enchantment to a held item
permission: extras.enchantall permission: extras.enchantall
getjson:
aliases: [ gj, gmm ]
description: Gets the JSON of a deserialized MiniMessage/legacy component
permission: extras.getjson
jumpscare: jumpscare:
aliases: scare aliases: scare
description: Scares a player description: Scares a player
@ -60,4 +68,4 @@ commands:
permission: extras.spidey permission: extras.spidey
username: username:
description: Changes your username on the server description: Changes your username on the server
permission: extras.username permission: extras.username