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

94 lines
3.6 KiB
Java

/*
* Copyright (c) 2017 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.commons.server.ServerType;
import eu.univento.core.api.player.CustomPlayer;
import eu.univento.core.api.player.SpectateManager;
import eu.univento.core.api.player.Spectator;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerInteractAtEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.meta.SkullMeta;
/**
* @author joethei
* @version 0.1
*/
public class SpectatorEvents implements Listener {
@EventHandler
public void onInteract(PlayerInteractEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
if (e.getAction() == Action.RIGHT_CLICK_BLOCK || e.getAction() == Action.RIGHT_CLICK_AIR) {
if (SpectateManager.contains(p)) {
Spectator spectator = SpectateManager.get(p);
assert spectator != null;
if (e.getItem().getType() == Material.COMPASS) {
spectator.openPlayerListInventory();
}
if (e.getItem().getType() == Material.BED) {
p.connectToServer(ServerType.LOBBY);
}
if (e.getItem().getType() == Material.PAPER) {
p.connectToServer(ServerType.getServerType());
}
}
}
}
@EventHandler
public void onPlayerInteractAtEntity(PlayerInteractAtEntityEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
if (SpectateManager.contains(p)) {
if (e.getRightClicked() instanceof Player) {
CustomPlayer player = CustomPlayer.getPlayer((Player) e.getRightClicked());
Spectator spectator = SpectateManager.get(p);
assert spectator != null;
spectator.spectate(player);
}
}
}
@EventHandler
public void onInventoryClick(InventoryClickEvent e) {
CustomPlayer p = CustomPlayer.getPlayer((Player) e.getWhoClicked());
if (SpectateManager.contains(p)) {
if (e.getInventory().getName().equals(p.getDatabasePlayer().getLanguage().getWord("Game.Menu.SpectateMenu"))) {
if (e.getCurrentItem().getType() == Material.SKULL_ITEM) {
SkullMeta meta = (SkullMeta) e.getCurrentItem().getItemMeta();
CustomPlayer player = CustomPlayer.getPlayer(meta.getOwner());
assert player != null;
Spectator spectator = SpectateManager.get(p);
assert spectator != null;
if (player.isOnline()) {
p.closeInventory();
spectator.spectate(player);
} else {
p.sendMessage(p.getDatabasePlayer().getLanguage().getMessage(MessageConstant.COMMAND_NOT_ONLINE));
}
}
}
}
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
if (SpectateManager.contains(p)) {
Spectator spectator = SpectateManager.get(p);
assert spectator != null;
spectator.remove();
}
}
}