package tv.mineinthebox.essentials.events.players; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.Random; import org.bukkit.Bukkit; import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Monster; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitTask; import tv.mineinthebox.essentials.xEssentials; import tv.mineinthebox.essentials.helpers.EffectType; import tv.mineinthebox.essentials.interfaces.XPlayer; public class MobProcEvent implements Listener, Runnable { private final static HashMap<String, Long> player = new HashMap<String, Long>(); private final int proctime = 5; private static BukkitTask task; private final xEssentials pl; public MobProcEvent(xEssentials pl) { this.pl = pl; } @EventHandler public void onProc(EntityDamageByEntityEvent e) { if(e.getEntity() instanceof Monster) { Monster monster = (Monster) e.getEntity(); if(e.getDamager() instanceof Player) { Player p = (Player) e.getDamager(); XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(p.getName()); if(xp.hasProc()) { if(player.containsKey(xp.getName())) { monster.setHealth(0); } } } } } @SuppressWarnings("deprecation") @EventHandler public void onProc(EntityDeathEvent e) { if(e.getEntity() instanceof Monster) { if(e.getEntity().getKiller() instanceof Player) { Player p = (Player) e.getEntity().getKiller(); if(p.getItemInHand() != null) { if(p.getItemInHand().getType() == Material.BOW) { return; } } XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(p.getName()); if(xp.hasProc()) { Random rand = new Random(); p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ENDERDRAGON_GROWL, 1F, 1F); for(int i =0; i < 5; i++) { p.getWorld().playEffect(new Location(p.getWorld(), rand.nextInt(10), rand.nextInt(4), rand.nextInt(10)), Effect.MOBSPAWNER_FLAMES, 100, 10); //ParticleEffect.HAPPY_VILLAGER.display(p.getLocation(), rand.nextInt(10), rand.nextInt(4), rand.nextInt(10), 100, 10); EffectType.playEffect(p.getWorld(), EffectType.VILLAGER_HAPPY, p.getLocation(), rand.nextInt(10), rand.nextInt(4), rand.nextInt(10), 1, 10); } p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, Integer.MAX_VALUE, 3)); Date date = new Date(System.currentTimeMillis()); date.setSeconds(date.getSeconds() + proctime); player.put(p.getName(), date.getTime()); if(!(task instanceof BukkitTask)) { task = Bukkit.getScheduler().runTaskTimer(pl, this, 0L, 1L); } } } } } @EventHandler public void onQuit(PlayerQuitEvent e) { if(player.containsKey(e.getPlayer().getName())) { player.remove(e.getPlayer().getName()); } } @EventHandler public void onQuit(PlayerKickEvent e) { if(player.containsKey(e.getPlayer().getName())) { player.remove(e.getPlayer().getName()); } } @SuppressWarnings("deprecation") @Override public void run() { if(player.isEmpty()) { task.cancel(); task = null; } else { Iterator<String> it = player.keySet().iterator(); while(it.hasNext()) { String playename = it.next(); long time = player.get(playename); if(System.currentTimeMillis() > time) { Player p = Bukkit.getPlayer(playename); if(p.hasPotionEffect(PotionEffectType.SPEED)) { p.removePotionEffect(PotionEffectType.SPEED); } player.remove(playename); } } } } }