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:
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user