package io.ibj.mcauthenticator.engine.events; import io.ibj.mcauthenticator.MCAuthenticator; import io.ibj.mcauthenticator.auth.Authenticator; import io.ibj.mcauthenticator.model.User; import io.ibj.mcauthenticator.model.UserData; import lombok.RequiredArgsConstructor; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import java.io.IOException; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import java.util.UUID; /** * Created by amir on 2016-01-11. */ @RequiredArgsConstructor public final class ConnectionEvent implements Listener { private final MCAuthenticator instance; private final Map<UUID, UserData> userDataCache = new HashMap<>(); @EventHandler(priority = EventPriority.MONITOR) public void onConnect(AsyncPlayerPreLoginEvent e) { if (e.getLoginResult() != AsyncPlayerPreLoginEvent.Result.ALLOWED) return; try { UserData d = instance.getDataSource().getUser(e.getUniqueId()); if (d == null) return; userDataCache.put(e.getUniqueId(), d); } catch (IOException | SQLException e1) { instance.handleException(e1); } } @EventHandler(priority = EventPriority.LOWEST) public void onPlayerConnect(final PlayerJoinEvent event) { try { instance.handlePlayer(event.getPlayer(), userDataCache.remove(event.getPlayer().getUniqueId())); } catch (IOException | SQLException e) { instance.handleException(e); } } @EventHandler(priority = EventPriority.MONITOR) public void onQuit(PlayerQuitEvent e) { User leave = instance.getCache().leave(e.getPlayer().getUniqueId()); if (leave != null) { for (Authenticator a : instance.getAuthenticators()) { a.quitUser(leave, e.getPlayer()); } } } }