/* * This file is part of Libelula Minecraft Edition Project. * * Libelula Minecraft Edition is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Libelula Minecraft Edition is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Libelula Minecraft Edition. * If not, see <http://www.gnu.org/licenses/>. * */ package me.libelula.eventocordones; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.block.Sign; import org.bukkit.entity.Arrow; 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.block.BlockBreakEvent; import org.bukkit.event.block.BlockDamageEvent; import org.bukkit.event.block.BlockIgniteEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.weather.WeatherChangeEvent; import org.bukkit.inventory.ItemStack; import org.kitteh.tag.AsyncPlayerReceiveNameTagEvent; /** * * @author Diego D'Onofrio <ddonofrio@member.fsf.org> */ public class EventManager implements Listener { private final Main plugin; public EventManager(Main plugin) { this.plugin = plugin; } public void register() { plugin.getServer().getPluginManager().registerEvents(this, plugin); } @EventHandler(ignoreCancelled = true, priority = EventPriority.NORMAL) public void onNameTag(AsyncPlayerReceiveNameTagEvent e) { e.setTag(plugin.pm.getNameTagColor(e.getNamedPlayer()) + e.getNamedPlayer().getName()); } @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) public void onBlockBreak(BlockBreakEvent e) { if (plugin.gm.isInGame(e.getPlayer()) || !e.getPlayer().hasPermission("ec.modify")) { e.setCancelled(true); } } @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) public void onBlockPlace(BlockPlaceEvent e) { if (plugin.gm.isInGame(e.getPlayer()) || !e.getPlayer().hasPermission("ec.modify")) { e.setCancelled(true); } } @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) public void onMobSpawn(CreatureSpawnEvent e) { if (e.getSpawnReason() == CreatureSpawnEvent.SpawnReason.NATURAL || e.getSpawnReason() == CreatureSpawnEvent.SpawnReason.DEFAULT) { e.setCancelled(true); } } @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) public void onWeatherChange(WeatherChangeEvent e) { if (e.toWeatherState()) { e.setCancelled(true); } } @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) public void onBlockIgnite(BlockIgniteEvent e) { e.setCancelled(true); } @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) public void onSignChange(SignChangeEvent e) { plugin.sm.checkForJoinSignCreation(e); } @EventHandler(ignoreCancelled = false, priority = EventPriority.HIGHEST) public void onPlayerInteract(PlayerInteractEvent e) { if (e.getAction().equals(Action.RIGHT_CLICK_BLOCK) || e.getAction().equals(Action.LEFT_CLICK_BLOCK)) { if (e.getClickedBlock().getType() == Material.WALL_SIGN || e.getClickedBlock().getType() == Material.SIGN_POST) { Sign sign = (Sign) e.getClickedBlock().getState(); plugin.sm.checkForJoin(sign, e.getPlayer()); } } } @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) public void onBlockDamage(BlockDamageEvent e) { if (plugin.gm.isInGame(e.getPlayer()) || !e.getPlayer().hasPermission("ec.modify")) { e.setCancelled(true); } } @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) public void onPlayerTeleport(PlayerTeleportEvent e) { if (!plugin.am.isArena(e.getTo().getWorld()) && plugin.am.isArena(e.getFrom().getWorld())) { plugin.pm.backToNormal(e.getPlayer()); plugin.gm.leftGame(e.getPlayer()); } } @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) public void onPlayerJoin(PlayerJoinEvent e) { if (plugin.spawn != null) { e.getPlayer().teleport(plugin.spawn); } } @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) public void onPlayerQuit(PlayerQuitEvent e) { plugin.gm.leftGame(e.getPlayer()); } @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) public void onPlayerMove(PlayerMoveEvent e) { if (plugin.gm.isInGame(e.getPlayer()) && !plugin.pm.hasTeam(e.getPlayer())) { plugin.gm.checkPortalUse(e.getPlayer()); } } @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) public void onRespawn(PlayerRespawnEvent e) { if (plugin.gm.isInGame(e.getPlayer()) && plugin.pm.hasTeam(e.getPlayer())) { e.getPlayer().getInventory().setArmorContents(plugin.pm.getArmour(e.getPlayer())); plugin.pm.setStuff(e.getPlayer(), true); } else { e.getPlayer().teleport(plugin.spawn); plugin.pm.backToNormal(e.getPlayer()); } } @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) public void onDeath(PlayerDeathEvent e) { Player player = e.getEntity(); if (plugin.gm.isInGame(player) && plugin.pm.hasTeam(player)) { e.getDrops().remove(player.getInventory().getBoots()); e.getDrops().remove(player.getInventory().getChestplate()); e.getDrops().remove(player.getInventory().getHelmet()); e.getDrops().remove(player.getInventory().getLeggings()); ItemStack ingot = new ItemStack(Material.IRON_INGOT); e.getDrops().add(ingot); plugin.pm.setArmour(player); } } @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) public void onPlayerChat(AsyncPlayerChatEvent e) { Player player = e.getPlayer(); if (plugin.gm.isInGame(player) && plugin.pm.hasTeam(player)) { e.setCancelled(true); for (Player inGamePlayer : player.getWorld().getPlayers()) { inGamePlayer.sendMessage(ChatColor.YELLOW + "<" + plugin.pm.getNameTagColor(player) + player.getName() + ChatColor.YELLOW + ">" + ChatColor.WHITE + " " + e.getMessage()); } } } @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) public void onEntityDamageByEntity(EntityDamageByEntityEvent e) { Arrow arrow; if (e.getEntity() instanceof Player == false) { return; } final Player player = (Player) e.getEntity(); if (!plugin.gm.isInGame(player) || !plugin.pm.hasTeam(player)) { return; } Player damager; if (e.getDamager() instanceof Player == false) { if (e.getDamager() instanceof Arrow == false) { return; } else { arrow = (Arrow) e.getDamager(); if (arrow.getShooter() instanceof Player) { damager = (Player) arrow.getShooter(); } else { return; } } } else { damager = (Player) e.getDamager(); } if (!plugin.gm.isInGame(damager) && plugin.pm.hasTeam(damager)) { return; } if (plugin.pm.getTeamName(player).equals(plugin.pm.getTeamName(damager))) { e.setCancelled(true); } } @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) public void onInventoryClose(InventoryCloseEvent e) { plugin.gm.checkForWin((Player) e.getPlayer()); } }