Use intends to run BungeeCord tasks on a event in background

This commit is contained in:
games647
2016-05-03 16:14:38 +02:00
parent dfe37dfc1b
commit ffa5059c67
2 changed files with 45 additions and 48 deletions

View File

@@ -33,35 +33,43 @@ public class PlayerConnectionListener implements Listener {
} }
@EventHandler @EventHandler
public void onPreLogin(PreLoginEvent preLoginEvent) { public void onPreLogin(final PreLoginEvent preLoginEvent) {
if (preLoginEvent.isCancelled()) { if (preLoginEvent.isCancelled()) {
return; return;
} }
PendingConnection connection = preLoginEvent.getConnection(); preLoginEvent.registerIntent(plugin);
String username = connection.getName(); ProxyServer.getInstance().getScheduler().runAsync(plugin, new Runnable() {
//just enable it for activated users @Override
public void run() {
PlayerProfile playerProfile = plugin.getStorage().getProfile(username, true); PendingConnection connection = preLoginEvent.getConnection();
if (playerProfile != null) { String username = connection.getName();
if (playerProfile.isPremium()) { try {
if (playerProfile.getUserId() != -1) { PlayerProfile playerProfile = plugin.getStorage().getProfile(username, true);
connection.setOnlineMode(true); if (playerProfile != null) {
} if (playerProfile.isPremium()) {
} else if (playerProfile.getUserId() == -1) { if (playerProfile.getUserId() != -1) {
//user not exists in the db connection.setOnlineMode(true);
BungeeAuthPlugin authPlugin = plugin.getBungeeAuthPlugin(); }
if (plugin.getConfiguration().getBoolean("autoRegister") } else if (playerProfile.getUserId() == -1) {
&& (authPlugin == null || !authPlugin.isRegistered(username))) { //user not exists in the db
UUID premiumUUID = plugin.getMojangApiConnector().getPremiumUUID(username); BungeeAuthPlugin authPlugin = plugin.getBungeeAuthPlugin();
if (premiumUUID != null) { if (plugin.getConfiguration().getBoolean("autoRegister")
plugin.getLogger().log(Level.FINER, "Player {0} uses a premium username", username); && (authPlugin == null || !authPlugin.isRegistered(username))) {
connection.setOnlineMode(true); UUID premiumUUID = plugin.getMojangApiConnector().getPremiumUUID(username);
plugin.getPendingAutoRegister().put(connection, new Object()); if (premiumUUID != null) {
plugin.getLogger().log(Level.FINER, "Player {0} uses a premium username", username);
connection.setOnlineMode(true);
plugin.getPendingAutoRegister().put(connection, new Object());
}
}
}
} }
} finally {
preLoginEvent.completeIntent(plugin);
} }
} }
} });
} }
@EventHandler @EventHandler

View File

@@ -9,7 +9,6 @@ import me.vik1395.BungeeAuth.ListenerClass;
import me.vik1395.BungeeAuth.Main; import me.vik1395.BungeeAuth.Main;
import me.vik1395.BungeeAuth.Password.PasswordHandler; import me.vik1395.BungeeAuth.Password.PasswordHandler;
import me.vik1395.BungeeAuth.Tables; import me.vik1395.BungeeAuth.Tables;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.ProxiedPlayer;
@@ -35,20 +34,15 @@ public class BungeeAuthHook implements BungeeAuthPlugin {
final Class<?>[] parameterTypes = new Class<?>[]{String.class, String.class}; final Class<?>[] parameterTypes = new Class<?>[]{String.class, String.class};
final Object[] arguments = new Object[]{player.getName(), "online"}; final Object[] arguments = new Object[]{player.getName(), "online"};
ProxyServer.getInstance().getScheduler().runAsync(Main.plugin, new Runnable() { try {
@Override callProtected("setStatus", parameterTypes, arguments);
public void run() { ListenerClass.movePlayer(player, false);
try {
callProtected("setStatus", parameterTypes, arguments);
ListenerClass.movePlayer(player, false);
//proparly not thread-safe //proparly not thread-safe
ListenerClass.prelogin.get(player.getName()).cancel(); ListenerClass.prelogin.get(player.getName()).cancel();
} catch (Exception ex) { } catch (Exception ex) {
Main.plugin.getLogger().severe("[BungeeAuth] Error force loging in player"); Main.plugin.getLogger().severe("[BungeeAuth] Error force loging in player");
} }
}
});
} }
@Override @Override
@@ -84,18 +78,13 @@ public class BungeeAuthHook implements BungeeAuthPlugin {
, String.class, String.class, String.class, String.class}; , String.class, String.class, String.class, String.class};
final Object[] arguments = new Object[] {player.getName(), hash, pType, "", lastip, regdate, lastip, lastseen}; final Object[] arguments = new Object[] {player.getName(), hash, pType, "", lastip, regdate, lastip, lastseen};
ProxyServer.getInstance().getScheduler().runAsync(Main.plugin, new Runnable() { try {
@Override callProtected("newPlayerEntry", parameterTypes, arguments);
public void run() { //proparly not thread-safe
try { forceLogin(player);
callProtected("newPlayerEntry", parameterTypes, arguments); } catch (Exception ex) {
//proparly not thread-safe Main.plugin.getLogger().severe("[BungeeAuth] Error when creating a new player in the Database");
forceLogin(player); }
} catch (Exception ex) {
Main.plugin.getLogger().severe("[BungeeAuth] Error when creating a new player in the Database");
}
}
});
} }
//pail ;( //pail ;(