Bukkit命令代码补全

关于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 就会将读取到的信息提示到补全内