Merge pull request #300 from StrangeOne101/master

Add Autotabbing to Commands
This commit is contained in:
OmniCypher 2015-11-15 16:12:14 -08:00
commit ac33709317
2 changed files with 224 additions and 0 deletions

View file

@ -0,0 +1,223 @@
package com.projectkorra.projectkorra.command;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player;
import com.projectkorra.projectkorra.Element;
import com.projectkorra.projectkorra.GeneralMethods;
import com.projectkorra.projectkorra.SubElement;
import com.projectkorra.projectkorra.ability.AbilityModuleManager;
import com.projectkorra.projectkorra.object.Preset;
/**
* Completes tabbing for the bending command/subcommands.
*
* @author StrangeOne101
* */
public class BendingTabComplete implements TabCompleter
{
@Override
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args)
{
if (args.length == 0 || args[0].equals("")) return getPossibleCompletionsForGivenArgs(args, getCommandsForUser(sender));
if (args.length >= 2)
{
if (args[0].equalsIgnoreCase("bind") || args[0].equalsIgnoreCase("b"))
{
if (args.length > 3 || !sender.hasPermission("bending.command.bind") || !(sender instanceof Player)) return new ArrayList<String>();
List<String> abilities = new ArrayList<String>();
if (args.length == 2)
{
for (String abil : AbilityModuleManager.abilities) {
if (GeneralMethods.canBend(sender.getName(), abil)) {
abilities.add(abil);
}
}
}
else
{
for (int i = 1; i < 10; i++) {
abilities.add("" + i);
}
}
Collections.sort(abilities);
return getPossibleCompletionsForGivenArgs(args, abilities);
}
else if (args[0].equalsIgnoreCase("display") || args[0].equalsIgnoreCase("d"))
{
if (args.length > 2 || !sender.hasPermission("bending.command.display")) return new ArrayList<String>();
List<String> list = new ArrayList<String>();
list.add("Air");
list.add("Earth");
list.add("Fire");
list.add("Water");
list.add("Chi");
list.add("AirCombos");
list.add("EarthCombos");
list.add("FireCombos");
list.add("WaterCombos");
list.add("ChiCombos");
list.add("Avatar");
return getPossibleCompletionsForGivenArgs(args, list);
}
else if (args[0].equalsIgnoreCase("add") || args[0].equalsIgnoreCase("a") || args[0].equalsIgnoreCase("choose") || args[0].equalsIgnoreCase("ch"))
{
if (args.length > 3 || !sender.hasPermission("bending.command.add")) return new ArrayList<String>();
List<String> l = new ArrayList<String>();
l.add("Air");
l.add("Earth");
l.add("Fire");
l.add("Water");
l.add("Chi");
return getPossibleCompletionsForGivenArgs(args, l);
}
else if (args[0].equalsIgnoreCase("clear") || args[0].equalsIgnoreCase("cl") || args[0].equalsIgnoreCase("c"))
{
if (args.length > 2 || !sender.hasPermission("bending.command.clear")) return new ArrayList<String>();
List<String> l = new ArrayList<String>();
for (int i = 1; i < 10; i++) {
l.add("" + i);
}
return l;
}
else if (args[0].equalsIgnoreCase("help") || args[0].equalsIgnoreCase("h"))
{
if (args.length > 2 || !sender.hasPermission("bending.command.help")) return new ArrayList<String>();
List<String> list = new ArrayList<String>();
for (Element e : Element.values()) {
list.add(e.toString());
}
for (SubElement e : SubElement.values()) {
list.add(e.toString());
}
List<String> abils = new ArrayList<String>();
for (String abil : AbilityModuleManager.abilities) {
if (GeneralMethods.canBend(sender.getName(), abil)) {
abils.add(abil);
}
}
Collections.sort(abils);
list.addAll(abils);
return getPossibleCompletionsForGivenArgs(args, list);
}
else if (args[0].equalsIgnoreCase("permaremove") || args[0].equalsIgnoreCase("pr") || args[0].equalsIgnoreCase("premove") || args[0].equalsIgnoreCase("permremove"))
{
if (args.length > 2 || !sender.hasPermission("bending.command.permaremove")) return new ArrayList<String>();
List<String> players = new ArrayList<String>();
for (Player p : Bukkit.getOnlinePlayers()) {
players.add(p.getName());
}
return getPossibleCompletionsForGivenArgs(args, players);
}
else if (args[0].equalsIgnoreCase("preset") || args[0].equalsIgnoreCase("presets") || args[0].equalsIgnoreCase("pre") || args[0].equalsIgnoreCase("set") || args[0].equalsIgnoreCase("p"))
{
if (args.length > 3 || !sender.hasPermission("bending.command.preset") || !(sender instanceof Player)) return new ArrayList<String>();
List<String> l = new ArrayList<String>();
if (args.length == 2)
{
l.add("create");
l.add("delete");
l.add("list");
l.add("bind");
return getPossibleCompletionsForGivenArgs(args, l);
}
else if (args.length == 3 && Arrays.asList(new String[] {"delete", "d", "del", "bind", "b"}).contains(args[1].toLowerCase()))
{
List<Preset> presets = Preset.presets.get(((Player)sender).getUniqueId());
List<String> presetNames = new ArrayList<String>();
if (presets != null && presets.size() != 0) {
for (Preset preset : presets) {
presetNames.add(preset.getName());
}
}
else return new ArrayList<String>();
return getPossibleCompletionsForGivenArgs(args, presetNames);
}
}
else if (args[0].equalsIgnoreCase("remove") || args[0].equalsIgnoreCase("rm"))
{
if (args.length > 3 || !sender.hasPermission("bending.command.remove")) return new ArrayList<String>();
List<String> l = new ArrayList<String>();
if (args.length == 2)
{
for (Player p : Bukkit.getOnlinePlayers()) {
l.add(p.getName());
}
}
else
{
l.add("Air");
l.add("Earth");
l.add("Fire");
l.add("Water");
l.add("Chi");
}
return getPossibleCompletionsForGivenArgs(args, l);
}
else if (args[0].equalsIgnoreCase("who") || args[0].equalsIgnoreCase("w"))
{
if (args.length > 2 || !sender.hasPermission("bending.command.remove")) return new ArrayList<String>();
List<String> l = new ArrayList<String>();
for (Player p : Bukkit.getOnlinePlayers()) {
l.add(p.getName());
}
return getPossibleCompletionsForGivenArgs(args, l);
}
else if (!PKCommand.instances.keySet().contains(args[0].toLowerCase()))
{
return new ArrayList<String>();
}
}
else
{
return getPossibleCompletionsForGivenArgs(args, getCommandsForUser(sender));
}
return new ArrayList<String>();
}
/**Breaks down the possible list and returns what is applicble depending on what the user has currently typed.
*
* @author D4rKDeagle<br><br>(Found at <a>https://bukkit.org/threads/help-with-bukkit-tab-completion-api.166436</a>)
* @param args Args of the command. Provide all of them.
* @param possibilitiesOfCompletion List of things that can be given*/
public static List<String> getPossibleCompletionsForGivenArgs(String[] args, List<String> possibilitiesOfCompletion)
{
String argumentToFindCompletionFor = args[args.length-1];
List<String> listOfPossibleCompletions = new ArrayList<String>();
for (String foundString : possibilitiesOfCompletion)
{
if (foundString.regionMatches(true, 0, argumentToFindCompletionFor, 0, argumentToFindCompletionFor.length()))
{
listOfPossibleCompletions.add(foundString);
}
}
return listOfPossibleCompletions;
}
public static List<String> getPossibleCompletionsForGivenArgs(String[] args, String[] possibilitiesOfCompletion)
{
return getPossibleCompletionsForGivenArgs(args, Arrays.asList(possibilitiesOfCompletion));
}
/**Returns a list of subcommands the sender can use.*/
public static List<String> getCommandsForUser(CommandSender sender)
{
List<String> list = new ArrayList<String>();
for (String cmd : PKCommand.instances.keySet()) {
if (sender.hasPermission("bending.command." + cmd.toLowerCase())) list.add(cmd);
}
Collections.sort(list);
return list;
}
}

View file

@ -127,5 +127,6 @@ public class Commands {
} }
}; };
projectkorra.setExecutor(exe); projectkorra.setExecutor(exe);
projectkorra.setTabCompleter(new BendingTabComplete());
} }
} }