package me.avery246813579.hotpotato.listener;
import me.avery246813579.hotpotato.HotPotato;
import me.avery246813579.hotpotato.game.GameManager;
import me.avery246813579.hotpotato.game.GamePlayer;
import me.avery246813579.hotpotato.game.GameState;
import me.avery246813579.hotpotato.util.MessageUtil;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.FoodLevelChangeEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.inventory.InventoryInteractEvent;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.event.player.PlayerQuitEvent;
public class PlayerListener implements Listener {
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
if (HotPotato.findGame(event.getPlayer()) == null) {
return;
}
GameManager gameManager = HotPotato.findGame(event.getPlayer());
if (gameManager.getPotatoPlayer() == event.getPlayer()) {
gameManager.eliminatePlayer();
gameManager.getGamePlayers().remove(gameManager.findPlayer(event.getPlayer()));
} else {
gameManager.getGamePlayers().remove(gameManager.findPlayer(event.getPlayer()));
}
}
@EventHandler
public void onFoodLevelChange(FoodLevelChangeEvent event) {
if (HotPotato.findGame((Player) event.getEntity()) == null) {
return;
}
GameManager gameManager = HotPotato.findGame((Player) event.getEntity());
if (gameManager.getGameState() != GameState.Live) {
event.setCancelled(true);
}
}
@EventHandler
public void onBlockBreak(BlockBreakEvent event) {
if (HotPotato.findGame((Player) event.getPlayer()) == null) {
return;
}
event.setCancelled(true);
}
@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
if (HotPotato.findGame((Player) event.getPlayer()) == null) {
return;
}
event.setCancelled(true);
}
@EventHandler
public void onPlayerDropItem(PlayerDropItemEvent event) {
if (HotPotato.findGame((Player) event.getPlayer()) == null) {
return;
}
event.setCancelled(true);
}
@EventHandler
public void onPlayerPickupItem(PlayerPickupItemEvent event) {
if (HotPotato.findGame((Player) event.getPlayer()) == null) {
return;
}
event.setCancelled(true);
}
@EventHandler
public void onEntiyDamage(EntityDamageEvent event) {
if (event.getEntity() instanceof Player) {
if (HotPotato.findGame((Player) event.getEntity()) == null) {
return;
}
GameManager gameManager = HotPotato.findGame((Player) event.getEntity());
if (gameManager.getGameState() != GameState.Live) {
event.setCancelled(true);
}
}
}
@EventHandler
public void onInventoryInteract(InventoryInteractEvent event) {
if (HotPotato.findGame((Player) event.getWhoClicked()) == null) {
return;
}
event.setCancelled(true);
}
@EventHandler
public void onPlayerDeath(PlayerDeathEvent event) {
if (event.getEntity() instanceof Player) {
if (HotPotato.findGame((Player) event.getEntity()) == null) {
return;
}
GameManager gameManager = HotPotato.findGame((Player) event.getEntity());
if (gameManager.getGameState() != GameState.Live) {
event.getEntity().setHealth(20);
if (gameManager.isStarting()) {
event.getEntity().teleport(gameManager.getGame().getSpawn());
} else {
event.getEntity().teleport(gameManager.getGame().getLobbyLocation());
}
} else {
if (gameManager.getPotatoPlayer() == (Player) event.getEntity()) {
gameManager.eliminatePlayer();
GamePlayer gp = gameManager.findPlayer((Player) event.getEntity());
gp.makeSpecator();
} else {
event.getEntity().teleport(gameManager.getGame().getLobbyLocation());
}
}
}
}
@EventHandler
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
if (event.getEntity() instanceof Player) {
if (HotPotato.findGame((Player) event.getEntity()) == null) {
return;
}
GameManager gameManager = HotPotato.findGame((Player) event.getEntity());
if (gameManager.getGameState() != GameState.Live) {
return;
} else {
if (HotPotato.findGame((Player) event.getDamager()) != null) {
if (gameManager != HotPotato.findGame((Player) event.getDamager())) {
event.setCancelled(true);
return;
}
if (!gameManager.getAlivePlayers().contains(gameManager.findPlayer((Player) event.getEntity()))) {
event.setCancelled(true);
return;
}
if ((Player) event.getDamager() != gameManager.getPotatoPlayer()) {
event.setDamage(0);
return;
}
gameManager.givePotato((Player) event.getEntity());
} else {
event.setCancelled(true);
}
}
}
}
@EventHandler
public void onPlayerMove(PlayerMoveEvent event) {
if (HotPotato.findGame((Player) event.getPlayer()) == null) {
return;
}
GameManager gameManager = HotPotato.findGame((Player) event.getPlayer());
if (!gameManager.isCanMove()) {
if (((event.getTo().getBlockX() != event.getFrom().getBlockX()) || (event.getTo().getBlockZ() != event.getFrom().getBlockZ()))) {
event.setTo(event.getFrom());
return;
}
}
}
@EventHandler
public void onASyncPlayerChat(AsyncPlayerChatEvent event) {
if (HotPotato.findGame((Player) event.getPlayer()) == null) {
return;
}
GameManager gameManager = HotPotato.findGame((Player) event.getPlayer());
if (!gameManager.isCanTalk()) {
event.setCancelled(true);
MessageUtil.sendTextMessage(event.getPlayer(), "canNotTalk");
return;
}
}
@EventHandler
public void onItemConsume(PlayerItemConsumeEvent event){
if (HotPotato.findGame((Player) event.getPlayer()) != null) {
event.setCancelled(true);
}
}
}