package me.gtacraft.plugins.gangs.listeners;
import lombok.Getter;
import me.gtacraft.plugins.gangs.GTAGangs;
import me.gtacraft.plugins.gangs.Gang;
import me.gtacraft.plugins.gangs.GangManager;
import me.gtacraft.plugins.gangs.GangMember;
import me.gtacraft.plugins.gangs.database.SQLConnectionThread;
import me.gtacraft.plugins.gangs.database.SQLVars;
import me.gtacraft.plugins.gangs.enumeration.GangRole;
import me.gtacraft.plugins.gangs.util.Formatting;
import me.gtacraft.plugins.gangs.util.MessageType;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.UUID;
/**
* Created by Connor on 6/29/14. Designed for the GTA-Factions project.
*/
public class GTAConnectDisconnectListener extends IListener {
@Getter
private static GTAConnectDisconnectListener instance;
public GTAConnectDisconnectListener() {
instance = this;
}
@EventHandler
public void onAsyncPlayerPreLogin(AsyncPlayerPreLoginEvent event) {
String uuid = event.getUniqueId().toString();
try {
PreparedStatement statement = SQLConnectionThread.getConnection().prepareStatement(
SQLVars.formatSqlCall(SQLVars.SELECT_PLAYER.replace("%uuid%", uuid)));
statement.execute();
ResultSet rs = statement.getResultSet();
if (rs.next()) {
String gang = rs.getString("gang");
int role = rs.getInt("role");
GangMember member = new GangMember(Bukkit.getOfflinePlayer(event.getUniqueId()), GangRole.fromPermissionLevel(role));
Gang realGang = GangManager.getGang(gang);
if (realGang == null && !(gang.equals("NULL"))) {
//load gang from database
SQLVars.loadGang(gang);
}
if (realGang != null) {
member.setGang(realGang);
realGang.getOnlineMembers().add(member);
}
} else {
GTAGangs.sql_query.add(SQLVars.INSERT_NEW_PLAYER.replace("%uuid%", uuid));
if (Bukkit.getOfflinePlayer(event.getUniqueId()).hasPlayedBefore())
new GangMember(Bukkit.getOfflinePlayer(event.getUniqueId()), GangRole.MEMBER);
}
} catch (Exception err) {
err.printStackTrace();
event.setKickMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "Failed to load playerdata!")));
event.setLoginResult(AsyncPlayerPreLoginEvent.Result.KICK_OTHER);
}
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
//load gang member and put in map
Player player = event.getPlayer();
GTAGangs.async_player_map.put(player.getName(), player);
if (GangMember.fromPlayer(player) == null) {
new GangMember(player, GangRole.MEMBER);
}
}
@EventHandler
public void onPlayerQuit(final PlayerQuitEvent event) {
Runnable async = new Runnable() {
public void run() {
GangMember member = GangMember.fromPlayer(event.getPlayer());
if (member != null) {
GangMember.forget(member);
Gang gang = GangManager.getGang(member);
if (gang == null)
return;
gang.getOnlineMembers().remove(member);
}
GTAGangs.async_player_map.remove(event.getPlayer().getName());
}
};
Bukkit.getScheduler().scheduleAsyncDelayedTask(GTAGangs.getInstance(), async);
}
}