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

149 lines
5.7 KiB
Java

package eu.univento.core.listeners;
import eu.univento.core.Core;
import eu.univento.core.api.Utils;
import eu.univento.core.api.player.*;
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.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.PlayerQuitEvent;
import org.bukkit.event.player.PlayerResourcePackStatusEvent;
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 onJoin(PlayerJoinEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
for (Player players : Bukkit.getOnlinePlayers()) {
CustomPlayer player = CustomPlayer.getPlayer(players);
if (Vanish.getPlayers().contains(player))
p.hidePlayer(player);
if (SpectateManager.contains(player))
p.hidePlayer(player);
}
if (!p.hasPlayedBefore()) {
firstJoin.add(p);
for (int i = 0; i <= 15; i++)
Utils.randomFirework(p.getEyeLocation());
}
if (!p.isOnline()) {
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(new 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(p.getMessages().Core_TAB_TITLE() + Bukkit.getServerName(), p.getMessages().TAB_PREFIX());
if (p.getDatabasePlayer().getSettings().isNicked() && !ServerSettings.isLobby()) {
p.setNick(NickName.getRandomNick());
}
for (CustomPlayer player : Core.getOnlinePlayers()) {
p.getScoreboard().getTeam(player.getDatabasePlayer().getRank().getTeam()).addEntry(player.getDisplayName());
player.getScoreboard().getTeam(p.getDatabasePlayer().getRank().getTeam()).addEntry(p.getDisplayName());
}
p.setCollidable(false);
//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()) {
//TODO: add story intro here.
}
}
loading.remove(p);
}
if(e.getStatus() == PlayerResourcePackStatusEvent.Status.FAILED_DOWNLOAD) {
p.sendMessage(p.getDatabasePlayer().getMessage("Pack.failed_download"));
Bukkit.getScheduler().runTaskLaterAsynchronously(Core.getInstance(), p::setStoryResourcePack, 10 * 20L);
}
if(e.getStatus() == PlayerResourcePackStatusEvent.Status.DECLINED) {
p.sendMessage(p.getDatabasePlayer().getMessage("Pack.declined"));
Bukkit.getScheduler().runTaskLaterAsynchronously(Core.getInstance(), p::setStoryResourcePack, 10 * 20L);
}
}
@EventHandler
public void onQuit(PlayerQuitEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
if (Build.getPlayers().containsKey(p))
Build.getPlayers().remove(p);
if (p.getDatabasePlayer().getSettings().isNicked() && !ServerSettings.isLobby()) {
p.removeNick();
}
for (Team team : p.getScoreboard().getTeams()) {
team.removeEntry(p.getDisplayName());
}
Bukkit.getScheduler().runTaskLater(Core.getInstance(), p::onLeave, 5L);
}
@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;
}
}
}