package eu.univento.core.listeners; import eu.univento.core.Core; import eu.univento.core.api.Title; import eu.univento.core.api.Utils; import eu.univento.core.api.database.MySQL; import eu.univento.core.api.languages.Messages; import eu.univento.core.api.player.CustomPlayer; import eu.univento.core.api.player.NickName; import eu.univento.core.api.player.Perms; import eu.univento.core.api.player.Spectator; import eu.univento.core.api.server.ServerSettings; import eu.univento.core.commands.Build; import eu.univento.core.commands.Vanish; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; import java.util.Date; /** * @author joethei * @version 1.0 */ public class JoinQuit implements Listener{ /** * Handles JoinMessage and vanished players * @param e event */ @EventHandler public void onJoin(PlayerJoinEvent e) { CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); Messages msgs = new Messages(p); p.setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard()); for(Player players : Bukkit.getOnlinePlayers()) { CustomPlayer player = CustomPlayer.getPlayer(players); if(Vanish.getPlayers().contains(player)) { p.hidePlayer(player); } if(Spectator.is(player)) { p.hidePlayer(player); } } if(p.isNicked()) { p.setDisplayName(p.getNick()); } if(!p.isSetting("joined")) { p.changeSetting("joined"); } if(!p.hasPlayedBefore()) { createPlayer(p); Perms.getRanks().put(p, p.getFreshRank()); for(int i = 0; i >= 15; i++) { Utils.randomFirework(p.getEyeLocation()); } Title.sendTitle(p, 0, 100, 0, "§6Welcome", "§aPlease choose a language"); Bukkit.getScheduler().scheduleSyncDelayedTask(Core.getInstance(), () -> p.openInventory(getLanguageChooser(p)), 140L); } Perms.getRanks().put(p, p.getFreshRank()); Perms.initScoreboard(p); Title.sendTabTitle(p, msgs.Core_TAB_TITLE() + Bukkit.getServerName() , msgs.PREFIX()); p.setGameMode(ServerSettings.getGameMode()); p.checkVerifiedTs(); for(Player players : Bukkit.getOnlinePlayers()) { CustomPlayer player = CustomPlayer.getPlayer(players); p.getScoreboard().getTeam(player.getTeam().getName()).addEntry(player.getDisplayName()); player.getScoreboard().getTeam(p.getTeam().getName()).addEntry(p.getDisplayName()); } } @EventHandler public void onLogin(PlayerLoginEvent e) { CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); //Core.log(Level.INFO, "PlayerLogin " + p.getName() + " | " + p.isBanned()); //if(p.isBanned()) { // e.disallow(PlayerLoginEvent.Result.KICK_BANNED, "§cYou have been banned. §6Reason: " + p.getBanReason() + "\nUntil: " + p.getBanTime()); //} } /** * Handles QuitMessage and other needed stuff * @param e event */ @EventHandler public void onQuit(PlayerQuitEvent e) { CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); NickName.remove(p); if(Build.getPlayers().containsKey(p)) Build.getPlayers().remove(p); if(!ServerSettings.isGame()) p.getTeam().removeEntry(p.getDisplayName()); if(ServerSettings.isGame()) p.setNicked(false); Perms.getRanks().remove(p); p.onLeave(); } /** * creates player in database * @param p CustomPlayer */ void createPlayer(CustomPlayer p) { MySQL sql = Core.returnSQL(); Date date = new Date(); Timestamp time = new Timestamp(date.getTime()); String uuid = p.getUniqueId().toString(); try { sql.openConnection(); PreparedStatement st = sql.getConnection().prepareStatement("SELECT UUID FROM users WHERE UUID ='" + uuid + "'"); ResultSet res = st.executeQuery(); if (!res.next()){ PreparedStatement st2 = sql.getConnection().prepareStatement("INSERT INTO users (UUID, FirstJoin, Rank, Coins) VALUES ('" + uuid + "','" + time + "', '" + Perms.Ranks.Player.toString() + "', 0);"); st2.execute(); int id = p.getID(); PreparedStatement st3 = sql.getConnection().prepareStatement("INSERT INTO PlayerSettings (ID, teleport, FastMenu, requestsParty, requestsFriend, joined, nick) VALUES ('" + id +"', '1', '0', '1', '1', '0', '0',);"); st3.execute(); PreparedStatement st4 = sql.getConnection().prepareStatement("INSERT INTO FoundItems(ID, music_3, sugar, feather, hearts) VALUES ('" + id + "',0, 0, 0, 0);"); st4.execute(); sql.closeConnection(); return; } sql.closeConnection(); } catch (SQLException | ClassNotFoundException e) { e.printStackTrace(); } } /** * Handles KickMessage * @param e event */ @EventHandler(priority=EventPriority.HIGHEST) public void onKick(PlayerKickEvent e) { CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); e.setLeaveMessage(null); p.setNicked(false); } public static Inventory getLanguageChooser(CustomPlayer p) { Inventory inv = Bukkit.createInventory(p, 9, "§6Language Chooser"); ItemStack en = new ItemStack(Material.PAPER); ItemMeta enMeta = en.getItemMeta(); enMeta.setDisplayName("§6English"); en.setItemMeta(enMeta); ItemStack de = new ItemStack(Material.PAPER); ItemMeta deMeta = de.getItemMeta(); deMeta.setDisplayName("§6Deutsch"); de.setItemMeta(deMeta); ItemStack it = new ItemStack(Material.PAPER); ItemMeta itMeta = it.getItemMeta(); itMeta.setDisplayName("§6Italienisch"); it.setItemMeta(itMeta); inv.setItem(0, en); inv.setItem(1, de); inv.setItem(2, it); return inv; } }