001package fr.aumgn.bukkitutils.command.executor; 002 003import org.apache.commons.lang.Validate; 004import org.bukkit.command.Command; 005import org.bukkit.command.CommandExecutor; 006import org.bukkit.command.CommandSender; 007import org.bukkit.command.PluginCommand; 008import org.bukkit.plugin.java.JavaPlugin; 009 010import fr.aumgn.bukkitutils.command.CommandsMessages; 011import fr.aumgn.bukkitutils.command.args.CommandArgsParser; 012 013public class NestedCommandExecutor implements CommandExecutor { 014 015 private final JavaPlugin plugin; 016 private final CommandsMessages messages; 017 private final String defaultTo; 018 019 public NestedCommandExecutor(JavaPlugin plugin, CommandsMessages messages, 020 String defaultTo) { 021 this.plugin = plugin; 022 this.messages = messages; 023 this.defaultTo = defaultTo; 024 } 025 026 @Override 027 public boolean onCommand(CommandSender sender, 028 Command cmd, String label, String[] rawArgs) { 029 030 CommandArgsParser parser = new CommandArgsParser(messages, rawArgs); 031 String[] args = parser.linearize(); 032 033 PluginCommand subCmd; 034 String[] subCmdArgs; 035 if (args.length == 0) { 036 if (defaultTo.isEmpty()) { 037 return false; 038 } 039 040 subCmd = plugin.getCommand(cmd.getName() + " " + defaultTo); 041 Validate.notNull(subCmd); 042 subCmdArgs = args; 043 } else { 044 subCmd = plugin.getCommand(cmd.getName() + " " + args[0]); 045 if (subCmd == null) { 046 if (defaultTo.isEmpty()) { 047 return false; 048 } 049 050 subCmd = plugin.getCommand(cmd.getName() + " " + defaultTo); 051 Validate.notNull(subCmd); 052 subCmdArgs = args; 053 } else { 054 subCmdArgs = new String[args.length - 1]; 055 System.arraycopy(args, 1, subCmdArgs, 0, args.length - 1); 056 } 057 } 058 059 subCmd.execute(sender, label + " " + args[0], subCmdArgs); 060 return true; 061 } 062}