mirror of
https://e.coding.net/circlecloud/YumCore.git
synced 2024-11-24 02:08:48 +00:00
feat: 修复命令注册错误
Signed-off-by: 502647092 <admin@yumc.pw>
This commit is contained in:
parent
1a7e967826
commit
ad4126a810
@ -56,12 +56,11 @@ public class CommandInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static CommandInfo parse(final Method method, final Object origin) {
|
public static CommandInfo parse(final Method method, final Object origin) {
|
||||||
final Class<?> clazz = method.getClass();
|
final Cmd command = method.getAnnotation(Cmd.class);
|
||||||
final Cmd command = clazz.getAnnotation(Cmd.class);
|
|
||||||
if (command != null) {
|
if (command != null) {
|
||||||
final Help help = clazz.getAnnotation(Help.class);
|
final Help help = method.getAnnotation(Help.class);
|
||||||
final Async async = clazz.getAnnotation(Async.class);
|
final Async async = method.getAnnotation(Async.class);
|
||||||
final Sort sort = clazz.getAnnotation(Sort.class);
|
final Sort sort = method.getAnnotation(Sort.class);
|
||||||
return new CommandInfo(method, origin, command, help != null ? help : Help.DEFAULT, async != null, sort != null ? sort.sort() : 50);
|
return new CommandInfo(method, origin, command, help != null ? help : Help.DEFAULT, async != null, sort != null ? sort.sort() : 50);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
@ -52,6 +52,11 @@ public class CommandManager implements TabExecutor {
|
|||||||
*/
|
*/
|
||||||
CommandHelp help = new CommandHelp(cmdlist);
|
CommandHelp help = new CommandHelp(cmdlist);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 插件命令
|
||||||
|
*/
|
||||||
|
PluginCommand cmd;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 命令管理器
|
* 命令管理器
|
||||||
*
|
*
|
||||||
@ -59,7 +64,7 @@ public class CommandManager implements TabExecutor {
|
|||||||
* 注册的命令
|
* 注册的命令
|
||||||
*/
|
*/
|
||||||
public CommandManager(final String name) {
|
public CommandManager(final String name) {
|
||||||
final PluginCommand cmd = plugin.getCommand(name);
|
cmd = plugin.getCommand(name);
|
||||||
if (cmd == null) {
|
if (cmd == null) {
|
||||||
throw new IllegalStateException("未找到命令 必须在plugin.yml先注册 " + name + " 命令!");
|
throw new IllegalStateException("未找到命令 必须在plugin.yml先注册 " + name + " 命令!");
|
||||||
}
|
}
|
||||||
@ -77,7 +82,7 @@ public class CommandManager implements TabExecutor {
|
|||||||
*/
|
*/
|
||||||
public CommandManager(final String name, final CommandExecutor executor) {
|
public CommandManager(final String name, final CommandExecutor executor) {
|
||||||
this(name);
|
this(name);
|
||||||
registerCommands(executor);
|
register(executor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -94,14 +99,16 @@ public class CommandManager implements TabExecutor {
|
|||||||
final String[] subargs = moveStrings(args, 1);
|
final String[] subargs = moveStrings(args, 1);
|
||||||
if (!cmdcache.containsKey(label)) {
|
if (!cmdcache.containsKey(label)) {
|
||||||
for (final CommandInfo cmdinfo : cmdlist) {
|
for (final CommandInfo cmdinfo : cmdlist) {
|
||||||
if (cmdinfo.isValid(label)) {
|
if (cmdinfo.isValid(subcmd)) {
|
||||||
cmdcache.put(label, cmdinfo);
|
cmdcache.put(subcmd, cmdinfo);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cmdcache.put(label, CommandInfo.Unknow);
|
if (!cmdcache.containsKey(subcmd)) {
|
||||||
|
cmdcache.put(subcmd, CommandInfo.Unknow);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return cmdcache.get(label).execute(sender, command, label, subargs);
|
return cmdcache.get(subcmd).execute(sender, command, label, subargs);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -127,29 +134,13 @@ public class CommandManager implements TabExecutor {
|
|||||||
* @param clazz
|
* @param clazz
|
||||||
* 子命令处理类
|
* 子命令处理类
|
||||||
*/
|
*/
|
||||||
public void registerCommands(final CommandExecutor clazz) {
|
public void register(final CommandExecutor clazz) {
|
||||||
final Method[] methods = clazz.getClass().getDeclaredMethods();
|
final Method[] methods = clazz.getClass().getDeclaredMethods();
|
||||||
for (final Method method : methods) {
|
for (final Method method : methods) {
|
||||||
final CommandInfo ci = CommandInfo.parse(method, clazz);
|
if (registerCommand(method, clazz)) {
|
||||||
if (ci != null) {
|
continue;
|
||||||
final Class<?>[] params = method.getParameterTypes();
|
|
||||||
if (params.length == 1 && params[0].equals(CommandArgument.class)) {
|
|
||||||
if (cmdlist.add(ci)) {
|
|
||||||
cmdcache.put(ci.getName(), ci);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Log.warning(String.format(argumentTypeError, method.getName(), clazz.getClass().getName()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
final TabInfo ti = TabInfo.parse(method, clazz);
|
|
||||||
if (ti != null) {
|
|
||||||
if (!method.getReturnType().equals(List.class)) {
|
|
||||||
Log.warning(String.format(returnTypeError, method.getName(), clazz.getClass().getName()));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
tablist.add(ti);
|
|
||||||
}
|
}
|
||||||
|
registerTab(method, clazz);
|
||||||
}
|
}
|
||||||
help = new CommandHelp(cmdlist);
|
help = new CommandHelp(cmdlist);
|
||||||
}
|
}
|
||||||
@ -195,4 +186,47 @@ public class CommandManager implements TabExecutor {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册命令
|
||||||
|
*
|
||||||
|
* @param method
|
||||||
|
* 方法
|
||||||
|
* @param clazz
|
||||||
|
* 调用对象
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
|
private boolean registerCommand(final Method method, final CommandExecutor clazz) {
|
||||||
|
final CommandInfo ci = CommandInfo.parse(method, clazz);
|
||||||
|
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);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Log.warning(String.format(argumentTypeError, method.getName(), clazz.getClass().getName()));
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册Tab补全
|
||||||
|
*
|
||||||
|
* @param method
|
||||||
|
* 方法
|
||||||
|
* @param clazz
|
||||||
|
* 调用对象
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
|
private boolean registerTab(final Method method, final CommandExecutor clazz) {
|
||||||
|
final TabInfo ti = TabInfo.parse(method, clazz);
|
||||||
|
if (ti != null) {
|
||||||
|
if (method.getReturnType().equals(List.class)) {
|
||||||
|
tablist.add(ti);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Log.warning(String.format(returnTypeError, method.getName(), clazz.getClass().getName()));
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -35,8 +35,7 @@ public class TabInfo {
|
|||||||
* @return {@link TabInfo}
|
* @return {@link TabInfo}
|
||||||
*/
|
*/
|
||||||
public static TabInfo parse(final Method method, final Object origin) {
|
public static TabInfo parse(final Method method, final Object origin) {
|
||||||
final Class<?> clazz = method.getClass();
|
final Tab tab = method.getAnnotation(Tab.class);
|
||||||
final Tab tab = clazz.getAnnotation(Tab.class);
|
|
||||||
if (tab != null) {
|
if (tab != null) {
|
||||||
return new TabInfo(method, origin);
|
return new TabInfo(method, origin);
|
||||||
}
|
}
|
||||||
|
@ -23,12 +23,12 @@ public @interface Help {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String description() {
|
public String description() {
|
||||||
return "这家伙很懒";
|
return "没写帮助信息";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String possibleArguments() {
|
public String possibleArguments() {
|
||||||
return "没有帮助信息";
|
return "这家伙很懒";
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user