2022-02-10 05:12:30 +00:00
|
|
|
package io.github.simplexdevelopment.cl;
|
2022-02-07 01:58:00 +00:00
|
|
|
|
2022-02-10 05:12:30 +00:00
|
|
|
import io.github.simplexdevelopment.cl.api.ICommand;
|
|
|
|
import io.github.simplexdevelopment.cl.api.SubCommand;
|
|
|
|
import io.github.simplexdevelopment.msgutils.AdvancedColors;
|
|
|
|
import io.github.simplexdevelopment.msgutils.BasicColors;
|
2022-02-07 01:58:00 +00:00
|
|
|
import net.kyori.adventure.text.Component;
|
|
|
|
import net.kyori.adventure.text.TextComponent;
|
|
|
|
import org.bukkit.Bukkit;
|
|
|
|
import org.bukkit.command.Command;
|
|
|
|
import org.bukkit.command.CommandSender;
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
import org.bukkit.plugin.Plugin;
|
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.UUID;
|
|
|
|
|
|
|
|
public abstract class CommandBase extends Permissible implements ICommand {
|
2022-02-09 05:22:57 +00:00
|
|
|
/**
|
|
|
|
* @param permission The permission the user should have to run the command
|
|
|
|
* @param permissionMessage The message to send when the user does not have the permission to run the command.
|
|
|
|
* @param allowConsole Whether to allow the command to be run anywhere, or only in game.
|
|
|
|
*/
|
|
|
|
public CommandBase(@NotNull String permission, String permissionMessage, boolean allowConsole) {
|
2022-02-07 01:58:00 +00:00
|
|
|
super(permission, permissionMessage, allowConsole);
|
|
|
|
}
|
|
|
|
|
2022-02-09 05:22:57 +00:00
|
|
|
/**
|
|
|
|
* @param permission The permission the user should have to run the command
|
|
|
|
* @param permissionMessage The message to send when the user does not have the permission to run the command.
|
|
|
|
*/
|
|
|
|
public CommandBase(@NotNull String permission, String permissionMessage) {
|
2022-02-07 01:58:00 +00:00
|
|
|
this(permission, permissionMessage, true);
|
|
|
|
}
|
|
|
|
|
2022-02-09 05:22:57 +00:00
|
|
|
/**
|
|
|
|
* @param permission The permission the user should have to run the command
|
|
|
|
* @param allowConsole Whether to allow the command to be run anywhere, or only in game.
|
|
|
|
*/
|
|
|
|
public CommandBase(@NotNull String permission, boolean allowConsole) {
|
2022-02-07 01:58:00 +00:00
|
|
|
this(permission, "You do not have permission to use this command!", allowConsole);
|
|
|
|
}
|
|
|
|
|
2022-02-09 05:22:57 +00:00
|
|
|
/**
|
|
|
|
* @param permission The permission the user should have to run the command
|
|
|
|
*/
|
|
|
|
public CommandBase(@NotNull String permission) {
|
2022-02-07 01:58:00 +00:00
|
|
|
this(permission, "You do not have permission to use this command!", true);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String lbl, String[] args) {
|
|
|
|
if (!hasPermission(sender)) {
|
|
|
|
sender.sendMessage(msg(getPermissionMessage(), BasicColors.RED));
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!(sender instanceof Player) && !allowConsole()) {
|
|
|
|
sender.sendMessage(msg("This command can only be run in game."));
|
|
|
|
}
|
|
|
|
|
2022-03-04 23:02:16 +00:00
|
|
|
execute(sender, args);
|
2022-02-07 01:58:00 +00:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) {
|
|
|
|
return new ArrayList<>();
|
|
|
|
}
|
|
|
|
|
2022-02-09 05:22:57 +00:00
|
|
|
/**
|
|
|
|
* Returns a text component for Kyori friendly messaging.
|
|
|
|
*
|
|
|
|
* @param text The text to convert to a component
|
|
|
|
* @return A {@link TextComponent} containing the message provided in {@param text}
|
|
|
|
*/
|
|
|
|
@NotNull
|
|
|
|
public TextComponent msg(@NotNull String text) {
|
2022-02-07 01:58:00 +00:00
|
|
|
return Component.empty().content(text);
|
|
|
|
}
|
|
|
|
|
2022-02-09 05:22:57 +00:00
|
|
|
/**
|
|
|
|
* Returns a text component for Kyori friendly messaging.
|
|
|
|
*
|
|
|
|
* @param text The text to convert to a Component
|
|
|
|
* @param color The color you'd like the text. These colors are basic and the majority of which are provided by Minecraft's native color system.
|
|
|
|
* @return A {@link TextComponent} containing the message provided in {@param text} with the provided {@param color}
|
|
|
|
*/
|
|
|
|
@NotNull
|
|
|
|
public TextComponent msg(@NotNull String text, @NotNull BasicColors color) {
|
2022-02-07 01:58:00 +00:00
|
|
|
return Component.empty().content(text).color(color.getColor());
|
|
|
|
}
|
|
|
|
|
2022-02-09 05:22:57 +00:00
|
|
|
/**
|
|
|
|
* Returns a text component for Kyori friendly messaging.
|
|
|
|
*
|
|
|
|
* @param text The text to convert to a Component
|
|
|
|
* @param color The color you'd like the text. These colors are much more diverse for viewing pleasure.
|
|
|
|
* @return A {@link TextComponent} containing the message provided in {@param text} with the provided {@param color}
|
|
|
|
*/
|
|
|
|
@NotNull
|
|
|
|
public TextComponent msg(@NotNull String text, @NotNull AdvancedColors color) {
|
2022-02-07 01:58:00 +00:00
|
|
|
return Component.empty().content(text).color(color.getColor());
|
|
|
|
}
|
|
|
|
|
2022-02-09 05:22:57 +00:00
|
|
|
/**
|
|
|
|
* Runs a subcommand provided that the user has the required permission.
|
|
|
|
*
|
|
|
|
* @param name The name of the subcommand.
|
|
|
|
* @param sender The user who executed the command. (Provided by Paper)
|
|
|
|
* @param permission The permission required to run the subcommand.
|
|
|
|
* @param args The arguments the user input to run the subcommand. (Provided by Paper)
|
|
|
|
* @param command The SubCommand to run.
|
|
|
|
* This is a functional interface to provide easy implementation of the command's details.
|
|
|
|
*/
|
2022-02-10 02:48:48 +00:00
|
|
|
public boolean subCommand(@NotNull String name, @NotNull CommandSender sender, @NotNull String permission, String @NotNull [] args, @NotNull SubCommand command) {
|
2022-02-09 05:22:57 +00:00
|
|
|
if (!sender.hasPermission(permission)) {
|
|
|
|
sender.sendMessage(msg(getPermissionMessage()));
|
2022-02-10 02:48:48 +00:00
|
|
|
return true;
|
2022-02-09 05:22:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (args.length == 0) {
|
2022-02-10 02:48:48 +00:00
|
|
|
return false;
|
2022-02-09 05:22:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
String[] tieredCmd = name.split(" ");
|
|
|
|
|
|
|
|
if (args.length == 1 && tieredCmd.length == 1) {
|
|
|
|
if (args[0].equalsIgnoreCase(name)) {
|
|
|
|
command.execute();
|
2022-02-10 02:48:48 +00:00
|
|
|
return true;
|
2022-02-09 05:22:57 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
if (args.length == 2 && tieredCmd.length == 2) {
|
|
|
|
if (args[0].equalsIgnoreCase(tieredCmd[0]) && args[1].equalsIgnoreCase(tieredCmd[1])) {
|
|
|
|
command.execute();
|
2022-02-10 02:48:48 +00:00
|
|
|
return true;
|
2022-02-09 05:22:57 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
if (args.length == 3 && tieredCmd.length == 3) {
|
|
|
|
if (args[0].equalsIgnoreCase(tieredCmd[0])
|
|
|
|
&& args[1].equalsIgnoreCase(tieredCmd[1])
|
|
|
|
&& args[2].equalsIgnoreCase(tieredCmd[2])) {
|
|
|
|
command.execute();
|
2022-02-10 02:48:48 +00:00
|
|
|
return true;
|
2022-02-09 05:22:57 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
if (args.length == 4 && tieredCmd.length == 4) {
|
|
|
|
if (args[0].equalsIgnoreCase(tieredCmd[0])
|
|
|
|
&& args[1].equalsIgnoreCase(tieredCmd[1])
|
|
|
|
&& args[2].equalsIgnoreCase(tieredCmd[2])
|
|
|
|
&& args[3].equalsIgnoreCase(tieredCmd[3])) {
|
|
|
|
command.execute();
|
2022-02-10 02:48:48 +00:00
|
|
|
return true;
|
2022-02-09 05:22:57 +00:00
|
|
|
}
|
2022-02-07 01:58:00 +00:00
|
|
|
}
|
2022-02-10 02:48:48 +00:00
|
|
|
return false;
|
2022-02-07 01:58:00 +00:00
|
|
|
}
|
|
|
|
|
2022-02-09 05:22:57 +00:00
|
|
|
@Nullable
|
|
|
|
public Player getPlayer(@NotNull String name) {
|
2022-02-07 01:58:00 +00:00
|
|
|
return Bukkit.getServer().getPlayer(name);
|
|
|
|
}
|
|
|
|
|
2022-02-09 05:22:57 +00:00
|
|
|
@Nullable
|
|
|
|
public Player getPlayer(@NotNull UUID uuid) {
|
2022-02-07 01:58:00 +00:00
|
|
|
return Bukkit.getServer().getPlayer(uuid);
|
|
|
|
}
|
|
|
|
|
|
|
|
public List<? extends Player> getOnlinePlayers() {
|
|
|
|
return Bukkit.getOnlinePlayers().stream().toList();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void broadcast(String text) {
|
|
|
|
Bukkit.getServer().broadcast(msg(text));
|
|
|
|
}
|
|
|
|
|
|
|
|
public void broadcast(String text, BasicColors color) {
|
|
|
|
Bukkit.getServer().broadcast(msg(text, color));
|
|
|
|
}
|
|
|
|
|
|
|
|
public void broadcast(String text, AdvancedColors color) {
|
|
|
|
Bukkit.getServer().broadcast(msg(text, color));
|
|
|
|
}
|
|
|
|
|
|
|
|
public void enablePlugin(Plugin plugin) {
|
|
|
|
Bukkit.getServer().getPluginManager().enablePlugin(plugin);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void disablePlugin(Plugin plugin) {
|
|
|
|
Bukkit.getServer().getPluginManager().disablePlugin(plugin);
|
|
|
|
}
|
|
|
|
}
|