@Override
  public void run() {
    DuelManager dm = plugin.getDuelManager();
    FileManager fm = plugin.getFileManager();
    MessageManager mm = plugin.getMessageManager();
    int duelTime = fm.getDuelTime();
    String senderName = sender.getName();
    String targetName = target.getName();
    UUID senderUUID = sender.getUniqueId();
    UUID targetUUID = target.getUniqueId();
    int duelSize = duelArena.getPlayers().size();

    if (plugin.isDebugEnabled()) {
      SendConsoleMessage.debug("Duel size: " + duelSize);
    }

    if (duelSize == 0) {
      dm.endDuel(duelArena);
      this.cancel();
    }

    if (this.countDown > 0 && duelSize == 2) {
      String duelStartActionBar = mm.getDuelStartingActionBarMessage();
      duelStartActionBar =
          duelStartActionBar.replaceAll("%seconds%", String.valueOf(this.countDown));
      Util.sendActionBarMessage(sender, target, duelStartActionBar);
      this.countDown--;
    } else {
      if (duelSize == 2) {
        Util.setTime(sender, target, this.countDown);
        Util.sendMsg(sender, target, ChatColor.YELLOW + "Duel!");
        duelArena.setDuelState(DuelState.STARTED);
        dm.surroundLocation(duelArena.getSpawnpoint1(), Material.AIR);
        dm.surroundLocation(duelArena.getSpawnpoint2(), Material.AIR);
        dm.updateDuelStatusSign(duelArena);
      }

      // dm.removeFrozenPlayer(senderUUID);
      // dm.removeFrozenPlayer(targetUUID);

      if (plugin.isDebugEnabled()) {
        SendConsoleMessage.debug("Stopping duel start thread.");
      }
      this.cancel();

      if (duelTime != 0 && duelSize == 2) {
        if (plugin.isDebugEnabled()) {
          SendConsoleMessage.debug("Duel time limit is set, starting countdown task.");
        }
        new DuelTimeThread(plugin, sender, target, duelArena, duelTime)
            .runTaskTimer(plugin, 20L, 20L);
      }
    }
  }