summaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
authorKodekpl <Kodekgames@gmail.com>2014-01-31 12:07:39 +0100
committerturt2live <travpc@gmail.com>2014-02-01 22:29:15 -0700
commit3e896afe6b2592de9b4129d7dc2cebe98dbb030c (patch)
tree15358c2ee03d675af2cfe68d39d17aa1ac26b719 /src/main/java
parentc59ba98ae6c61c78827a33a3138ade5462d9ae11 (diff)
downloadcraftbukkit-3e896afe6b2592de9b4129d7dc2cebe98dbb030c.tar
craftbukkit-3e896afe6b2592de9b4129d7dc2cebe98dbb030c.tar.gz
craftbukkit-3e896afe6b2592de9b4129d7dc2cebe98dbb030c.tar.lz
craftbukkit-3e896afe6b2592de9b4129d7dc2cebe98dbb030c.tar.xz
craftbukkit-3e896afe6b2592de9b4129d7dc2cebe98dbb030c.zip
Implement SpawnReason.NETHER_PORTAL and DISPENSE_EGG. Fixes BUKKIT-3148
Previously any entities spawned through dispensers (monster eggs) or by nether portals were given the incorrect SpawnReason of SPAWNER_EGG. This made it impossible to distinguish what exactly happened in regards to the creature being spawned. A method in ItemMonsterEgg has been added to further fine tune reasons for spawning creatures. This permits the DISPENSE_EGG reason to be used correctly and accuratly as well as the NETHER_PORTAL reason due to how BlockPortal spawns the mobs. The redirected method, a(World, int, double, double, double), is still called by the ItemMonsterEgg itself and therefore uses the default reason of SPAWNER_EGG. This does not change previous behaviour.
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/net/minecraft/server/BlockPortal.java3
-rw-r--r--src/main/java/net/minecraft/server/DispenseBehaviorMonsterEgg.java2
-rw-r--r--src/main/java/net/minecraft/server/ItemMonsterEgg.java8
3 files changed, 10 insertions, 3 deletions
diff --git a/src/main/java/net/minecraft/server/BlockPortal.java b/src/main/java/net/minecraft/server/BlockPortal.java
index 75b833af..bec5aa8a 100644
--- a/src/main/java/net/minecraft/server/BlockPortal.java
+++ b/src/main/java/net/minecraft/server/BlockPortal.java
@@ -23,7 +23,8 @@ public class BlockPortal extends BlockHalfTransparent {
}
if (l > 0 && !world.getType(i, l + 1, k).r()) {
- Entity entity = ItemMonsterEgg.a(world, 57, (double) i + 0.5D, (double) l + 1.1D, (double) k + 0.5D);
+ // CraftBukkit - set spawn reason to NETHER_PORTAL
+ Entity entity = ItemMonsterEgg.spawnCreature(world, 57, (double) i + 0.5D, (double) l + 1.1D, (double) k + 0.5D, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NETHER_PORTAL);
if (entity != null) {
entity.portalCooldown = entity.ai();
diff --git a/src/main/java/net/minecraft/server/DispenseBehaviorMonsterEgg.java b/src/main/java/net/minecraft/server/DispenseBehaviorMonsterEgg.java
index a854f7ae..2c14ab03 100644
--- a/src/main/java/net/minecraft/server/DispenseBehaviorMonsterEgg.java
+++ b/src/main/java/net/minecraft/server/DispenseBehaviorMonsterEgg.java
@@ -44,7 +44,7 @@ final class DispenseBehaviorMonsterEgg extends DispenseBehaviorItem {
itemstack1 = CraftItemStack.asNMSCopy(event.getItem());
- Entity entity = ItemMonsterEgg.a(isourceblock.k(), itemstack.getData(), event.getVelocity().getX(), event.getVelocity().getY(), event.getVelocity().getZ());
+ Entity entity = ItemMonsterEgg.spawnCreature(isourceblock.k(), itemstack.getData(), event.getVelocity().getX(), event.getVelocity().getY(), event.getVelocity().getZ(), org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.DISPENSE_EGG);
if (entity instanceof EntityLiving && itemstack.hasName()) {
((EntityInsentient) entity).setCustomName(itemstack.getName());
diff --git a/src/main/java/net/minecraft/server/ItemMonsterEgg.java b/src/main/java/net/minecraft/server/ItemMonsterEgg.java
index 34c21efc..a41184ea 100644
--- a/src/main/java/net/minecraft/server/ItemMonsterEgg.java
+++ b/src/main/java/net/minecraft/server/ItemMonsterEgg.java
@@ -92,6 +92,12 @@ public class ItemMonsterEgg extends Item {
}
public static Entity a(World world, int i, double d0, double d1, double d2) {
+ // CraftBukkit start - delegate to spawnCreature
+ return spawnCreature(world, i, d0, d1, d2, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.SPAWNER_EGG);
+ }
+
+ public static Entity spawnCreature(World world, int i, double d0, double d1, double d2, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason spawnReason) {
+ // CraftBukkit end
if (!EntityTypes.a.containsKey(Integer.valueOf(i))) {
return null;
} else {
@@ -106,7 +112,7 @@ public class ItemMonsterEgg extends Item {
entityinsentient.aP = entityinsentient.yaw;
entityinsentient.aN = entityinsentient.yaw;
entityinsentient.a((GroupDataEntity) null);
- world.addEntity(entity, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.SPAWNER_EGG); // CraftBukkit
+ world.addEntity(entity, spawnReason); // CraftBukkit
entityinsentient.r();
}
}