diff --git a/pom.xml b/pom.xml index cddc83e..d57f5fa 100644 --- a/pom.xml +++ b/pom.xml @@ -23,6 +23,10 @@ + + repo + https://repo.triumphteam.dev/snapshots/ + Citizens-Repo https://repo.citizensnpcs.co/ @@ -85,32 +89,35 @@ - + - me.rayzr522 - jsonmessage - ${jsonmsg.version} - compile + net.kyori + adventure-platform-bukkit + 4.1.0 - - com.github.ipsk - MattUtils - ${utils.version} - compile + net.kyori + adventure-text-minimessage + 4.10.1 + + + + ch.jalu + configme + 1.3.0 - me.mattstudios.utils - matt-framework - 1.4.3 + dev.triumphteam + triumph-cmd-bukkit + 2.0.0-SNAPSHOT compile org.bstats bstats-bukkit - 1.5 + 3.0.0 compile diff --git a/src/main/java/me/mattstudios/citizenscmd/CitizensCMD.java b/src/main/java/me/mattstudios/citizenscmd/CitizensCMD.java index eb56f8e..82116d0 100644 --- a/src/main/java/me/mattstudios/citizenscmd/CitizensCMD.java +++ b/src/main/java/me/mattstudios/citizenscmd/CitizensCMD.java @@ -18,6 +18,12 @@ package me.mattstudios.citizenscmd; +import ch.jalu.configme.SettingsManager; +import ch.jalu.configme.SettingsManagerBuilder; +import dev.triumphteam.cmd.bukkit.BukkitCommandManager; +import dev.triumphteam.cmd.bukkit.message.BukkitMessageKey; +import dev.triumphteam.cmd.core.message.MessageKey; +import dev.triumphteam.cmd.core.suggestion.SuggestionKey; import me.mattstudios.citizenscmd.api.CitizensCMDAPI; import me.mattstudios.citizenscmd.commands.AddCommand; import me.mattstudios.citizenscmd.commands.CooldownCommand; @@ -40,26 +46,33 @@ import me.mattstudios.citizenscmd.schedulers.UpdateScheduler; import me.mattstudios.citizenscmd.updater.SpigotUpdater; import me.mattstudios.citizenscmd.utility.DisplayFormat; import me.mattstudios.citizenscmd.utility.Messages; -import me.mattstudios.citizenscmd.utility.Util; -import me.mattstudios.mf.base.CommandManager; +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.platform.bukkit.BukkitAudiences; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.Style; +import net.kyori.adventure.text.format.TextDecoration; import net.milkbowl.vault.economy.Economy; -import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; -import java.io.File; +import java.nio.file.Paths; import java.util.Arrays; import java.util.HashMap; import java.util.Map; -import java.util.Objects; +import java.util.stream.Collectors; +import java.util.stream.IntStream; import java.util.stream.Stream; +import static me.mattstudios.citizenscmd.utility.Util.HEADER; +import static me.mattstudios.citizenscmd.utility.Util.LEGACY; +import static me.mattstudios.citizenscmd.utility.Util.TAG; +import static me.mattstudios.citizenscmd.utility.Util.color; import static me.mattstudios.citizenscmd.utility.Util.disablePlugin; -import static me.mattstudios.utils.MessageUtils.color; -import static me.mattstudios.utils.MessageUtils.info; -import static me.mattstudios.utils.YamlUtils.copyDefaults; +import static me.mattstudios.citizenscmd.utility.Util.info; public final class CitizensCMD extends JavaPlugin { @@ -68,11 +81,14 @@ public final class CitizensCMD extends JavaPlugin { private CooldownHandler cooldownHandler; private PermissionsManager permissionsManager; + private BukkitAudiences audiences; + private static CitizensCMDAPI api; private static Economy economy; private boolean papi = false; - private CommandManager commandManager; + private BukkitCommandManager commandManager; + private SettingsManager settings; private boolean updateStatus = false; private boolean shift = false; @@ -84,22 +100,28 @@ public final class CitizensCMD extends JavaPlugin { @Override public void onEnable() { - saveDefaultConfig(); - copyDefaults(getClassLoader().getResourceAsStream("config.yml"), new File(getDataFolder().getPath(), "config.yml")); - - setLang(Objects.requireNonNull(getConfig().getString("lang"))); + settings = SettingsManagerBuilder + .withYamlFile(Paths.get(getDataFolder().getPath(), "config.yml")) + .configurationData(Settings.class) + .useDefaultMigrationService() + .create(); - if (!hasCitizens() && getConfig().getBoolean("citizens-check")) { + audiences = BukkitAudiences.create(this); + + setLang(settings.getProperty(Settings.LANG)); + + if (!hasCitizens() && settings.getProperty(Settings.CITIZENS_CHECK)) { disablePlugin(this); return; } - commandManager = new CommandManager(this, true); + commandManager = BukkitCommandManager.create(this); - Metrics metrics = new Metrics(this); - Util.setUpMetrics(metrics, getConfig()); + //Metrics metrics = new Metrics(this); + //Util.setUpMetrics(metrics, settings); - info(color(Util.TAG + "&3Citizens&cCMD &8&o" + getDescription().getVersion() + " &8By &3Mateus Moreira &c@LichtHund")); + final Audience console = audiences.console(); + console.sendMessage(TAG.append(LEGACY.deserialize("&3Citizens&cCMD &8&o" + getDescription().getVersion() + " &8By &3Mateus Moreira &c@LichtHund"))); permissionsManager = new PermissionsManager(this); @@ -112,48 +134,44 @@ public final class CitizensCMD extends JavaPlugin { registerCommands(); registerEvents(); - info(color(Util.TAG + lang.getMessage(Messages.USING_LANGUAGE))); + console.sendMessage(TAG.append(lang.getMessage(Messages.USING_LANGUAGE))); if (hasPAPI()) { - info(color(Util.TAG + lang.getMessage(Messages.PAPI_AVAILABLE))); + console.sendMessage(TAG.append(lang.getMessage(Messages.PAPI_AVAILABLE))); papi = true; } if (setupEconomy()) { - info(color(Util.TAG + lang.getUncoloredMessage(Messages.VAULT_AVAILABLE))); + console.sendMessage(TAG.append(lang.getMessage(Messages.VAULT_AVAILABLE))); } waitingList = new HashMap<>(); - setShift(getConfig().getBoolean("shift-confirm")); + setShift(settings.getProperty(Settings.SHIT_CONFIRM)); - if (getConfig().contains("cooldown-time-display")) { - switch (Objects.requireNonNull(getConfig().getString("cooldown-time-display")).toLowerCase()) { - case "short": - displayFormat = DisplayFormat.SHORT; - break; + switch (settings.getProperty(Settings.TIME_DISPLAY).toLowerCase()) { + case "short": + displayFormat = DisplayFormat.SHORT; + break; - case "full": - displayFormat = DisplayFormat.FULL; - break; + case "full": + displayFormat = DisplayFormat.FULL; + break; - default: - displayFormat = DisplayFormat.MEDIUM; - break; - } - } else { - displayFormat = DisplayFormat.MEDIUM; + default: + displayFormat = DisplayFormat.MEDIUM; + break; } - if (getConfig().getBoolean("check-updates")) { + if (settings.getProperty(Settings.CHECK_UPDATES)) { SpigotUpdater updater = new SpigotUpdater(this, 30224); try { // If there's an update, tell the user that they can update if (updater.checkForUpdates()) { updateStatus = true; newVersion = updater.getLatestVersion(); - info(color(Util.TAG + "&b&o" + lang.getUncoloredMessage(Messages.STARTUP_NEW_VERSION))); - info(color(Util.TAG + "&b&o" + updater.getResourceURL())); + console.sendMessage(TAG.append(lang.getMessage(Messages.STARTUP_NEW_VERSION).style(Style.style(NamedTextColor.AQUA, TextDecoration.ITALIC)))); + console.sendMessage(TAG.append(Component.text(updater.getResourceURL()).style(Style.style(NamedTextColor.AQUA, TextDecoration.ITALIC)))); } } catch (Exception ignored) { } @@ -182,30 +200,41 @@ public final class CitizensCMD extends JavaPlugin { * Registers all the commands to be used */ private void registerCommands() { - commandManager.getCompletionHandler().register("#permissions", input -> Arrays.asList("console", "player", "permission", "server", "message", "sound")); - commandManager.getCompletionHandler().register("#type", input -> Arrays.asList("cmd", "perm")); - commandManager.getCompletionHandler().register("#click", input -> Arrays.asList("left", "right")); - commandManager.getCompletionHandler().register("#set", input -> Arrays.asList("set", "remove")); + commandManager.registerSuggestion(SuggestionKey.of("permissions"), (sender, context) -> Arrays.asList("console", "player", "permission", "server", "message", "sound")); + commandManager.registerSuggestion(SuggestionKey.of("type"), (sender, context) -> Arrays.asList("cmd", "perm")); + commandManager.registerSuggestion(SuggestionKey.of("click"), (sender, context) -> Arrays.asList("left", "right")); + commandManager.registerSuggestion(SuggestionKey.of("set"), (sender, context) -> Arrays.asList("set", "remove")); + commandManager.registerSuggestion(SuggestionKey.of("range"), (sender, context) -> IntStream.rangeClosed(1, 9).mapToObj(String::valueOf).collect(Collectors.toList())); - commandManager.getMessageHandler().register("cmd.no.permission", sender -> { - sender.sendMessage(color(Util.HEADER)); - sender.sendMessage(lang.getMessage(Messages.NO_PERMISSION)); + commandManager.registerMessage(BukkitMessageKey.NO_PERMISSION, (sender, context) -> { + final Audience audience = audiences.sender(sender); + audience.sendMessage(HEADER); + audience.sendMessage(lang.getMessage(Messages.NO_PERMISSION)); }); - commandManager.getMessageHandler().register("cmd.no.console", sender -> { - sender.sendMessage(color(Util.HEADER)); - sender.sendMessage(lang.getMessage(Messages.CONSOLE_NOT_ALLOWED)); + commandManager.registerMessage(BukkitMessageKey.PLAYER_ONLY, (sender, context) -> { + final Audience audience = audiences.sender(sender); + audience.sendMessage(HEADER); + audience.sendMessage(lang.getMessage(Messages.CONSOLE_NOT_ALLOWED)); }); - commandManager.getMessageHandler().register("cmd.no.exists", sender -> { - sender.sendMessage(color(Util.HEADER)); - sender.sendMessage(lang.getMessage(Messages.WRONG_USAGE)); + commandManager.registerMessage(MessageKey.UNKNOWN_COMMAND, (sender, context) -> { + final Audience audience = audiences.sender(sender); + audience.sendMessage(HEADER); + audience.sendMessage(lang.getMessage(Messages.WRONG_USAGE)); }); - commandManager.getMessageHandler().register("cmd.wrong.usage", sender -> { - sender.sendMessage(color(Util.HEADER)); - sender.sendMessage(lang.getMessage(Messages.WRONG_USAGE)); + commandManager.registerMessage(MessageKey.INVALID_ARGUMENT, (sender, context) -> { + final Audience audience = audiences.sender(sender); + audience.sendMessage(HEADER); + audience.sendMessage(lang.getMessage(Messages.WRONG_USAGE)); }); - commandManager.getMessageHandler().register("arg.must.be.number", sender -> { - sender.sendMessage(color(Util.HEADER)); - sender.sendMessage(lang.getMessage(Messages.INVALID_NUMBER)); + commandManager.registerMessage(MessageKey.TOO_MANY_ARGUMENTS, (sender, context) -> { + final Audience audience = audiences.sender(sender); + audience.sendMessage(HEADER); + audience.sendMessage(lang.getMessage(Messages.WRONG_USAGE)); + }); + commandManager.registerMessage(MessageKey.NOT_ENOUGH_ARGUMENTS, (sender, context) -> { + final Audience audience = audiences.sender(sender); + audience.sendMessage(HEADER); + audience.sendMessage(lang.getMessage(Messages.WRONG_USAGE)); }); Stream.of( @@ -218,7 +247,7 @@ public final class CitizensCMD extends JavaPlugin { new PriceCommand(this), new ReloadCommand(this), new RemoveCommand(this) - ).forEach(commandManager::register); + ).forEach(commandManager::registerCommand); } /** @@ -250,10 +279,28 @@ public final class CitizensCMD extends JavaPlugin { return false; } economy = registeredServiceProvider.getProvider(); - shift = getConfig().getBoolean("shift-confirm"); + shift = settings.getProperty(Settings.SHIT_CONFIRM); return economy != null; } + /** + * Settings manager, should use this instead of default config. + * + * @return The settings manager. + */ + public SettingsManager getSettings() { + return settings; + } + + /** + * Gets adventure's audiences for JSON messages. + * + * @return The BukkitAudiences. + */ + public BukkitAudiences getAudiences() { + return audiences; + } + /** * Sets the language that is supposed to be used */ diff --git a/src/main/java/me/mattstudios/citizenscmd/Settings.java b/src/main/java/me/mattstudios/citizenscmd/Settings.java new file mode 100644 index 0000000..2e1b5c4 --- /dev/null +++ b/src/main/java/me/mattstudios/citizenscmd/Settings.java @@ -0,0 +1,58 @@ +package me.mattstudios.citizenscmd; + +import ch.jalu.configme.Comment; +import ch.jalu.configme.SettingsHolder; +import ch.jalu.configme.configurationdata.CommentsConfiguration; +import ch.jalu.configme.properties.Property; +import ch.jalu.configme.properties.PropertyInitializer; + +public final class Settings implements SettingsHolder { + + private Settings() {} + + @Comment({"", "Enables Checking for update."}) + public static final Property CHECK_UPDATES = PropertyInitializer + .newProperty("check-updates", true); + + @Comment({"", "Available languages EN, PT, BG, RO, NO, CH"}) + public static final Property LANG = PropertyInitializer + .newProperty("lang", "EN"); + + @Comment({"", "Toggle this on to enable using Minimessage style for message commands.", "https://docs.adventure.kyori.net/minimessage/format.html"}) + public static final Property MINI_MESSAGE = PropertyInitializer + .newProperty("minimessage", false); + + @Comment({"", "Toggle this on to enable using Minimessage style for your language files.", "https://docs.adventure.kyori.net/minimessage/format.html"}) + public static final Property MINI_MESSAGE_LANG = PropertyInitializer + .newProperty("minimessage-lang", false); + + @Comment({"", "The default npc cooldown in seconds"}) + public static final Property DEFAULT_COOLDOWN = PropertyInitializer + .newProperty("default-cooldown", 0); + + @Comment({"", "When using a NPC with price, true means that to confirm the use the player needs to seek or press shift"}) + public static final Property SHIT_CONFIRM = PropertyInitializer + .newProperty("shift-confirm", true); + + @Comment({"", "Select cooldown display format, SHORT = 3m 3s | MEDIUM = 3 min 3 sec | FULL - 3 minutes 3 seconds"}) + public static final Property TIME_DISPLAY = PropertyInitializer + .newProperty("cooldown-time-display", "MEDIUM"); + + @Comment({"", "Disables citizens check on startup"}) + public static final Property CITIZENS_CHECK = PropertyInitializer + .newProperty("citizens-check", true); + + @Override + public void registerComments(final CommentsConfiguration conf) { + conf.setComment( + "", + "Citizens CMD Plugin by Mateus Moreira", + "@LichtHund", + "Version ${project.version}", + "Wiki: https://github.com/ipsk/CitizensCMD/wiki", + "GitHub: https://github.com/ipsk/CitizensCMD", + "Spigot: https://www.spigotmc.org/resources/citizens-cmd.30224/", + "" + ); + } +} diff --git a/src/main/java/me/mattstudios/citizenscmd/commands/AddCommand.java b/src/main/java/me/mattstudios/citizenscmd/commands/AddCommand.java index 40028d5..2e101d5 100644 --- a/src/main/java/me/mattstudios/citizenscmd/commands/AddCommand.java +++ b/src/main/java/me/mattstudios/citizenscmd/commands/AddCommand.java @@ -1,109 +1,76 @@ package me.mattstudios.citizenscmd.commands; +import dev.triumphteam.cmd.bukkit.annotation.Permission; +import dev.triumphteam.cmd.core.annotation.CommandFlags; +import dev.triumphteam.cmd.core.annotation.Flag; +import dev.triumphteam.cmd.core.annotation.SubCommand; +import dev.triumphteam.cmd.core.annotation.Suggestion; +import dev.triumphteam.cmd.core.flag.Flags; import me.mattstudios.citizenscmd.CitizensCMD; import me.mattstudios.citizenscmd.utility.Messages; -import me.mattstudios.mf.annotations.Command; -import me.mattstudios.mf.annotations.Completion; -import me.mattstudios.mf.annotations.Permission; -import me.mattstudios.mf.annotations.SubCommand; -import me.mattstudios.mf.base.CommandBase; +import net.kyori.adventure.audience.Audience; import org.bukkit.command.CommandSender; +import java.util.Optional; +import java.util.OptionalInt; + import static me.mattstudios.citizenscmd.utility.Util.HEADER; import static me.mattstudios.citizenscmd.utility.Util.getSelectedNpcId; -import static me.mattstudios.citizenscmd.utility.Util.npcNotSelected; -import static me.mattstudios.utils.MessageUtils.color; -import static me.mattstudios.utils.NumbersUtils.isDouble; +import static me.mattstudios.citizenscmd.utility.Util.sendNotSelectedMessage; -@Command("npcmd") -public class AddCommand extends CommandBase { +public class AddCommand extends Npcmd { private final CitizensCMD plugin; - public AddCommand(CitizensCMD plugin) { + public AddCommand(final CitizensCMD plugin) { this.plugin = plugin; } - /** - * Adds a command to an NPC via ingame command - * - * @param sender Gets the sender to check for which NPC is selected and send messages. - * @param permission The permission node or other to add. - * @param arguments Gets the command to be added to the NPC. - */ @SubCommand("add") @Permission("citizenscmd.add") - public void addCommand(final CommandSender sender, @Completion("#permissions") String permission, String[] arguments) { + @CommandFlags({ + @Flag(flag = "n"), + @Flag(flag = "l"), + @Flag(flag = "d", argument = double.class) + }) + public void addCommand( + final CommandSender sender, + @Suggestion("permissions") final String permission, + final Flags flags + ) { + final OptionalInt selectedNpc = getSelectedNpcId(sender); - if (npcNotSelected(plugin, sender)) return; + final Audience audience = plugin.getAudiences().sender(sender); - StringBuilder permissionBuilder = new StringBuilder(permission); - boolean left = false; - boolean displayName = false; - boolean hasDelayError = false; - - StringBuilder stringBuilder = new StringBuilder(); - if (arguments[0].startsWith("/")) arguments[0] = arguments[0].substring(1); - - for (int i = 0; i < arguments.length; i++) { - - if (arguments[i].equalsIgnoreCase("")) continue; - - if (arguments[i].equalsIgnoreCase("-n")) { - displayName = true; - continue; - } - - if (arguments[i].equalsIgnoreCase("-l")) { - left = true; - continue; - } - - if (arguments[i].equalsIgnoreCase("-d")) { - if (i + 1 >= arguments.length) { - hasDelayError = true; - continue; - } - - if (!isDouble(arguments[i + 1])) { - hasDelayError = true; - continue; - } - - permissionBuilder.append("(").append(arguments[i + 1]).append(")"); - arguments[i + 1] = ""; - continue; - } - - if (i == arguments.length - 1) stringBuilder.append(arguments[i]); - else stringBuilder.append(arguments[i]).append(" "); - } - - if (hasDelayError) { - sender.sendMessage(color(HEADER)); - sender.sendMessage(plugin.getLang().getMessage(Messages.NPC_ADD_DELAY_FAIL)); + if (!selectedNpc.isPresent()) { + sendNotSelectedMessage(plugin, audience); return; } - String finalString; - - if (displayName) { - finalString = "{display} " + stringBuilder.toString().trim(); - } else { - finalString = stringBuilder.toString().trim(); - } - - if (permissionBuilder.toString().equalsIgnoreCase("sound")) { - if (arguments.length < 2) { - finalString += " 1 1"; - } else { - if (arguments.length < 3) { - finalString += " 1"; - } + final StringBuilder permissionBuilder = new StringBuilder(permission); + if (flags.hasFlag("d")) { + final Optional delay = flags.getValue("d", Double.TYPE); + if (!delay.isPresent()) { + audience.sendMessage(HEADER); + audience.sendMessage(plugin.getLang().getMessage(Messages.NPC_ADD_DELAY_FAIL)); + return; } + permissionBuilder.append("(").append(delay.get()).append(")"); } - plugin.getDataHandler().addCommand(getSelectedNpcId(sender), permissionBuilder.toString(), finalString, sender, left); + final String command = flags.getText(); + + if (command.isEmpty()) { + audience.sendMessage(HEADER); + audience.sendMessage(plugin.getLang().getMessage(Messages.WRONG_USAGE)); + return; + } + + final String finalString = (flags.hasFlag("n") ? "{display} " + command : command).trim(); + + plugin + .getDataHandler() + .addCommand(selectedNpc.getAsInt(), permissionBuilder.toString(), finalString, audience, flags.hasFlag("l")); } } diff --git a/src/main/java/me/mattstudios/citizenscmd/commands/CooldownCommand.java b/src/main/java/me/mattstudios/citizenscmd/commands/CooldownCommand.java index 7e1662c..fbb914e 100644 --- a/src/main/java/me/mattstudios/citizenscmd/commands/CooldownCommand.java +++ b/src/main/java/me/mattstudios/citizenscmd/commands/CooldownCommand.java @@ -1,31 +1,38 @@ package me.mattstudios.citizenscmd.commands; +import dev.triumphteam.cmd.bukkit.annotation.Permission; +import dev.triumphteam.cmd.core.annotation.SubCommand; +import dev.triumphteam.cmd.core.annotation.Suggestion; import me.mattstudios.citizenscmd.CitizensCMD; -import me.mattstudios.mf.annotations.Command; -import me.mattstudios.mf.annotations.Completion; -import me.mattstudios.mf.annotations.Permission; -import me.mattstudios.mf.annotations.SubCommand; -import me.mattstudios.mf.base.CommandBase; +import net.kyori.adventure.audience.Audience; import org.bukkit.command.CommandSender; +import java.util.OptionalInt; + import static me.mattstudios.citizenscmd.utility.Util.getSelectedNpcId; -import static me.mattstudios.citizenscmd.utility.Util.npcNotSelected; +import static me.mattstudios.citizenscmd.utility.Util.sendNotSelectedMessage; -@Command("npcmd") -public class CooldownCommand extends CommandBase { +public class CooldownCommand extends Npcmd { - private CitizensCMD plugin; + private final CitizensCMD plugin; - public CooldownCommand(CitizensCMD plugin) { + public CooldownCommand(final CitizensCMD plugin) { this.plugin = plugin; } @SubCommand("cooldown") @Permission("citizenscmd.cooldown") - public void cooldown(CommandSender sender, @Completion("#range:9") Integer cooldown) { - if (npcNotSelected(plugin, sender)) return; + public void cooldown(final CommandSender sender, @Suggestion("range") final int cooldown) { + final OptionalInt selectedNpc = getSelectedNpcId(sender); - plugin.getDataHandler().setCooldown(getSelectedNpcId(sender), cooldown, sender); + final Audience audience = plugin.getAudiences().sender(sender); + + if (!selectedNpc.isPresent()) { + sendNotSelectedMessage(plugin, audience); + return; + } + + plugin.getDataHandler().setCooldown(selectedNpc.getAsInt(), cooldown, audience); } } diff --git a/src/main/java/me/mattstudios/citizenscmd/commands/EditCommand.java b/src/main/java/me/mattstudios/citizenscmd/commands/EditCommand.java index 0f35afe..f7dd4be 100644 --- a/src/main/java/me/mattstudios/citizenscmd/commands/EditCommand.java +++ b/src/main/java/me/mattstudios/citizenscmd/commands/EditCommand.java @@ -1,37 +1,47 @@ package me.mattstudios.citizenscmd.commands; +import dev.triumphteam.cmd.bukkit.annotation.Permission; +import dev.triumphteam.cmd.core.annotation.SubCommand; +import dev.triumphteam.cmd.core.annotation.Suggestion; +import jdk.internal.joptsimple.internal.Strings; import me.mattstudios.citizenscmd.CitizensCMD; import me.mattstudios.citizenscmd.utility.EnumTypes; import me.mattstudios.citizenscmd.utility.Messages; -import me.mattstudios.mf.annotations.Command; -import me.mattstudios.mf.annotations.Completion; -import me.mattstudios.mf.annotations.Permission; -import me.mattstudios.mf.annotations.SubCommand; -import me.mattstudios.mf.base.CommandBase; +import net.kyori.adventure.audience.Audience; import org.bukkit.command.CommandSender; +import java.util.List; +import java.util.OptionalInt; + import static me.mattstudios.citizenscmd.utility.Util.HEADER; import static me.mattstudios.citizenscmd.utility.Util.getSelectedNpcId; -import static me.mattstudios.citizenscmd.utility.Util.npcNotSelected; -import static me.mattstudios.utils.MessageUtils.color; +import static me.mattstudios.citizenscmd.utility.Util.sendNotSelectedMessage; -@Command("npcmd") -public class EditCommand extends CommandBase { +public class EditCommand extends Npcmd { - private CitizensCMD plugin; + private final CitizensCMD plugin; - public EditCommand(CitizensCMD plugin) { + public EditCommand(final CitizensCMD plugin) { this.plugin = plugin; } @SubCommand("edit") @Permission("citizenscmd.edit") - @Completion({"#type", "#click"}) - public void edit(CommandSender sender, String typeString, String clickString, Integer id, String[] arguments) { + public void edit( + final CommandSender sender, + @Suggestion("type") final String typeString, + @Suggestion("click") final String clickString, + final int id, + final List arguments + ) { + final OptionalInt selectedNpc = getSelectedNpcId(sender); - if (npcNotSelected(plugin, sender)) return; + final Audience audience = plugin.getAudiences().sender(sender); - int npc = getSelectedNpcId(sender); + if (!selectedNpc.isPresent()) { + sendNotSelectedMessage(plugin, audience); + return; + } EnumTypes.ClickType click; EnumTypes.EditType type; @@ -42,9 +52,9 @@ public class EditCommand extends CommandBase { break; case "perm": - if (arguments.length > 1) { - sender.sendMessage(color(HEADER)); - sender.sendMessage(plugin.getLang().getMessage(Messages.INVALID_PERMISSION)); + if (arguments.size() > 1) { + audience.sendMessage(HEADER); + audience.sendMessage(plugin.getLang().getMessage(Messages.INVALID_PERMISSION)); return; } @@ -52,24 +62,27 @@ public class EditCommand extends CommandBase { break; default: - sender.sendMessage(color(HEADER)); - sender.sendMessage(plugin.getLang().getMessage(Messages.INVALID_ARGUMENTS)); + audience.sendMessage(HEADER); + audience.sendMessage(plugin.getLang().getMessage(Messages.INVALID_ARGUMENTS)); return; } switch (clickString.toLowerCase()) { case "left": - int leftCommandSize = plugin.getDataHandler().getClickCommandsData(npc, EnumTypes.ClickType.LEFT).size(); + int leftCommandSize = plugin.getDataHandler().getClickCommandsData( + selectedNpc.getAsInt(), + EnumTypes.ClickType.LEFT + ).size(); if (leftCommandSize == 0) { - sender.sendMessage(color(HEADER)); - sender.sendMessage(plugin.getLang().getMessage(Messages.NO_COMMANDS)); + audience.sendMessage(HEADER); + audience.sendMessage(plugin.getLang().getMessage(Messages.NO_COMMANDS)); return; } if (id < 1 || id > leftCommandSize) { - sender.sendMessage(color(HEADER)); - sender.sendMessage(plugin.getLang().getMessage(Messages.INVALID_ID_NUMBER)); + audience.sendMessage(HEADER); + audience.sendMessage(plugin.getLang().getMessage(Messages.INVALID_ID_NUMBER)); return; } @@ -77,37 +90,35 @@ public class EditCommand extends CommandBase { break; case "right": - int rightCommandSize = plugin.getDataHandler().getClickCommandsData(npc, EnumTypes.ClickType.RIGHT).size(); + int rightCommandSize = plugin.getDataHandler().getClickCommandsData( + selectedNpc.getAsInt(), + EnumTypes.ClickType.RIGHT + ).size(); if (rightCommandSize == 0) { - sender.sendMessage(color(HEADER)); - sender.sendMessage(plugin.getLang().getMessage(Messages.NO_COMMANDS)); + audience.sendMessage(HEADER); + audience.sendMessage(plugin.getLang().getMessage(Messages.NO_COMMANDS)); return; } if (id < 1 || id > rightCommandSize) { - sender.sendMessage(color(HEADER)); - sender.sendMessage(plugin.getLang().getMessage(Messages.INVALID_ID_NUMBER)); + audience.sendMessage(HEADER); + audience.sendMessage(plugin.getLang().getMessage(Messages.INVALID_ID_NUMBER)); return; } click = EnumTypes.ClickType.RIGHT; break; default: - sender.sendMessage(color(HEADER)); - sender.sendMessage(plugin.getLang().getMessage(Messages.INVALID_CLICK_TYPE)); + audience.sendMessage(HEADER); + audience.sendMessage(plugin.getLang().getMessage(Messages.INVALID_CLICK_TYPE)); return; } - StringBuilder stringBuilder = new StringBuilder(); - arguments[0] = arguments[0].replace("/", ""); + String finalString = Strings.join(arguments, " ").trim(); + if (finalString.startsWith("/")) finalString = finalString.substring(1); - for (int i = 0; i < arguments.length; i++) { - if (i == arguments.length - 1) stringBuilder.append(arguments[i]); - else stringBuilder.append(arguments[i]).append(" "); - } - - plugin.getDataHandler().edit(npc, id, click, type, stringBuilder.toString().trim(), sender); + plugin.getDataHandler().edit(selectedNpc.getAsInt(), id, click, type, finalString, audience); } } diff --git a/src/main/java/me/mattstudios/citizenscmd/commands/HelpCommand.java b/src/main/java/me/mattstudios/citizenscmd/commands/HelpCommand.java index 01fd160..8b898f8 100644 --- a/src/main/java/me/mattstudios/citizenscmd/commands/HelpCommand.java +++ b/src/main/java/me/mattstudios/citizenscmd/commands/HelpCommand.java @@ -1,40 +1,180 @@ package me.mattstudios.citizenscmd.commands; +import dev.triumphteam.cmd.bukkit.annotation.Permission; +import dev.triumphteam.cmd.core.annotation.Default; import me.mattstudios.citizenscmd.CitizensCMD; import me.mattstudios.citizenscmd.utility.Messages; -import me.mattstudios.mf.annotations.Command; -import me.mattstudios.mf.annotations.Default; -import me.mattstudios.mf.annotations.Permission; -import me.mattstudios.mf.base.CommandBase; -import me.rayzr522.jsonmessage.JSONMessage; +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.platform.bukkit.BukkitAudiences; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.event.ClickEvent; +import net.kyori.adventure.text.event.HoverEvent; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.Style; +import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.entity.Player; import static me.mattstudios.citizenscmd.utility.Util.HEADER; -import static me.mattstudios.utils.MessageUtils.color; +import static me.mattstudios.citizenscmd.utility.Util.LEGACY; +import static net.kyori.adventure.text.Component.newline; +import static net.kyori.adventure.text.Component.space; +import static net.kyori.adventure.text.Component.text; -@Command("npcmd") -public class HelpCommand extends CommandBase { +public class HelpCommand extends Npcmd { - private CitizensCMD plugin; + private final CitizensCMD plugin; + private final BukkitAudiences audiences; - public HelpCommand(CitizensCMD plugin) { + public HelpCommand(final CitizensCMD plugin) { this.plugin = plugin; + this.audiences = plugin.getAudiences(); } @Default @Permission("citizenscmd.npcmd") public void help(Player player) { - JSONMessage.create(color(HEADER)).send(player); - JSONMessage.create(color(plugin.getLang().getUncoloredMessage(Messages.HELP_VERSION) + " &c&o" + plugin.getDescription().getVersion())).send(player); - JSONMessage.create(color(plugin.getLang().getUncoloredMessage(Messages.HELP_INFO))).send(player); - JSONMessage.create(color("&3/npcmd &cadd &b &6 &d[-l]")).suggestCommand("/npcmd add ").tooltip(color(plugin.getLang().getUncoloredMessage(Messages.HELP_DESCRIPTION_ADD) + "\n" + plugin.getLang().getUncoloredMessage(Messages.HELP_EXAMPLE) + "\n&3&o/npcmd &c&oadd &b&ossentials.heal &6&oheal")).send(player); - JSONMessage.create(color("&3/npcmd &ccooldown &6