Core/src/eu/univento/core/listeners/JoinQuit.java

194 lines
6.5 KiB
Java

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;
}
}