package me.gtacraft.plugins.safezone.event; import com.oracle.jrockit.jfr.EventDefinition; import me.gtacraft.event.BulletHitBlockEvent; import me.gtacraft.event.PreFireEvent; import me.gtacraft.event.WeaponDamageEntityEvent; import me.gtacraft.plugins.safezone.ParticleEffects; import me.gtacraft.plugins.safezone.Safezone; import me.gtacraft.plugins.safezone.util.SafezoneUtil; import me.vaqxine.GTAShops.GTAShops; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.block.Chest; import org.bukkit.block.DoubleChest; import org.bukkit.entity.Entity; 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.BlockBreakEvent; import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; /** * Created by Connor on 6/27/14. Designed for the GTA-Safezone project. */ public class SafezoneListener implements Listener { public SafezoneListener() { Bukkit.getPluginManager().registerEvents(this, Safezone.getInstance()); } @EventHandler public void onPreFire(PreFireEvent event) { Player shooter = (Player)event.getShooter().getHolder(); int time = SafezoneUtil.getSubscribedTime(shooter.getName()); if (time != -1) { shooter.sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&lWARNING: &fYou cannot shoot anyone for &e"+time+" &fseconds!")); event.setCancelled(true); } if (SafezoneUtil.isInSafeZone(event.getFiredFrom())) { event.getShooter().getHolder().sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&lWARNING: &fYou cannot shoot guns in a safe zone!")); event.setCancelled(true); } if (GTAShops.isShopNearby(event.getFiredFrom()) && event.isGrenade()) event.setCancelled(true); } @EventHandler public void onWeaponDamageEntity(WeaponDamageEntityEvent event) { if (event.getEntity() instanceof Player && (SafezoneUtil.getSubscribedTime(((Player)event.getEntity()).getName())!= -1)) event.setCancelled(true); if (SafezoneUtil.isInSafeZone(event.getEntity().getLocation())) event.setCancelled(true); } @EventHandler public void onWeaponHitBlock(BulletHitBlockEvent event) { if (SafezoneUtil.isInSafeZone(event.getLocationHit())) event.setCancelled(true); if (GTAShops.isShopNearby(event.getLocationHit())) event.setCancelled(true); } @EventHandler(priority = EventPriority.LOWEST) public void onBlockBreak(BlockBreakEvent event) { if (GTAShops.isShopNearby(event.getBlock().getLocation())) event.setCancelled(true); } @EventHandler public void onCreatureSpawn(CreatureSpawnEvent event) { if (SafezoneUtil.isInSafeZone(event.getLocation())) event.setCancelled(true); } @EventHandler public void onInventoryOpen(InventoryOpenEvent event) { if (event.getInventory().getHolder() instanceof Chest || event.getInventory().getHolder() instanceof DoubleChest) { if (SafezoneUtil.isInSafeZone(event.getPlayer().getLocation())) { ((Player)event.getPlayer()).sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&lWARNING: &fYou cannot open chests in safe zones!")); event.setCancelled(true); } } } @EventHandler(priority = EventPriority.LOW) public void onEntityDamage(EntityDamageEvent event) { if (SafezoneUtil.isInSafeZone(event.getEntity().getLocation())) { event.setDamage(0); event.setCancelled(true); } else { if (!(event.getEntity() instanceof Player)) return; Player p = (Player)event.getEntity(); if (SafezoneUtil.getSubscribedTime(p.getName()) != -1) { event.setDamage(0); event.setCancelled(true); return; } SafezoneUtil.subscribe(p.getName()+"_combat", 7); } } @EventHandler public void onEntityDamageByEntity(EntityDamageByEntityEvent event) { if (event.getEntity() instanceof Player && SafezoneUtil.getSubscribedTime(((Player)event.getEntity()).getName()) != -1) { int time = SafezoneUtil.getSubscribedTime(((Player)event.getEntity()).getName()); if (event.getDamager() instanceof Player) ((Player)event.getDamager()).sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&lWARNING: &f"+((Player) event.getEntity()).getName()+"&f cannot be hurt for another &e"+time+" &fseconds!")); event.setCancelled(true); return; } else if (event.getDamager() instanceof Player) { int time = SafezoneUtil.getSubscribedTime(((Player) event.getDamager()).getName()); if (time != -1) { event.setCancelled(true); ((Player) event.getDamager()).sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&lWARNING: &fYou cannot hurt anyone for &e"+time+" &fseconds!")); } } if (event.getDamager() instanceof Player && event.getEntity() instanceof Player) { Player hurt = (Player)event.getEntity(); Player damager = (Player)event.getDamager(); if (SafezoneUtil.isInSafeZone(hurt.getLocation())) { damager.sendMessage(ChatColor.translateAlternateColorCodes('&', "&c&lWARNING: &f"+hurt.getName()+"&f is in a safe zone!")); event.setCancelled(true); } } else { Entity damager = event.getDamager(); if (damager instanceof Player) return; if (SafezoneUtil.isInSafeZone(damager.getLocation())) { ParticleEffects.sendToLocation(ParticleEffects.FIREWORKS_SPARK, damager.getLocation().add(0.5, 0.5, 0.5), 0, 0, 0, (float) 0.3, 30); damager.remove(); } } } @EventHandler public void onBlockDamageEvent(BlockBreakEvent event) { if (SafezoneUtil.isInSafeZone(event.getBlock().getLocation())) event.setCancelled(true); } //async player @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { Safezone.async_player_map.put(event.getPlayer(), 0); } @EventHandler public void onPlayerQuit(PlayerQuitEvent event) { Safezone.async_player_map.remove(event.getPlayer()); } }