Add ArenaKillEvent

This event is fired whenever an arena player kills either a monster
or another player. Useful for plugin extensions.
This commit is contained in:
garbagemule
2013-08-06 10:33:02 +02:00
parent 312ef3c55a
commit d57f47fb05
2 changed files with 62 additions and 3 deletions
@@ -7,6 +7,7 @@ import java.util.List;
import java.util.Random; import java.util.Random;
import java.util.Set; import java.util.Set;
import com.garbagemule.MobArena.events.ArenaKillEvent;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@@ -425,6 +426,9 @@ public class ArenaListener
event.getDrops().clear(); event.getDrops().clear();
event.setDroppedExp(0); event.setDroppedExp(0);
event.setKeepLevel(true); event.setKeepLevel(true);
if (player.getKiller() != null) {
callKillEvent(player.getKiller(), player);
}
arena.playerDeath(player); arena.playerDeath(player);
} }
} }
@@ -450,6 +454,7 @@ public class ArenaListener
EntityDamageEvent e1 = event.getEntity().getLastDamageCause(); EntityDamageEvent e1 = event.getEntity().getLastDamageCause();
EntityDamageByEntityEvent e2 = (e1 instanceof EntityDamageByEntityEvent) ? (EntityDamageByEntityEvent) e1 : null; EntityDamageByEntityEvent e2 = (e1 instanceof EntityDamageByEntityEvent) ? (EntityDamageByEntityEvent) e1 : null;
Entity damager = (e2 != null) ? e2.getDamager() : null; Entity damager = (e2 != null) ? e2.getDamager() : null;
LivingEntity damagee = event.getEntity();
// Make sure to grab the owner of a projectile/pet // Make sure to grab the owner of a projectile/pet
if (damager instanceof Projectile) { if (damager instanceof Projectile) {
@@ -469,7 +474,7 @@ public class ArenaListener
ap.getStats().inc("kills"); ap.getStats().inc("kills");
arena.getScoreboard().addKill(p); arena.getScoreboard().addKill(p);
} }
MABoss boss = monsters.getBoss(event.getEntity()); MABoss boss = monsters.getBoss(damagee);
if (boss != null) { if (boss != null) {
ItemStack reward = boss.getReward(); ItemStack reward = boss.getReward();
if (reward != null) { if (reward != null) {
@@ -487,9 +492,10 @@ public class ArenaListener
} }
} }
} }
callKillEvent(p, damagee);
} }
MABoss boss = monsters.removeBoss(event.getEntity()); MABoss boss = monsters.removeBoss(damagee);
if (boss != null) { if (boss != null) {
boss.setDead(true); boss.setDead(true);
} }
@@ -500,12 +506,17 @@ public class ArenaListener
event.getDrops().clear(); event.getDrops().clear();
List<ItemStack> loot = monsters.getLoot(event.getEntity()); List<ItemStack> loot = monsters.getLoot(damagee);
if (loot != null && !loot.isEmpty()) { if (loot != null && !loot.isEmpty()) {
event.getDrops().add(getRandomItem(loot)); event.getDrops().add(getRandomItem(loot));
} }
} }
private void callKillEvent(Player killer, Entity victim) {
ArenaKillEvent event = new ArenaKillEvent(killer, victim);
plugin.getServer().getPluginManager().callEvent(event);
}
private ItemStack getRandomItem(List<ItemStack> stacks) { private ItemStack getRandomItem(List<ItemStack> stacks) {
return stacks.get((new Random()).nextInt(stacks.size())); return stacks.get((new Random()).nextInt(stacks.size()));
} }
@@ -0,0 +1,48 @@
package com.garbagemule.MobArena.events;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
/**
* Called when an arena player kills a mob or another player.
*/
public class ArenaKillEvent extends Event {
private static final HandlerList handlers = new HandlerList();
private Player killer;
private Entity victim;
public ArenaKillEvent(Player killer, Entity victim) {
this.killer = killer;
this.victim = victim;
}
/**
* Get the killer.
*
* @return the killer
*/
public Player getPlayer() {
return killer;
}
/**
* Get the victim.
*
* @return the victim
*/
public Entity getVictim() {
return victim;
}
@Override
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}