package nautilus.game.arcade.managers; import java.util.ArrayList; import java.util.List; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.game.Game.GameState; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.craftbukkit.v1_7_R3.entity.CraftPlayer; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerInteractEvent; public class MiscManager implements Listener { private List _dontGiveClockList = new ArrayList(); private ArcadeManager Manager; public MiscManager(ArcadeManager manager) { Manager = manager; Manager.GetPluginManager().registerEvents(this, Manager.GetPlugin()); } @EventHandler(priority = EventPriority.LOWEST) public void InteractActive(PlayerInteractEvent event) { event.setCancelled(false); } @EventHandler(priority = EventPriority.LOW) public void InteractClickCancel(PlayerInteractEvent event) { if (Manager.GetGame() == null) return; Player player = event.getPlayer(); if (!Manager.GetGame().IsAlive(player)) { event.setCancelled(true); } //BoneMeal else if (event.getPlayer().getItemInHand().getType() == Material.INK_SACK && event.getPlayer().getItemInHand().getData().getData() == (byte)15) { if (event.getAction() == Action.RIGHT_CLICK_BLOCK && Manager.GetGame().GetType() != GameType.UHC) event.setCancelled(true); } else if (Manager.GetGame().GetState() != GameState.Live) { event.setCancelled(true); } } @EventHandler(priority = EventPriority.LOWEST) public void InventoryClickCancel(InventoryClickEvent event) { if (Manager.GetGame() == null) return; Player player = UtilPlayer.searchExact(event.getWhoClicked().getName()); if (player == null) return; if (player.getGameMode() != GameMode.SURVIVAL && !player.isOp()) { event.setCancelled(true); player.closeInventory(); } else if (Manager.GetGame().IsLive() && !Manager.GetGame().IsAlive(player) && !((CraftPlayer)player).getHandle().spectating) { event.setCancelled(true); player.closeInventory(); } } @EventHandler public void addClockPrevent(InventoryOpenEvent event) { if (event.getPlayer() instanceof Player) { _dontGiveClockList.add(event.getPlayer().getName()); } } @EventHandler public void removeClockPrevent(InventoryCloseEvent event) { if (event.getPlayer() instanceof Player) { _dontGiveClockList.remove(event.getPlayer().getName()); } } @EventHandler public void HubClockUpdate(UpdateEvent event) { if (Manager.IsTournamentServer()) return; if (event.getType() != UpdateType.SLOW) return; if (Manager.GetGame() == null) return; if (Manager.GetGame().GetType() == GameType.UHC) return; for (Player player : UtilServer.getPlayers()) { if (!Manager.GetGame().IsAlive(player)) { if (!_dontGiveClockList.contains(player.getName()) && !player.getInventory().contains(Material.WATCH)) { Manager.HubClock(player); } } } } @EventHandler(priority = EventPriority.LOWEST) public void HubClockInteract(PlayerInteractEvent event) { if (Manager.IsTournamentServer()) return; Player player = event.getPlayer(); if (player.getItemInHand() == null) return; if (player.getItemInHand().getType() != Material.WATCH) return; Manager.GetPortal().SendPlayerToServer(player, "Lobby"); } @EventHandler public void HubCommand(PlayerCommandPreprocessEvent event) { if (event.getMessage().startsWith("/hub") || event.getMessage().startsWith("/leave")) { Manager.GetPortal().SendPlayerToServer(event.getPlayer(), "Lobby"); event.setCancelled(true); } } }