package com.github.jamesnorris.ablockalypse.event.bukkit; import java.util.Random; 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.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityDeathEvent; import com.github.jamesnorris.ablockalypse.Ablockalypse; import com.github.jamesnorris.ablockalypse.DataContainer; import com.github.jamesnorris.ablockalypse.aspect.ZAMob; import com.github.jamesnorris.ablockalypse.aspect.ZAPlayer; import com.github.jamesnorris.ablockalypse.enumerated.PowerupType; import com.github.jamesnorris.ablockalypse.enumerated.Setting; public class EntityDeath implements Listener { private static DataContainer data = Ablockalypse.getData(); private static Random rand = new Random(); public static void behaveLikeKill(Player killer, Entity entityKilled) { ZAPlayer zap = data.getZAPlayer(killer); EntityDamageEvent damage = entityKilled.getLastDamageCause(); boolean exploded = damage != null && damage.getCause() != null && damage.getCause() == DamageCause.ENTITY_EXPLOSION; int pay = !exploded ? (Integer) Setting.KILL_PAY.getSetting() : (Integer) Setting.EXPLOSIVE_KILL_PAY.getSetting(); zap.addPoints(pay); zap.setKills(zap.getKills() + 1); int food = killer.getFoodLevel(); if (food < 20) { killer.setFoodLevel(20); } int chance = rand.nextInt(100) + 1; if (chance <= (Double) Setting.POWERUP_CHANCE.getSetting()) { zap.givePowerup(PowerupType.getById(rand.nextInt(5) + 1), killer); } } /* Called when an Entity is killed. * Used for adding points when a player kills an entity, while they are in-game. */ @EventHandler(priority = EventPriority.HIGHEST) public void EDE(EntityDeathEvent event) { Entity entity = event.getEntity(); Player p = event.getEntity().getKiller(); if (!(entity instanceof LivingEntity)) { return; } LivingEntity e = (LivingEntity) entity; if (data.isZAMob(e)) { ZAMob mob = data.getZAMob(e); event.getDrops().clear(); event.setDroppedExp(0); mob.kill(); if (p != null && data.isZAPlayer(p)) { behaveLikeKill(p, e); } } } }