@Override
  public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    boolean isPlayer = false;
    Player player = null;
    if (sender instanceof Player) {
      isPlayer = true;
      player = (Player) sender;
    }

    NICommands command;
    try {
      command = NICommands.valueOf(args[0].toUpperCase());
    } catch (ArrayIndexOutOfBoundsException | IllegalArgumentException ex) {
      if (isPlayer) {
        plugin
            .getPlayerMessenger()
            .sendMessage(
                (Player) sender, "Not a valid command. Please type /nexusinv help for help.");
      } else {
        displayConsoleHelp();
      }

      return true;
    }

    switch (command) {
      case CONVERT:
        if (isPlayer) {
          if (player.hasPermission(PERMISSION_NODE + "convert")) {
            if (args.length == 2) {
              switch (args[1].toUpperCase()) {
                case "MULTIVERSE":
                  plugin
                      .getPlayerMessenger()
                      .sendMessage(
                          player,
                          "Converting from MultiVerse-Inventories! All messages are sent to console!");
                  mvConvert();
                  break;
                case "MULTIINV":
                  plugin
                      .getPlayerMessenger()
                      .sendMessage(
                          player, "Converting from MultiInv! All messages are sent to console!");
                  miConvert();
                  break;
                default:
                  plugin
                      .getPlayerMessenger()
                      .sendMessage(player, "Valid arguments are: MULTIVERSE | MULTIINV");
                  break;
              }
            } else {
              plugin
                  .getPlayerMessenger()
                  .sendMessage(
                      player, "You must specify the plugin to convert from: MULTIVERSE | MULTIINV");
            }
          } else {
            plugin.getPlayerMessenger().sendMessage(player, NO_PERMISSION);
          }
        } else {
          if (args.length == 2) {
            switch (args[1].toUpperCase()) {
              case "MULTIVERSE":
                NexusInventory.log.info("Converting from MultiVerse-Inventories!");
                mvConvert();
                break;
              case "MULTIINV":
                NexusInventory.log.info("Converting from MultiInv!");
                miConvert();
                break;
              default:
                NexusInventory.log.info("Valid arguments are: MULTIVERSE | MULTIINV");
                break;
            }
          } else {
            NexusInventory.log.warning(
                "You must specify the plugin to convert from: MULTIVERSE | MULTIINV");
          }
        }

        return true;

      case DEBUG:
        if (isPlayer) {
          if (player.hasPermission(PERMISSION_NODE + "debug")) {}

          if (plugin.dreport != null) {
            LinkedList<String> customdata = new LinkedList<String>();
            customdata.add("NexusInventory Custom Data");
            customdata.add("================================");
            customdata.add("-----------config.yml-----------");
            BufferedReader reader = null;
            try {
              reader =
                  new BufferedReader(
                      new FileReader(plugin.getDataFolder() + File.separator + "config.yml"));
              String line = null;
              while ((line = reader.readLine()) != null) {
                if (line.startsWith("  password:"******"  password: NOTSHOWN";
                }
                customdata.add(line);
              }
            } catch (FileNotFoundException e) {
            } catch (IOException e) {
            } finally {
              if (reader != null) {
                try {
                  reader.close();
                } catch (IOException e) {
                }
                reader = null;
              }
            }
            customdata.add("-----------groups.yml-----------");
            try {
              reader =
                  new BufferedReader(
                      new FileReader(plugin.getDataFolder() + File.separator + "groups.yml"));
              String line = null;
              while ((line = reader.readLine()) != null) {
                customdata.add(line);
              }
            } catch (FileNotFoundException e) {
            } catch (IOException e) {
            } finally {
              if (reader != null) {
                try {
                  reader.close();
                } catch (IOException e) {
                }
              }
            }
            plugin.dreport.createReport(sender, customdata);
          }
          sender.sendMessage(
              ChatColor.RED
                  + "In order to generate a debug report you need the plugin DebugReport!");
        }

        return true;

      case HELP:
        if (isPlayer) {
          if (player.hasPermission(PERMISSION_NODE + "help")) {
            displayPlayerHelp(player);
          } else {
            plugin.getPlayerMessenger().sendMessage(player, NO_PERMISSION);
          }
        }

        return true;

      case RELOAD:
        if (isPlayer) {
          if (player.hasPermission(PERMISSION_NODE + "reload")) {
            reload(player);
          } else {
            plugin.getPlayerMessenger().sendMessage(player, NO_PERMISSION);
          }
        } else {
          reload();
        }

        return true;

      case SETWORLDDEFAULT:
        if (isPlayer) {
          if (player.hasPermission(PERMISSION_NODE + "setdefaults")) {
            Group group;

            if (args.length == 2) {
              group =
                  args[1].equalsIgnoreCase("simpleplayerdata")
                      ? new Group("simpleplayerdata", null, null)
                      : plugin.getGroupManager().getGroup(args[1]);
              setWorldDefault(player, group);
            } else {
              try {
                group = plugin.getGroupManager().getGroupFromWorld(player.getWorld().getName());
                setWorldDefault(player, group);
              } catch (IllegalArgumentException ex) {
                plugin
                    .getPlayerMessenger()
                    .sendMessage(player, "You are not standing in a valid world!");
              }
            }
          } else {
            plugin.getPlayerMessenger().sendMessage(player, NO_PERMISSION);
          }
        } else {
          NexusInventory.log.warning("This command can only be run from ingame.");
        }

        return true;
    }

    return false;
  }
 private void reloadConfigFiles() {
   plugin.getConfigManager().reloadConfigs();
   plugin.getGroupManager().loadGroupsToMemory();
 }