diff --git a/src/main/java/fr/xephi/authme/DataManager.java b/src/main/java/fr/xephi/authme/DataManager.java index 072d97416..8f9db6d85 100644 --- a/src/main/java/fr/xephi/authme/DataManager.java +++ b/src/main/java/fr/xephi/authme/DataManager.java @@ -46,6 +46,8 @@ public class DataManager { return result.get(); } catch (Exception e) { return (null); + } finally { + executor.shutdown(); } } @@ -159,4 +161,32 @@ public class DataManager { } ConsoleLogger.info("AutoPurgeDatabase : Remove " + i + " Permissions"); } + + public boolean isOnline(Player player, final String name) { + if (player.isOnline()) + return true; + ExecutorService executor = Executors.newSingleThreadExecutor(); + Future result = executor.submit(new Callable() { + + public synchronized Boolean call() throws Exception { + Boolean result = null; + try { + for (OfflinePlayer op : Bukkit.getOnlinePlayers()) + if (op.getName().equalsIgnoreCase(name)) { + result = true; + break; + } + } catch (Exception e) { + } + return result; + } + }); + try { + return result.get().booleanValue(); + } catch (Exception e) { + return (false); + } finally { + executor.shutdown(); + } + } } diff --git a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java index 42e2c8f5f..8f2f03d1c 100644 --- a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java +++ b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java @@ -446,21 +446,22 @@ public class AuthMePlayerListener implements Listener { // Check if forceSingleSession is set to true, so kick player that has // joined with same nick of online player - if (player.isOnline() && Settings.isForceSingleSessionEnabled) { + if (plugin.dataManager.isOnline(player, name) && Settings.isForceSingleSessionEnabled) { event.setKickMessage(m.send("same_nick")[0]); event.setResult(PlayerLoginEvent.Result.KICK_OTHER); - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + if (LimboCache.getInstance().hasLimboPlayer(name)) + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(player.getName().toLowerCase()); - if (PlayerCache.getInstance().isAuthenticated(player.getName().toLowerCase())) { - Utils.getInstance().addNormal(player, limbo.getGroup()); - LimboCache.getInstance().deleteLimboPlayer(player.getName().toLowerCase()); + @Override + public void run() { + LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(player.getName().toLowerCase()); + if (player != null && limbo != null && PlayerCache.getInstance().isAuthenticated(player.getName().toLowerCase())) { + Utils.getInstance().addNormal(player, limbo.getGroup()); + LimboCache.getInstance().deleteLimboPlayer(player.getName().toLowerCase()); + } } - } - }); + }); return; }