From 914688e2a07dc99421a3c512c2df59b770ea3d17 Mon Sep 17 00:00:00 2001 From: Dinnerbone Date: Sun, 30 Jan 2011 20:21:24 +0000 Subject: [PATCH] Implemented ENTITY_DEATH for monsters and animals --- .../net/minecraft/server/EntityLiving.java | 32 +++++++++++++---- .../net/minecraft/server/EntitySkeleton.java | 34 ++++++++++++++----- 2 files changed, 50 insertions(+), 16 deletions(-) diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java index e8f7f36dc7..2ac229f1c7 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -1,11 +1,19 @@ package net.minecraft.server; +import java.util.ArrayList; import java.util.List; // CraftBukkit start +import org.bukkit.Location; +import org.bukkit.Server; import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.CraftWorld; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.inventory.CraftItemStack; +import org.bukkit.event.Event.Type; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.entity.EntityDeathEvent; // CraftBukkit end public abstract class EntityLiving extends Entity { @@ -435,15 +443,25 @@ public abstract class EntityLiving extends Entity { } protected void g_() { - int i = this.h(); + // Craftbukkit start - whole method + List loot = new ArrayList(); + int drop = this.h(); + int count = random.nextInt(3); - if (i > 0) { - int j = this.random.nextInt(3); - - for (int k = 0; k < j; ++k) { - this.a(i, 1); - } + if ((drop > 0) && (count > 0)) { + loot.add(new org.bukkit.inventory.ItemStack(drop, count)); } + + CraftEntity entity = (CraftEntity)getBukkitEntity(); + EntityDeathEvent event = new EntityDeathEvent(Type.ENTITY_DEATH, entity, loot); + CraftWorld cworld = ((WorldServer)world).getWorld(); + Server server = ((WorldServer)world).getServer(); + server.getPluginManager().callEvent(event); + + for (org.bukkit.inventory.ItemStack stack : event.getDrops()) { + cworld.dropItemNaturally(entity.getLocation(), stack); + } + // Craftbukkit end } protected int h() { diff --git a/src/main/java/net/minecraft/server/EntitySkeleton.java b/src/main/java/net/minecraft/server/EntitySkeleton.java index 827c40c29b..9baca736f2 100644 --- a/src/main/java/net/minecraft/server/EntitySkeleton.java +++ b/src/main/java/net/minecraft/server/EntitySkeleton.java @@ -1,9 +1,15 @@ package net.minecraft.server; // CraftBukkit start +import java.util.ArrayList; +import java.util.List; +import org.bukkit.Server; import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.CraftWorld; +import org.bukkit.craftbukkit.entity.CraftEntity; import org.bukkit.event.Event.Type; import org.bukkit.event.entity.EntityCombustEvent; +import org.bukkit.event.entity.EntityDeathEvent; // CraftBukkit end public class EntitySkeleton extends EntityMonster { @@ -84,18 +90,28 @@ public class EntitySkeleton extends EntityMonster { } protected void g_() { - int i = this.random.nextInt(3); + // Craftbukkit start - whole method + List loot = new ArrayList(); - int j; - - for (j = 0; j < i; ++j) { - this.a(Item.ARROW.id, 1); + int count = this.random.nextInt(3); + if (count > 0) { + loot.add(new org.bukkit.inventory.ItemStack(org.bukkit.Material.ARROW, count)); } - i = this.random.nextInt(3); - - for (j = 0; j < i; ++j) { - this.a(Item.BONE.id, 1); + count = this.random.nextInt(3); + if (count > 0) { + loot.add(new org.bukkit.inventory.ItemStack(org.bukkit.Material.BONE, count)); } + + CraftEntity entity = (CraftEntity)getBukkitEntity(); + EntityDeathEvent event = new EntityDeathEvent(Type.ENTITY_DEATH, entity, loot); + CraftWorld cworld = ((WorldServer)world).getWorld(); + Server server = ((WorldServer)world).getServer(); + server.getPluginManager().callEvent(event); + + for (org.bukkit.inventory.ItemStack stack : event.getDrops()) { + cworld.dropItemNaturally(entity.getLocation(), stack); + } + // Craftbukkit end } }