diff --git a/galaxy/src/main/java/com/alttd/chat/commands/PartyCommand.java b/galaxy/src/main/java/com/alttd/chat/commands/PartyCommand.java index 9e04b0c..8260fc1 100644 --- a/galaxy/src/main/java/com/alttd/chat/commands/PartyCommand.java +++ b/galaxy/src/main/java/com/alttd/chat/commands/PartyCommand.java @@ -14,12 +14,19 @@ import org.bukkit.OfflinePlayer; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; -public class PartyCommand implements CommandExecutor { +public class PartyCommand implements CommandExecutor, TabCompleter { @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { @@ -189,6 +196,42 @@ public class PartyCommand implements CommandExecutor { sender.sendMessage(MiniMessage.get().parse(stringBuilder.toString())); } + @Override + public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + List possibleValues = new ArrayList<>(); + String current = args.length > 0 ? args[args.length - 1].toLowerCase() : ""; + + if (args.length <= 1) { + possibleValues.add("create"); + possibleValues.add("invite"); + possibleValues.add("join"); + possibleValues.add("leave"); + possibleValues.add("remove"); + possibleValues.add("info"); + return finalizeSuggest(possibleValues, current); + } + + switch (args[0].toLowerCase()) { + case "invite","remove" -> { + Bukkit.getOnlinePlayers().stream().filter(p -> !p.getName().equals(sender.getName())).forEach(p -> possibleValues.add(p.getName())); + } + } + + return finalizeSuggest(possibleValues, current.toLowerCase()); + } + + public List finalizeSuggest(List possibleValues, String remaining) { + List finalValues = new ArrayList<>(); + + for (String str : possibleValues) { + if (str.toLowerCase().startsWith(remaining)) { + finalValues.add(str); + } + } + + return finalValues; + } + private enum CommandUsage { CREATE("/party create <#FFE800>A party name must be 3-16 characters'> " + "A party password must be 3-16 characters\n" +