@Override
  public void startEvent() {
    super.startEvent();
    Server server = Bukkit.getServer();

    int osize = teams.size();
    nrounds = getNRounds(osize);
    int nteams = (int) Math.pow(2, nrounds);
    server.broadcastMessage(
        Log.colorChat(
            eventParams.getPrefix()
                + "&e The "
                + eventParams.toPrettyString()
                + oParms.getName()
                + " tournament is starting!"));

    preliminary_round = teams.size() != nteams;
    if (preliminary_round) nrounds++;

    TreeMap<Double, Team> sortTeams = new TreeMap<Double, Team>(Collections.reverseOrder());
    BTInterface bti = new BTInterface(eventParams);
    //		System.out.println("startEvent:: bti=" + bti);
    for (Team t : teams) {
      Double elo = Defaults.DEFAULT_ELO;
      if (bti.isValid()) {
        elo = (double) bti.getElo(t);
      }
      while (sortTeams.containsKey(elo)) {
        elo += 0.0001;
      }
      sortTeams.put(elo, t);
    }
    competingTeams.addAll(teams);
    teams.clear();
    aliveTeams.clear();
    ArrayList<Team> ts = new ArrayList<Team>(sortTeams.values());
    for (Team t : ts) {
      teams.add(t);
      aliveTeams.add(t);
    }
    server.broadcastMessage(
        Log.colorChat(
            eventParams.getPrefix()
                + "&6 "
                + teams.size()
                + " &e"
                + MessageUtil.getTeamsOrPlayers(teams.size())
                + " will compete in a &6"
                + nrounds
                + "&e round tournament"));
    if (preliminary_round) {
      makePreliminaryRound();
    } else {
      makeNextRound();
    }
    startRound();
  }
 private void performEventAction(ArenaPlayer player) {
   EventParams ep = (EventParams) mp;
   EventExecutor executor = EventController.getEventExecutor(ep.getType().getName());
   String args[];
   switch (command) {
     case JOIN:
       args = new String[] {"join", options1};
       executor.eventJoin(player, ep, args, true);
       break;
     case LEAVE:
       args = new String[] {"leave", options1, options2};
       executor.leave(player, ep, true);
       break;
     case START:
       //			executor.start();
       break;
   }
 }
  @Override
  public void openEvent(EventParams mp) throws NeverWouldJoinException {
    aliveTeams.clear();
    competingTeams.clear();
    rounds.clear();
    round = -1;
    nrounds = -1;
    timeBetweenRounds = oParms.getTimeBetweenRounds();
    String color = Util.getColor(mp.getPrefix());
    mp.setPrefix(color + "[" + mp.getName() + " " + oParms.getName() + "]");
    mp.setCommand(oParms.getCommand());
    mp.setName(mp.getName() + " " + oParms.getName());
    mp.setTimeBetweenRounds(oParms.getTimeBetweenRounds());
    mp.setSecondsTillMatch(oParms.getSecondsTillMatch());
    mp.setSecondsToLoot(oParms.getSecondsToLoot());

    TimeUtil.testClock();
    super.openEvent(mp);
  }
 @Override
 public void openEvent(EventParams mp) throws NeverWouldJoinException {
   aliveTeams.clear();
   competingTeams.clear();
   rounds.clear();
   round = -1;
   nrounds = -1;
   timeBetweenRounds = oParms.getTimeBetweenRounds();
   ChatColor color = MessageUtil.getFirstColor(mp.getPrefix());
   mp.setTransitionOptions(mp.getTransitionOptions());
   mp.setPrefix(color + "[" + mp.getName() + " " + oParms.getName() + "]");
   mp.setCommand(oParms.getCommand());
   mp.setName(mp.getName() + " " + oParms.getName());
   mp.setTimeBetweenRounds(oParms.getTimeBetweenRounds());
   mp.setSecondsTillMatch(oParms.getSecondsTillMatch());
   mp.setSecondsToLoot(oParms.getSecondsToLoot());
   TimeUtil.testClock();
   super.openEvent(mp);
   EventParams copy = new EventParams(mp);
   copy.setMaxTeams(CompetitionSize.MAX);
   this.setTeamJoinHandler(TeamJoinFactory.createTeamJoinHandler(copy, this));
 }