diff --git a/src/main/java/dev/plex/Guilds.java b/src/main/java/dev/plex/Guilds.java index 887e1c7..a95dd4c 100644 --- a/src/main/java/dev/plex/Guilds.java +++ b/src/main/java/dev/plex/Guilds.java @@ -56,9 +56,8 @@ public class Guilds extends PlexModule this.getPlex().setChatHandler(new ChatHandlerImpl()); - this.addDefaultMessage("guildsHelpCommand", "======Guild Menu======\n" + - "/guild Returns this menu\n" + - "/guild help"); + this.addDefaultMessage("guildsHelpCommand", "======Guild Menu======{0}", "0 - The commands list"); + this.addDefaultMessage("guildsCommandDisplay", "{0} {1}", "0 - The command name", "1 - The command description"); this.addDefaultMessage("guildCommandNotFound", "'{0}' is not a valid sub command!", "0 - The sub command"); this.addDefaultMessage("guildNotFound", "You're currently not a part of a guild!"); this.addDefaultMessage("alreadyInGuild", "You're currently in a guild. Please do /guild leave if you're a member, or if you're an owner with members, /guild promote then /guild leave, or just an owner, /guild disband."); diff --git a/src/main/java/dev/plex/command/GuildCommand.java b/src/main/java/dev/plex/command/GuildCommand.java index ce65101..a27a64c 100644 --- a/src/main/java/dev/plex/command/GuildCommand.java +++ b/src/main/java/dev/plex/command/GuildCommand.java @@ -8,8 +8,9 @@ import dev.plex.command.source.RequiredCommandSource; import dev.plex.command.sub.*; import dev.plex.rank.enums.Rank; import dev.plex.util.GuildUtil; -import dev.plex.util.PlexLog; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import org.apache.commons.lang.StringUtils; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; @@ -50,7 +51,26 @@ public class GuildCommand extends PlexCommand { if (args.length == 0) { - return messageComponent("guildsHelpCommand"); + return getSubs(); + } + if (args[0].equalsIgnoreCase("help")) + { + if (args.length < 2) + { + return usage("/guild help "); + } + PlexCommand subCommand = getSubCommand(args[1]); + if (subCommand == null) + { + return messageComponent("guildCommandNotFound", args[1]); + } + CommandPermissions permissions = subCommand.getClass().getDeclaredAnnotation(CommandPermissions.class); + return mmString("========").append(mmString("Command Name: " + subCommand.getName())).append(Component.newline()) + .append(mmString("Command Aliases: " + StringUtils.join(subCommand.getAliases(), ", "))).append(Component.newline()) + .append(mmString("Description: " + subCommand.getDescription())).append(Component.newline()) + .append(mmString("Permission: " + permissions.permission())).append(Component.newline()) + .append(mmString("Required Rank: " + permissions.level().name())).append(Component.newline()) + .append(mmString("Required Source: " + permissions.source().name())); } PlexCommand subCommand = getSubCommand(args[0]); if (subCommand == null) @@ -126,4 +146,19 @@ public class GuildCommand extends PlexCommand } return ImmutableList.of(); } + + public Component getSubs() + { + Component commands = Component.empty(); + for (int i = 0; i < this.subCommands.size(); i++) + { + commands = commands.append(messageComponent("guildsCommandDisplay", "/guild " + this.subCommands.get(i).getName(), this.subCommands.get(i).getDescription()).clickEvent(ClickEvent.suggestCommand("/guild help " + this.subCommands.get(i).getName()))); + if (i < this.subCommands.size() - 1) + { + commands = commands.append(Component.newline()); + } + } + return messageComponent("guildsHelpCommand", commands); + } + } diff --git a/src/main/java/dev/plex/command/sub/ChatSubCommand.java b/src/main/java/dev/plex/command/sub/ChatSubCommand.java index 9fec4be..f6c3939 100644 --- a/src/main/java/dev/plex/command/sub/ChatSubCommand.java +++ b/src/main/java/dev/plex/command/sub/ChatSubCommand.java @@ -19,7 +19,7 @@ import org.jetbrains.annotations.Nullable; import java.util.Objects; -@CommandParameters(name = "chat", usage = "/guild [message]") +@CommandParameters(name = "chat", usage = "/guild [message]", description = "Toggles guild chat or sends a guild chat message") @CommandPermissions(level = Rank.OP, source = RequiredCommandSource.IN_GAME, permission = "plex.guilds.chat") public class ChatSubCommand extends PlexCommand { diff --git a/src/main/java/dev/plex/command/sub/CreateSubCommand.java b/src/main/java/dev/plex/command/sub/CreateSubCommand.java index 7401488..a0cece2 100644 --- a/src/main/java/dev/plex/command/sub/CreateSubCommand.java +++ b/src/main/java/dev/plex/command/sub/CreateSubCommand.java @@ -14,7 +14,7 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -@CommandParameters(name = "create", aliases = "make", usage = "/guild ") +@CommandParameters(name = "create", aliases = "make", usage = "/guild ", description = "Creates a guild with a specified name") @CommandPermissions(level = Rank.OP, source = RequiredCommandSource.IN_GAME, permission = "plex.guilds.create") public class CreateSubCommand extends PlexCommand { diff --git a/src/main/java/dev/plex/command/sub/HomeSubCommand.java b/src/main/java/dev/plex/command/sub/HomeSubCommand.java index dd0ffc7..8542640 100644 --- a/src/main/java/dev/plex/command/sub/HomeSubCommand.java +++ b/src/main/java/dev/plex/command/sub/HomeSubCommand.java @@ -13,7 +13,7 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -@CommandParameters(name = "home", aliases = "spawn", usage = "/guild ") +@CommandParameters(name = "home", aliases = "spawn", usage = "/guild ", description = "Teleports to the guild home") @CommandPermissions(level = Rank.OP, source = RequiredCommandSource.IN_GAME, permission = "plex.guilds.home") public class HomeSubCommand extends PlexCommand { diff --git a/src/main/java/dev/plex/command/sub/InfoSubCommand.java b/src/main/java/dev/plex/command/sub/InfoSubCommand.java index d74cbc8..dea2166 100644 --- a/src/main/java/dev/plex/command/sub/InfoSubCommand.java +++ b/src/main/java/dev/plex/command/sub/InfoSubCommand.java @@ -17,7 +17,7 @@ import org.jetbrains.annotations.Nullable; import java.time.format.DateTimeFormatter; import java.util.concurrent.CompletableFuture; -@CommandParameters(name = "info", aliases = "information", usage = "/guild ") +@CommandParameters(name = "info", aliases = "information", usage = "/guild ", description = "Shows the guild's information") @CommandPermissions(level = Rank.OP, source = RequiredCommandSource.IN_GAME, permission = "plex.guilds.info") public class InfoSubCommand extends PlexCommand { diff --git a/src/main/java/dev/plex/command/sub/PrefixSubCommand.java b/src/main/java/dev/plex/command/sub/PrefixSubCommand.java index 2f514ed..a4f01e7 100644 --- a/src/main/java/dev/plex/command/sub/PrefixSubCommand.java +++ b/src/main/java/dev/plex/command/sub/PrefixSubCommand.java @@ -19,7 +19,7 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -@CommandParameters(name = "prefix", aliases = "tag,settag,setprefix", usage = "/guild ") +@CommandParameters(name = "prefix", aliases = "tag,settag,setprefix", usage = "/guild ", description = "Sets the guild's default prefix") @CommandPermissions(level = Rank.OP, source = RequiredCommandSource.IN_GAME, permission = "plex.guilds.prefix") public class PrefixSubCommand extends PlexCommand { diff --git a/src/main/java/dev/plex/command/sub/SetHomeSubCommand.java b/src/main/java/dev/plex/command/sub/SetHomeSubCommand.java index f42c157..fdd3432 100644 --- a/src/main/java/dev/plex/command/sub/SetHomeSubCommand.java +++ b/src/main/java/dev/plex/command/sub/SetHomeSubCommand.java @@ -13,7 +13,7 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -@CommandParameters(name = "sethome", aliases = "setspawn", usage = "/guild ") +@CommandParameters(name = "sethome", aliases = "setspawn", usage = "/guild ", description = "Sets the guild's home") @CommandPermissions(level = Rank.OP, source = RequiredCommandSource.IN_GAME, permission = "plex.guilds.sethome") public class SetHomeSubCommand extends PlexCommand { diff --git a/src/main/java/dev/plex/command/sub/SetWarpSubCommand.java b/src/main/java/dev/plex/command/sub/SetWarpSubCommand.java index 4108c19..882de8b 100644 --- a/src/main/java/dev/plex/command/sub/SetWarpSubCommand.java +++ b/src/main/java/dev/plex/command/sub/SetWarpSubCommand.java @@ -18,7 +18,7 @@ import org.jetbrains.annotations.Nullable; import java.util.Locale; import java.util.regex.Pattern; -@CommandParameters(name = "setwarp", aliases = "makewarp,createwarp", usage = "/guild ") +@CommandParameters(name = "setwarp", aliases = "makewarp,createwarp", usage = "/guild ", description = "Creates a new warp at player's location with a specified name") @CommandPermissions(level = Rank.OP, source = RequiredCommandSource.IN_GAME, permission = "plex.guilds.setwarp") public class SetWarpSubCommand extends PlexCommand { diff --git a/src/main/java/dev/plex/command/sub/WarpListSubCommand.java b/src/main/java/dev/plex/command/sub/WarpListSubCommand.java index c3bc986..bec78b7 100644 --- a/src/main/java/dev/plex/command/sub/WarpListSubCommand.java +++ b/src/main/java/dev/plex/command/sub/WarpListSubCommand.java @@ -1,22 +1,25 @@ package dev.plex.command.sub; +import com.google.common.collect.Lists; import dev.plex.Guilds; import dev.plex.command.PlexCommand; import dev.plex.command.annotation.CommandParameters; import dev.plex.command.annotation.CommandPermissions; import dev.plex.command.source.RequiredCommandSource; +import dev.plex.guild.Guild; import dev.plex.rank.enums.Rank; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; import org.apache.commons.lang.StringUtils; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import org.bukkit.util.StringUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.List; import java.util.Set; -@CommandParameters(name = "warps", aliases = "listwarps", usage = "/guild ") +@CommandParameters(name = "warps", aliases = "listwarps", usage = "/guild ", description = "Displays a clickable list of warps") @CommandPermissions(level = Rank.OP, source = RequiredCommandSource.IN_GAME, permission = "plex.guilds.warps") public class WarpListSubCommand extends PlexCommand { @@ -24,14 +27,33 @@ public class WarpListSubCommand extends PlexCommand { super(false); } + @Override protected Component execute(@NotNull CommandSender commandSender, @Nullable Player player, @NotNull String[] args) { assert player != null; - Guilds.get().getGuildHolder().getGuild(player.getUniqueId()).ifPresentOrElse(guild -> { - Set warps = guild.getWarps().keySet(); - send(player, mmString("Warps (" + warps.size() + "): " + StringUtils.join(warps, ", "))); + Guilds.get().getGuildHolder().getGuild(player.getUniqueId()).ifPresentOrElse(guild -> + { + send(player, getWarps(guild)); }, () -> send(player, messageComponent("guildNotFound"))); return null; } + + public Component getWarps(Guild guild) + { + Set warps = guild.getWarps().keySet(); + + List components = Lists.newArrayList(); + warps.forEach(s -> components.add(mmString("" + s))); + Component parent = mmString("Warps (" + warps.size() + "): "); + for (int i = 0; i < components.size(); i++) + { + parent = parent.append(components.get(i)); + if (i < components.size() - 1) + { + parent = parent.append(mmString(", ")); + } + } + return parent; + } } diff --git a/src/main/java/dev/plex/command/sub/WarpSubCommand.java b/src/main/java/dev/plex/command/sub/WarpSubCommand.java index 8d0d33c..ec0e32a 100644 --- a/src/main/java/dev/plex/command/sub/WarpSubCommand.java +++ b/src/main/java/dev/plex/command/sub/WarpSubCommand.java @@ -14,7 +14,7 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -@CommandParameters(name = "warp", aliases = "goto", usage = "/guild ") +@CommandParameters(name = "warp", aliases = "goto", usage = "/guild ", description = "Warps to a specified guild warp") @CommandPermissions(level = Rank.OP, source = RequiredCommandSource.IN_GAME, permission = "plex.guilds.warp") public class WarpSubCommand extends PlexCommand {