/* * 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
* An implementation of the TabCompleter class allowing for multiple tab * completers per command * * @author minnymin3 * */ public class BukkitCompleter implements TabCompleter { private Map> completers = new HashMap<>(); public void addCompleter(String label, Method m, Object obj) { completers.put(label, new AbstractMap.SimpleEntry<>(m, obj)); } @Override public List 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 entry = completers.get(cmdLabel); try { return (List) entry.getKey().invoke(entry.getValue(), new CommandArgs(sender, command, label, args, cmdLabel.split("\\.").length - 1)); } catch (IllegalArgumentException | IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } } } return null; } }