package de.tobiyas.racesandclasses.commands;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import de.tobiyas.racesandclasses.RacesAndClasses;
import de.tobiyas.racesandclasses.commands.bind.CommandExecutor_BindTrait;
import de.tobiyas.racesandclasses.commands.bind.CommandExecutor_UseTrait;
import de.tobiyas.racesandclasses.commands.chat.CommandExecutor_LocalChat;
import de.tobiyas.racesandclasses.commands.chat.CommandExecutor_Whisper;
import de.tobiyas.racesandclasses.commands.chat.channels.CommandExecutor_BroadCast;
import de.tobiyas.racesandclasses.commands.chat.channels.CommandExecutor_Channel;
import de.tobiyas.racesandclasses.commands.chat.channels.CommandExecutor_Racechat;
import de.tobiyas.racesandclasses.commands.classes.CommandExecutor_Class;
import de.tobiyas.racesandclasses.commands.config.CommandExecutor_ConfigRegenerate;
import de.tobiyas.racesandclasses.commands.debug.CommandExecutor_Edit;
import de.tobiyas.racesandclasses.commands.debug.CommandExecutor_RaceDebug;
import de.tobiyas.racesandclasses.commands.force.CommandExecutor_ForceClass;
import de.tobiyas.racesandclasses.commands.force.CommandExecutor_ForceRace;
import de.tobiyas.racesandclasses.commands.general.CommandExecutor_EmptyCommand;
import de.tobiyas.racesandclasses.commands.general.CommandExecutor_PlayerInfo;
import de.tobiyas.racesandclasses.commands.general.CommandExecutor_RacesReload;
import de.tobiyas.racesandclasses.commands.health.CommandExecutor_HP;
import de.tobiyas.racesandclasses.commands.health.CommandExecutor_Mana;
import de.tobiyas.racesandclasses.commands.health.CommandExecutor_RaceGod;
import de.tobiyas.racesandclasses.commands.health.CommandExecutor_RaceHeal;
import de.tobiyas.racesandclasses.commands.health.CommandExecutor_ShowTraits;
import de.tobiyas.racesandclasses.commands.help.CommandExecutor_PermissionCheck;
import de.tobiyas.racesandclasses.commands.help.CommandExecutor_RaceHelp;
import de.tobiyas.racesandclasses.commands.help.CommandExecutor_RacesVersion;
import de.tobiyas.racesandclasses.commands.help.CommandExecutor_TraitList;
import de.tobiyas.racesandclasses.commands.level.Command_RACLevel;
import de.tobiyas.racesandclasses.commands.pets.Command_RaCPet;
import de.tobiyas.racesandclasses.commands.races.CommandExecutor_Race;
import de.tobiyas.racesandclasses.commands.racespawn.CommandExecutor_RaceSpawn;
import de.tobiyas.racesandclasses.commands.reflect.CommandMap;
import de.tobiyas.racesandclasses.commands.skilltree.CommandExecutor_SkillTree;
import de.tobiyas.racesandclasses.commands.statistics.CommandExecutor_Statistics;
public class CommandRegisterer {
/**
* A list of commands registered.
*/
protected final List<CommandInterface> commands = new LinkedList<CommandInterface>();
/**
* The Plugin to use.
*/
protected final RacesAndClasses plugin;
public CommandRegisterer(RacesAndClasses plugin) {
this.plugin = plugin;
}
/**
* Registers the Commands.
*/
public void registerCommands(){
long currentTime = System.currentTimeMillis();
commands.clear();
commands.add(new CommandExecutor_Race());
commands.add(new CommandExecutor_Racechat());
commands.add(new CommandExecutor_RaceHelp());
commands.add(new CommandExecutor_Whisper());
commands.add(new CommandExecutor_TraitList());
commands.add(new CommandExecutor_RaceHeal());
commands.add(new CommandExecutor_RaceDebug());
commands.add(new CommandExecutor_Class());
commands.add(new CommandExecutor_HP());
commands.add(new CommandExecutor_Mana());
commands.add(new CommandExecutor_Channel());
commands.add(new CommandExecutor_RaceGod());
commands.add(new CommandExecutor_BroadCast());
commands.add(new CommandExecutor_LocalChat());
commands.add(new CommandExecutor_PlayerInfo());
commands.add(new CommandExecutor_PermissionCheck());
commands.add(new CommandExecutor_RacesReload());
commands.add(new CommandExecutor_RacesVersion());
commands.add(new CommandExecutor_Statistics());
commands.add(new CommandExecutor_ShowTraits());
commands.add(new CommandExecutor_Edit());
commands.add(new CommandExecutor_ForceRace());
commands.add(new CommandExecutor_ForceClass());
commands.add(new CommandExecutor_ConfigRegenerate());
commands.add(new CommandExecutor_RaceSpawn());
commands.add(new Command_RACLevel());
commands.add(new Command_RaCPet());
commands.add(new CommandExecutor_BindTrait());
commands.add(new CommandExecutor_UseTrait());
commands.add(new CommandExecutor_SkillTree());
Map<String,String> remap = plugin.getConfigManager().getGeneralConfig().getConfig_command_remaps();
for(CommandInterface command : commands){
command.applyRemapping(remap);
}
//remove all disabled commands.
List<String> disabledCommands = plugin.getConfigManager().getGeneralConfig().getConfig_general_disable_commands();
Iterator<CommandInterface> it = commands.iterator();
while(it.hasNext()){
CommandInterface command = it.next();
command.filterToDisabledCommands(disabledCommands);
if(!command.hasAnyCommand()) it.remove();
}
CommandMap.registerCommands(commands, plugin);
if(System.currentTimeMillis() - currentTime > 1000){
plugin.log("Took too long to Init all commands! Please report this. Time taken: " + (System.currentTimeMillis() - currentTime) + " mSecs.");
}
}
/**
* Registers all commands as Error.
*/
public void registerAllCommandsAsError() {
for(CommandInterface command : this.commands){
new CommandExecutor_EmptyCommand(command.getCommandNames());
}
}
}