fix: 修复命令错误 修复Sort Tab注解可用参数错误

Signed-off-by: 502647092 <admin@yumc.pw>
merge/1/MERGE
502647092 2016-07-25 19:16:22 +08:00
parent 417a189f9b
commit aa324f54db
5 changed files with 83 additions and 53 deletions

View File

@ -1,6 +1,5 @@
package pw.yumc.YumCore.commands;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
@ -79,7 +78,7 @@ public class CommandHelp {
}
final String helpkey = label + page;
if (!cacheHelp.containsKey(helpkey)) {
final List<String> helpList = new ArrayList<>();
final List<String> helpList = new LinkedList<>();
if (page > this.HELPPAGECOUNT || page < 1) {
// 帮助页面不存在
helpList.add(String.format(commandNotFound, HELPPAGECOUNT));
@ -115,7 +114,13 @@ public class CommandHelp {
static class CommandComparator implements Comparator<CommandInfo> {
@Override
public int compare(final CommandInfo o1, final CommandInfo o2) {
return Integer.valueOf(o1.getSort()).compareTo(Integer.valueOf(o2.getSort()));
if (o1.getSort() > o2.getSort()) {
return 1;
} else if (o1.getSort() == o2.getSort()) {
return 0;
} else {
return -1;
}
}
}
}

View File

@ -2,6 +2,7 @@ package pw.yumc.YumCore.commands;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@ -37,20 +38,23 @@ public class CommandManager implements TabExecutor {
/**
*
*/
Set<CommandInfo> cmdlist = new HashSet<>();
Set<CommandInfo> cmds = new HashSet<>();
/**
* Tab
*/
Set<TabInfo> tablist = new HashSet<>();
Set<TabInfo> tabs = new HashSet<>();
/**
*
*/
Map<String, CommandInfo> cmdcache = new HashMap<>();
Map<String, CommandInfo> cmdCache = new HashMap<>();
/**
*
*/
List<String> cmdNameCache = new ArrayList<>();
/**
*
*/
CommandHelp help = new CommandHelp(cmdlist);
CommandHelp help;
/**
*
*/
@ -97,10 +101,6 @@ public class CommandManager implements TabExecutor {
}
final CommandArgument cmdArgs = new CommandArgument(sender, command, label, moveStrings(args, 1));
final CommandInfo ci = checkCache(subcmd);
try {
} catch (final Exception e) {
}
return ci.execute(cmdArgs);
}
@ -109,10 +109,9 @@ public class CommandManager implements TabExecutor {
final List<String> completions = new ArrayList<>();
final String token = args[args.length - 1];
if (args.length == 1) {
final Set<String> commands = this.cmdcache.keySet();
StringUtil.copyPartialMatches(args[0], commands, completions);
StringUtil.copyPartialMatches(args[0], cmdNameCache, completions);
} else if (args.length >= 2) {
for (final TabInfo tab : tablist) {
for (final TabInfo tab : tabs) {
StringUtil.copyPartialMatches(token, tab.execute(sender, command, token, args), completions);
}
StringUtil.copyPartialMatches(token, getPlayerTabComplete(sender, command, alias, args), completions);
@ -135,7 +134,20 @@ public class CommandManager implements TabExecutor {
}
registerTab(method, clazz);
}
help = new CommandHelp(cmdlist);
help = new CommandHelp(cmds);
buildCmdNameCache();
}
/**
*
*/
private void buildCmdNameCache() {
cmdNameCache.clear();
for (final CommandInfo cmd : cmds) {
cmdNameCache.add(cmd.getName());
cmdNameCache.addAll(Arrays.asList(cmd.getCommand().aliases()));
}
cmdNameCache.add("help");
}
/**
@ -146,18 +158,18 @@ public class CommandManager implements TabExecutor {
* @return
*/
private CommandInfo checkCache(final String subcmd) {
if (!cmdcache.containsKey(subcmd)) {
for (final CommandInfo cmdinfo : cmdlist) {
if (!cmdCache.containsKey(subcmd)) {
for (final CommandInfo cmdinfo : cmds) {
if (cmdinfo.isValid(subcmd)) {
cmdcache.put(subcmd, cmdinfo);
cmdCache.put(subcmd, cmdinfo);
break;
}
}
if (!cmdcache.containsKey(subcmd)) {
cmdcache.put(subcmd, CommandInfo.Unknow);
if (!cmdCache.containsKey(subcmd)) {
cmdCache.put(subcmd, CommandInfo.Unknow);
}
}
return cmdcache.get(subcmd);
return cmdCache.get(subcmd);
}
/**
@ -215,8 +227,8 @@ public class CommandManager implements TabExecutor {
if (ci != null) {
final Class<?>[] params = method.getParameterTypes();
if (params.length == 1 && params[0].equals(CommandArgument.class)) {
cmdlist.add(ci);
cmdcache.put(ci.getName(), ci);
cmds.add(ci);
cmdCache.put(ci.getName(), ci);
return true;
}
Log.warning(String.format(argumentTypeError, method.getName(), clazz.getClass().getName()));
@ -237,7 +249,7 @@ public class CommandManager implements TabExecutor {
final TabInfo ti = TabInfo.parse(method, clazz);
if (ti != null) {
if (method.getReturnType().equals(List.class)) {
tablist.add(ti);
tabs.add(ti);
return true;
}
Log.warning(String.format(returnTypeError, method.getName(), clazz.getClass().getName()));

View File

@ -1,18 +1,17 @@
package pw.yumc.YumCore.commands.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
*
*
* @since 2016723 9:00:27
* @author
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Async {
}
package pw.yumc.YumCore.commands.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
*
*
* @since 2016723 9:00:27
* @author
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Async {
}

View File

@ -1,11 +1,18 @@
package pw.yumc.YumCore.commands.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
*
*
* @since 2016723 9:04:56
* @author
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Sort {
/**
* @return

View File

@ -1,10 +1,17 @@
package pw.yumc.YumCore.commands.annotation;
/**
*
*
* @since 2016723 9:43:40
* @author
*/
public @interface Tab {
}
package pw.yumc.YumCore.commands.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
*
*
* @since 2016723 9:43:40
* @author
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Tab {
}