关于BukkitApi的指令补全代码写法.
建议
写好的一个方法,具体可以自己理解下代码,原理也很简单
1 2 3 4 5 6 7 8 9
| private List<String> filterByStartingLetter(String input, String... options) { List<String> completions = new ArrayList<>(); for (String option : options) { if (option.toLowerCase().startsWith(input.toLowerCase())) { completions.add(option); } } return completions; }
|
开始
让指令的类继承TabCompleter接口,并且重写接口方法
1 2 3 4 5
| @Override public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) { return null; }
|
这里就是tab补全的方法,可以用command.getName()获取当前输入的指令,来进行判断是否需要补全。
具体案例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @Override public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) { if (command.getName().equalsIgnoreCase("isk")) { if (args.length == 1){ return filterByStartingLetter(args[0],"kong","reload","help"); } else if (args.length == 2) { if (args[0].equalsIgnoreCase("item")){ ConfigurationSection baoshi = FileYML.saic.getConfigurationSection("BaoShi"); Set<String> keys = baoshi.getKeys(false); return filterByStartingLetter(args[1],keys.toArray(new String[0])); } } } return null; }
|
1.这是一个比如我们输入了/isk
就会出现kong
reload
help
的指令补全提示
2.当指令长度达到2并且第二个指令是item/isk item
就会将读取到的信息提示到补全内