/* * Copyright (c) 2018 univento.eu - All rights reserved * You are not allowed to use, distribute or modify this code */ package eu.univento.core.listeners; import eu.univento.commons.player.language.MessageConstant; import eu.univento.core.Core; import eu.univento.core.api.player.*; import eu.univento.core.api.server.ServerSettings; import eu.univento.core.commands.BuilderCommands; import eu.univento.core.commands.ModCommands; import eu.univento.core.listeners.cloud.Servers; import org.bukkit.Bukkit; import org.bukkit.SoundCategory; 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.*; import org.bukkit.scoreboard.Team; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.LinkedList; import java.util.List; /** * @author joethei * @version 1.0 */ public class JoinQuit implements Listener { private List firstJoin = new LinkedList<>(); private List loading = new LinkedList<>(); @EventHandler public void onPreLogin(AsyncPlayerPreLoginEvent e) { /* if(!Core.getCommons().getSecurityHandler().isValidServer(e.getAddress().getHostAddress())) { e.setKickMessage("Im sorry, you can only join from our official IP: play.univento.eu"); e .setLoginResult(AsyncPlayerPreLoginEvent.Result.KICK_BANNED); } */ } @EventHandler public void onLogin(PlayerLoginEvent e) { CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); if(e.getHostname() == null) p.getDatabasePlayer().load("unknown"); else p.getDatabasePlayer().load(e.getHostname()); } @EventHandler public void onJoin(PlayerJoinEvent e) { CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); for (CustomPlayer player : Core.getOnlinePlayers()) { if (ModCommands.getVanishedPlayers().contains(player) || SpectateManager.contains(player)) { p.hidePlayer(player); } } if(Servers.getTeleport().containsKey(p.getUniqueId())) p.teleport(Bukkit.getPlayer(Servers.getTeleport().remove(p.getUniqueId()))); HashMap labyModFeatures = new HashMap<>(); labyModFeatures.put(LabyMod.DAMAGEINDICATOR, false); labyModFeatures.put(LabyMod.MINIMAP_RADAR, false); labyModFeatures.put(LabyMod.ARMOR, false); labyModFeatures.put(LabyMod.POTIONS, false); labyModFeatures.put(LabyMod.ANIMATIONS, false); labyModFeatures.put(LabyMod.EXTRAS, false); p.setLabyModFeatures(labyModFeatures); p.sendMessage(BetterPvP.getCodeString()); //disable code for minimap mod p.sendMessage("§A§n§t§i§M§i§n§i§m§a§p"); p.sendMessage("§3 §6 §3 §6 §3 §6 §e"); p.sendMessage("§0§0§1§2§3§5§e§f"); p.sendMessage("§0§0§c§d§e§f"); assert getPayload() != null; p.sendPluginMessage(Core.getInstance(), "schematica", getPayload()); p.setGameMode(ServerSettings.getGameMode()); p.setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard()); p.initScoreboard(); p.sendTabHeaderAndFooter("§2univento§8.§aeu\n§8× §7a unique universe &8×\n§e", "§6\n§bTwitter§8: §7@univentoEU\n§7auf gute §2Zusammenarbeit§8!"); for (CustomPlayer player : Core.getOnlinePlayers()) { p.getDatabasePlayer().getRankAsync().whenComplete((rank, throwable) -> player.getScoreboard().getTeam(rank.getTeam()).addEntry(p.getDisplayName())); player.getDatabasePlayer().getRankAsync().whenComplete((rank, throwable) -> p.getScoreboard().getTeam(rank.getTeam()).addEntry(player.getDisplayName())); } p.getDatabasePlayer().getSettingsAsync().whenComplete((playerSettings, throwable) -> { if(playerSettings.isNicked() && !ServerSettings.isLobby()) { p.setNickName(NickName.getRandomNick()); } }); p.setCollidable(false); if(Servers.getTeleport().containsKey(p.getUniqueId())) { Player t = Bukkit.getPlayer(Servers.getTeleport().get(p.getUniqueId())); p.teleport(t); Servers.getTeleport().remove(p.getUniqueId()); } p.setStoryResourcePack(); loading.add(p); } @EventHandler public void onResourcePackStatus(PlayerResourcePackStatusEvent e) { CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); if (e.getStatus() == PlayerResourcePackStatusEvent.Status.SUCCESSFULLY_LOADED) { if (firstJoin.contains(p)) { firstJoin.remove(p); if (ServerSettings.isLobby()) { p.playSound(p.getEyeLocation(), "glider.boot_up", SoundCategory.MASTER, 1.0F, 1.0F); } } loading.remove(p); } if (e.getStatus() == PlayerResourcePackStatusEvent.Status.FAILED_DOWNLOAD) { p.sendMessage(p.getDatabasePlayer().getLanguage().getMessage(MessageConstant.PACK_FAILED_DOWNLOAD)); Bukkit.getScheduler().runTaskLaterAsynchronously(Core.getInstance(), p::setStoryResourcePack, 10 * 20L); } if (e.getStatus() == PlayerResourcePackStatusEvent.Status.DECLINED) { p.sendMessage(p.getDatabasePlayer().getLanguage().getMessage(MessageConstant.PACK_DECLINED)); Bukkit.getScheduler().runTaskLaterAsynchronously(Core.getInstance(), p::setStoryResourcePack, 10 * 20L); } } @EventHandler public void onQuit(PlayerQuitEvent e) { CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer()); if (BuilderCommands.getBuildPlayers().containsKey(p)) BuilderCommands.getBuildPlayers().remove(p); p.getDatabasePlayer().getSettingsAsync().whenComplete((playerSettings, throwable) -> { if(playerSettings.isNicked() && !ServerSettings.isLobby()) { p.removeNickName(); } }); for (Team team : p.getScoreboard().getTeams()) { team.removeEntry(p.getDisplayName()); } p.onLeave(); } @EventHandler(priority = EventPriority.HIGHEST) public void onKick(PlayerKickEvent e) { e.setLeaveMessage(null); } private byte[] getPayload() { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); DataOutputStream dataOutputStream = new DataOutputStream(byteArrayOutputStream); try { dataOutputStream.writeByte(0); dataOutputStream.writeBoolean(false); dataOutputStream.writeBoolean(false); dataOutputStream.writeBoolean(true); return byteArrayOutputStream.toByteArray(); } catch (IOException ex) { ex.printStackTrace(); return null; } } }