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
| 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

View File

@ -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());

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;
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 + " <message ..>");
sender.sendMessage(Component
.text("Usage: /" + label + " <message ..>",
NamedTextColor.RED));
} else {
Command.broadcastCommandMessage(sender, ChatColor.translateAlternateColorCodes(
'&', String.join(" ", args)));
'&', String.join(" ", args)));
}
return true;
}

View File

@ -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;
}
}

View File

@ -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 + " <message ..>");
sender.sendMessage(Component
.text("Usage: /" + label + " <message ..>",
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;

View File

@ -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;
}
}

View File

@ -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;

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;
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 + " <player>");
sender.sendMessage(Component
.text("Usage: /" + label + " <player>",
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"));
}
}
}

View File

@ -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;
}

View File

@ -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;
}
}

View File

@ -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 + " <prefix|off>");
player.sendMessage(Component
.text("Usage: /" + label + " <prefix|off>",
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();
}
}

View File

@ -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 + " <player>");
sender.sendMessage(Component
.text("Usage: /" + label + " <player>",
NamedTextColor.RED));
} else {
if (args[0].equals("*") || args[0].equals("**")) {
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {

View File

@ -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) {
}

View File

@ -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 + " <username>");
player.sendMessage(Component
.text("Usage: /" + label + " <username>",
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;

View File

@ -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;
}

View File

@ -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();

View File

@ -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 + " <message ..>");
sender.sendMessage(Component
.text("Usage: /" + label + " <message ..>", 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;

View File

@ -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 + " <username>");
player.sendMessage(Component
.text("Usage: /" + label + " <username>",
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;

View File

@ -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 ?

View File

@ -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