Fix LowerCase/Session Stolen issue
This commit is contained in:
parent
253b54da1d
commit
11db85ac26
@ -46,6 +46,8 @@ public class DataManager {
|
|||||||
return result.get();
|
return result.get();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return (null);
|
return (null);
|
||||||
|
} finally {
|
||||||
|
executor.shutdown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,4 +161,32 @@ public class DataManager {
|
|||||||
}
|
}
|
||||||
ConsoleLogger.info("AutoPurgeDatabase : Remove " + i + " Permissions");
|
ConsoleLogger.info("AutoPurgeDatabase : Remove " + i + " Permissions");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isOnline(Player player, final String name) {
|
||||||
|
if (player.isOnline())
|
||||||
|
return true;
|
||||||
|
ExecutorService executor = Executors.newSingleThreadExecutor();
|
||||||
|
Future<Boolean> result = executor.submit(new Callable<Boolean>() {
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -446,21 +446,22 @@ public class AuthMePlayerListener implements Listener {
|
|||||||
|
|
||||||
// Check if forceSingleSession is set to true, so kick player that has
|
// Check if forceSingleSession is set to true, so kick player that has
|
||||||
// joined with same nick of online player
|
// 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.setKickMessage(m.send("same_nick")[0]);
|
||||||
event.setResult(PlayerLoginEvent.Result.KICK_OTHER);
|
event.setResult(PlayerLoginEvent.Result.KICK_OTHER);
|
||||||
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
|
if (LimboCache.getInstance().hasLimboPlayer(name))
|
||||||
|
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(player.getName().toLowerCase());
|
LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(player.getName().toLowerCase());
|
||||||
if (PlayerCache.getInstance().isAuthenticated(player.getName().toLowerCase())) {
|
if (player != null && limbo != null && PlayerCache.getInstance().isAuthenticated(player.getName().toLowerCase())) {
|
||||||
Utils.getInstance().addNormal(player, limbo.getGroup());
|
Utils.getInstance().addNormal(player, limbo.getGroup());
|
||||||
LimboCache.getInstance().deleteLimboPlayer(player.getName().toLowerCase());
|
LimboCache.getInstance().deleteLimboPlayer(player.getName().toLowerCase());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user