/** * Adds the methods on <code>handler</code> annotated with {@link FlexHandler} to the dispatcher * tree. * * @param plugin the plugin to bind the commands to. Theoretically this parameter can take the * value <code>null</code>; however it is recommended to pass a valid {@link Plugin} to aid * server administrators in debugging problems. * @param handler the object to extract handling methods from */ public void addHandler(Plugin plugin, Object handler) { if (plugin != null) { clients.add(plugin); } try { for (Method m : handler.getClass().getMethods()) { if (m.isAnnotationPresent(FlexHandler.class)) { FlexHandler annotation = m.getAnnotation(FlexHandler.class); String[] path = annotation.value().split(" "); String rootName = path[0]; FlexMethodHandlingContext hctx = new FlexMethodHandlingContext(plugin, handler, m); hctx.validate(); root.add(path, hctx); } } } catch (FlexBuildingException e) { logException(plugin, e, "Error when building command trees: " + e.toString()); } }
/** * Executes the given command, returning its success. * * @param sender the source of the command * @param cmd the command which was executed * @param label the alias of the command which was used * @param args the command arguments passed * @return <code>true</code> if the command succeeded, else <code>false</code> */ public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { FlexCommandContext ctx = new FlexCommandContext(sender, cmd, label, args); return root.dispatch(ctx); }
/** * Creates an alias under <code>aliasPath</code> for the command tree under <code>originalPath * </code>. * * @param originalPath the path to use as the source. Example: <code>{"myplugin", "group", "add"} * </code>. * @param aliasPath the path to use as the destination. Example: <code>{"addgroup"}</code>. */ public void alias(String[] originalPath, String[] aliasPath) { FlexDispatcher source = root.traverse(originalPath); root.extend(aliasPath, source); }