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

174 lines
6.9 KiB
Java
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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<CustomPlayer> firstJoin = new LinkedList<>();
private List<CustomPlayer> 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<LabyMod, Boolean> 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;
}
}
}