package com.github.jamesnorris.ablockalypse.event.bukkit; import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Arrow; import org.bukkit.entity.EnderPearl; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.util.Vector; import com.github.jamesnorris.ablockalypse.Ablockalypse; import com.github.jamesnorris.ablockalypse.DataContainer; import com.github.jamesnorris.ablockalypse.aspect.Grenade; import com.github.jamesnorris.ablockalypse.aspect.ZAMob; import com.github.jamesnorris.ablockalypse.aspect.ZAPlayer; import com.github.jamesnorris.ablockalypse.enumerated.ZAEffect; public class ProjectileHit implements Listener { private DataContainer data = Ablockalypse.getData(); /* Called when a player throws an object. * Used for changing ender pearls to grenades for ZAPlayers. */ @EventHandler(priority = EventPriority.HIGHEST) public void PHE(ProjectileHitEvent event) { Entity e = event.getEntity(); if (e instanceof EnderPearl) { EnderPearl ep = (EnderPearl) e; Player p = (Player) ep.getShooter(); if (data.isZAPlayer(p) && !data.isGrenade(e)) { Location loc = ep.getLocation(); Location pLoc = p.getLocation(); ZAPlayer zap = data.getZAPlayer(p); double xDiffForce = (loc.getX() - pLoc.getX()) / 20; double zDiffForce = (loc.getZ() - pLoc.getZ()) / 20; new Grenade(e, zap, 60, true, false, new Vector(xDiffForce, .1, zDiffForce)); } } else if (e instanceof Arrow && ((Arrow) e).getShooter() instanceof Player) { Arrow a = (Arrow) e; Player p = (Player) a.getShooter(); if (data.isZAPlayer(p)) { ZAPlayer zap = data.getZAPlayer(p); UUID uuid = a.getUniqueId(); if (zap.hasInstaKill()) { EntityDamageByEntity.instakillids.add(uuid); } Location loc2 = e.getLocation(); /* through-barrier damage */ for (ZAMob zam : zap.getGame().getMobs()) { LivingEntity c = zam.getEntity(); Location loc3 = c.getLocation(); if (loc3.distanceSquared(loc2) <= 3) {// within 1.5 blocks (2.25 approx 1.5 squared) double dmg = 40; EntityDamageByEntityEvent EDBE = new EntityDamageByEntityEvent(p, c, DamageCause.CUSTOM, dmg); Bukkit.getPluginManager().callEvent(EDBE); if (!EDBE.isCancelled()) { ZAEffect.IRON_BREAK.play(loc3); c.damage(EDBE.getDamage()); } break; } } } } } }