54 lines
1.9 KiB
Java
54 lines
1.9 KiB
Java
/*
|
|
* Copyright (c) 2017 univento.eu - All rights reserved
|
|
* You are not allowed to use, distribute or modify this code
|
|
*/
|
|
|
|
package eu.univento.core.api.command;
|
|
|
|
import org.bukkit.command.CommandSender;
|
|
import org.bukkit.command.TabCompleter;
|
|
|
|
import java.lang.reflect.InvocationTargetException;
|
|
import java.lang.reflect.Method;
|
|
import java.util.AbstractMap;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
/**
|
|
* Command Framework - BukkitCompleter <br>
|
|
* An implementation of the TabCompleter class allowing for multiple tab
|
|
* completers per command
|
|
*
|
|
* @author minnymin3
|
|
*
|
|
*/
|
|
public class BukkitCompleter implements TabCompleter {
|
|
|
|
private Map<String, Map.Entry<Method, Object>> completers = new HashMap<>();
|
|
|
|
public void addCompleter(String label, Method m, Object obj) {
|
|
completers.put(label, new AbstractMap.SimpleEntry<>(m, obj));
|
|
}
|
|
|
|
@Override
|
|
public List<String> onTabComplete(CommandSender sender, org.bukkit.command.Command command, String label, String[] args) {
|
|
for (int i = args.length; i >= 0; i--) {
|
|
StringBuilder buffer = new StringBuilder();
|
|
buffer.append(label.toLowerCase());
|
|
for (int x = 0; x < i; x++) {
|
|
if (!args[x].equals("") && !args[x].equals(" ")) buffer.append(".").append(args[x].toLowerCase());
|
|
}
|
|
String cmdLabel = buffer.toString();
|
|
if (completers.containsKey(cmdLabel)) {
|
|
Map.Entry<Method, Object> entry = completers.get(cmdLabel);
|
|
try {
|
|
return (List<String>) entry.getKey().invoke(entry.getValue(), new CommandArgs(sender, command, label, args, cmdLabel.split("\\.").length - 1));
|
|
} catch (IllegalArgumentException | IllegalAccessException | InvocationTargetException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
} |