/** Class constructor. */
 public SetValueArgument() {
   super(
       new String[] {Language.COMMAND_SETVALUE.toString()},
       -1,
       "spleef.setvalue",
       null,
       Language.COMMAND_SETVALUE_DESCRIPTION.toString());
 }
  /*
   * (non-Javadoc)
   * @see de.oppermann.bastian.spleef.util.command.AbstractArgument#onTabComplete(org.bukkit.entity.Player, java.lang.String[])
   */
  @Override
  public List<String> onTabComplete(Player sender, String[] args) {
    ArrayList<String> list = new ArrayList<>();
    if (args.length == 1) {
      list.add(Language.COMMAND_SETVALUE.toString());
    }
    if (args.length == 2) {
      list.addAll(Sets.newHashSet(SpleefArena.getArenaNames()));
    }
    if (args.length == 3) {
      list.add(Language.FLAG_ENABLED.toString());
      list.add(Language.FLAG_SNOWBALLS_ENABLED.toString());
      list.add(Language.FLAG_MAX_SNOWBALLS.toString());
      list.add(Language.FLAG_MODE.toString());
      list.add(Language.FLAG_CUSTOMINVENTORY.toString());
      list.add(Language.FLAG_CUSTOMINVENTORY_ENABLED.toString());
      list.add(Language.FLAG_VEHICLE.toString());
      list.add(Language.FLAG_INSTANT_BLOCK_DESTORY.toString());
      list.add(Language.FLAG_REWARD_MONEY_PARTICIPATION.toString());
      list.add(Language.FLAG_REWARD_MONEY_WINNING.toString());
      list.add(Language.FLAG_REWARD_POINTS_PARTICIPATION.toString());
      list.add(Language.FLAG_REWARD_POINTS_WINNING.toString());
      list.add(Language.FLAG_FREEZE_PLAYERS.toString());
      list.add(Language.FLAG_MODIFY_GRAVITY.toString());
      list.add(Language.FLAG_GRAVITY.toString());
      list.add(Language.FLAG_MIN_PLAYERS.toString());
      list.add(Language.FLAG_REQUIRED_PLAYERS_TO_START_COUNTDOWN.toString());
      list.add(Language.FLAG_SPECTATE_TYPE.toString());
      list.add(Language.FLAG_SPECTATE_LOCATION.toString());
      list.add(Language.FLAG_ARENA_COUNTDOWN.toString());
      list.add(Language.FLAG_LOBBY_COUNTDOWN.toString());
    }
    if (args.length == 4) {
      if (args[2].equalsIgnoreCase(Language.FLAG_ENABLED.toString())
          || args[2].equalsIgnoreCase(Language.FLAG_SNOWBALLS_ENABLED.toString())
          || args[2].equalsIgnoreCase(Language.FLAG_CUSTOMINVENTORY_ENABLED.toString())
          || args[2].equalsIgnoreCase(Language.FLAG_INSTANT_BLOCK_DESTORY.toString())
          || args[2].equalsIgnoreCase(Language.FLAG_FREEZE_PLAYERS.toString())
          || args[2].equalsIgnoreCase(Language.FLAG_MODIFY_GRAVITY.toString())) {
        list.add(Language.VALUE_TRUE.toString());
        list.add(Language.VALUE_FALSE.toString());
      }
      if (args[2].equalsIgnoreCase(Language.FLAG_MAX_SNOWBALLS.toString())) {
        list.add("0");
        list.add("1");
        list.add("5");
        list.add("16");
        list.add("32");
        list.add("64");
      }
      if (args[2].equalsIgnoreCase(Language.FLAG_MODE.toString())) {
        list.add(Language.VALUE_MODE_NORMAL.toString());
        list.add(Language.VALUE_MODE_BOWSPLEEF.toString());
        list.add(Language.VALUE_MODE_SPLEGG.toString());
        list.add(Language.VALUE_MODE_SPLEEF_RUN.toString());
        // list.add(Language.VALUE_MODE_SUPER_SPLEEF.toString()); // TODO enable super gamemodes
        // list.add(Language.VALUE_MODE_SUPER_SPLEGG.toString()); // TODO enable super gamemodes
      }
      if (args[2].equalsIgnoreCase(Language.FLAG_VEHICLE.toString())) {
        try {
          list.add(EntityType.RABBIT.name().toLowerCase());
        } catch (Exception e) {
          // older versions of minecraft don't have rabbits :(
          // A life without rabbits is not livable!
        }
        list.add(EntityType.VILLAGER.name().toLowerCase());
        list.add(EntityType.PIG.name().toLowerCase());
        list.add(EntityType.OCELOT.name().toLowerCase());
        list.add(EntityType.SHEEP.name().toLowerCase());
        list.add("none");
      }
      if (args[2].equalsIgnoreCase(Language.FLAG_REWARD_MONEY_PARTICIPATION.toString())
          || args[2].equalsIgnoreCase(Language.FLAG_REWARD_MONEY_WINNING.toString())
          || args[2].equalsIgnoreCase(Language.FLAG_REWARD_POINTS_PARTICIPATION.toString())
          || args[2].equalsIgnoreCase(Language.FLAG_REWARD_POINTS_WINNING.toString())) {
        list.add("0");
        list.add("10");
        list.add("25");
        list.add("50");
        list.add("100");
        list.add("150");
        list.add("200");
        list.add("500");
      }

      if (args[2].equalsIgnoreCase(Language.FLAG_ARENA_COUNTDOWN.toString())
          || args[2].equalsIgnoreCase(Language.FLAG_LOBBY_COUNTDOWN.toString())) {
        list.add("10");
        list.add("15");
        list.add("20");
        list.add("30");
        list.add("45");
        list.add("60");
        list.add("100");
        list.add("120");
        list.add("250");
      }

      if (args[2].equalsIgnoreCase(Language.FLAG_GRAVITY.toString())) {
        list.add("0.25");
        list.add("0.5");
        list.add("0.75");
      }

      if (args[2].equalsIgnoreCase(Language.FLAG_MIN_PLAYERS.toString())
          || args[2].equalsIgnoreCase(
              Language.FLAG_REQUIRED_PLAYERS_TO_START_COUNTDOWN.toString())) {
        list.add("2");
        list.add("4");
        list.add("8");
        list.add("12");
        list.add("16");
      }

      if (args[2].equalsIgnoreCase(Language.FLAG_SPECTATE_TYPE.toString())) {
        list.add(Language.SPECTATE_TYPE_NONE.toString());
        list.add(Language.SPECTATE_TYPE_NORMAL.toString());
        list.add(Language.SPECTATE_TYPE_NORMAL_FLYING.toString());
        list.add(Language.SPECTATE_TYPE_GAMEMODE_3.toString());
      }
    }
    return list;
  }