История изменений
Исправление crutch_master, (текущая версия) :
Короче, я сдедал через Reflection и, в принципе, доволен. У меня класс с командами, куда я всё пишу и вот эта херня их ищет
@Autowired
private Commands commands;
private HashMap<String, Method> commandsList;
public MksControl() {
commandsList = new HashMap<String, Method>();
Method[] ms = Commands.class.getMethods();
for (Method m : ms) commandsList.put(m.getName(), m);
}
public String control(String msg) {
String[] cmd = msg.split(" ");
String commandStr = cmd[0];
String[] args = Arrays.copyOfRange(cmd, 1, cmd.length);
Method m = commandsList.get(commandStr);
if (m == null) return "Command not found:"+commandStr;
int c = m.getParameterCount();
if (c <= args.length) {
String ret = "Error";
try {
args = Arrays.copyOfRange(args, 0, c);
ret = (String)m.invoke(commands, (Object[])args);
} catch (Exception e) {
return "Error when calling command:"+e.getMessage();
}
return ret;
}
return "Need more args for "+commandStr+"("+c+" vs "+args.length+")";
}
Исходная версия crutch_master, :
Короче, я сдедал через Reflection и, в принципе, доволен. У меня класс с командами, куда я всё пишу и вот эта херня их ищет
@Autowired
private Commands commands;
private HashMap<String, Method> commandsList;
public MksControl() {
commandsList = new HashMap<String, Method>();
Method[] ms = Commands.class.getMethods();
for (Method m : ms) commandsList.put(m.getName(), m);
}
public String control(String msg) {
String[] cmd = msg.split(" ");
String commandStr = cmd[0];
String[] args = Arrays.copyOfRange(cmd, 1, cmd.length);
Method m = commandsList.get(commandStr);
if (m == null) return "Command not found:"+commandStr;
int c = m.getParameterCount();
if (c <= args.length) {
String ret = "Error";
try {
args = Arrays.copyOfRange(args, 0, c);
ret = (String)m.invoke(commands, (Object[])args);
} catch (Exception e) {
return "Error when calling command:"+e.getMessage();
}
return ret;
}
return "Need more args for "+commandStr+"("+c+" vs "+args.length+")";
}