public void onEnable() {
    essPresent = (getServer().getPluginManager().getPlugin("Essentials") != null);
    if (!essPresent)
      log.warning(logPref + "Essentials not found. This plugin will have limited functionality");

    PluginManager pm = getServer().getPluginManager();
    pm.registerEvents(new NRCommandPreprocessHandler(this), this);

    NRConfig.onEnable();
    em.onEnable();

    log.info(logPref + "enabled successfully");
  }
  private boolean findName(final CommandSender s, final String[] args) {
    if (!(s instanceof ConsoleCommandSender
        || (s instanceof Player && ((Player) s).hasPermission("nameretriever.realname"))))
      return noAccess(s);

    final Future<HashMap<String, String>> returnFuture =
        getServer()
            .getScheduler()
            .callSyncMethod(
                this,
                new Callable<HashMap<String, String>>() {
                  @Override
                  public HashMap<String, String> call() {
                    return em.getNamesForNick(args[0]);
                  }
                });

    final Future<HashMap<String, String>> returnFuture2 =
        getServer()
            .getScheduler()
            .callSyncMethod(
                this,
                new Callable<HashMap<String, String>>() {
                  @Override
                  public HashMap<String, String> call() {
                    return em.getNicksForName(args[0]);
                  }
                });

    if (NRConfig.useAsync) {
      getServer()
          .getScheduler()
          .runTaskAsynchronously(
              this,
              new Runnable() {
                @Override
                public void run() {
                  boolean fnick = false;
                  try {
                    HashMap<String, String> names = returnFuture.get();

                    if (names.isEmpty()) {
                      names = returnFuture2.get();
                      fnick = true;
                    }

                    if (names.isEmpty())
                      s.sendMessage(
                          ChatColor.RED
                              + "Error: "
                              + ChatColor.DARK_RED
                              + "No player found with that nickname");
                    else
                      for (String str : names.keySet()) {
                        if (fnick) s.sendMessage(str + "'s nickname is " + names.get(str));
                        else s.sendMessage(names.get(str) + " is " + str);
                        if (NRConfig.showStatus && NameRetriever.essPresent)
                          s.sendMessage(
                              "Status: "
                                  + ((getServer().getPlayerExact(str) == null)
                                      ? (ChatColor.RED + "Offline")
                                      : (ChatColor.GREEN + "Online")));
                      }

                  } catch (InterruptedException e) {
                    s.sendMessage(
                        ChatColor.RED
                            + "Error: "
                            + ChatColor.DARK_RED
                            + "Unexpected interruption while fetching results");
                  } catch (ExecutionException e) {
                    s.sendMessage(
                        ChatColor.RED
                            + "Error: "
                            + ChatColor.DARK_RED
                            + "Unexpected execution error while fetching results");
                  }
                }
              });
    } else {
      boolean nick = false;
      HashMap<String, String> names = em.getNamesForNick(args[0]);
      if (names.isEmpty()) {
        names = em.getNicksForName(args[0]);
        nick = true;
      }

      if (names.isEmpty())
        s.sendMessage(
            ChatColor.RED + "Error: " + ChatColor.DARK_RED + "No player found with that nickname");
      else
        for (String str : names.keySet()) {
          if (nick) s.sendMessage(str + "'s nickname is " + names.get(str));
          else s.sendMessage(names.get(str) + " is " + str);
          if (NRConfig.showStatus && NameRetriever.essPresent)
            s.sendMessage(
                "Status: "
                    + ((getServer().getPlayerExact(str) == null)
                        ? (ChatColor.RED + "Offline")
                        : (ChatColor.GREEN + "Online")));
        }
    }

    return true;
  }