diff options
author | Andrew Ardill <andrew.ardill@gmail.com> | 2011-11-29 21:26:55 +1100 |
---|---|---|
committer | Andrew Ardill <andrew.ardill@gmail.com> | 2011-11-29 21:26:55 +1100 |
commit | a1ad0c0103fd565e28b6d759100cdbc14e0974e5 (patch) | |
tree | 9e729444949604d4c5361ac6bb3884ad243a6337 | |
parent | 2759809ecba4e5f2d8c8ae51f5781a0c1a96b0c1 (diff) | |
download | craftbukkit-a1ad0c0103fd565e28b6d759100cdbc14e0974e5.tar craftbukkit-a1ad0c0103fd565e28b6d759100cdbc14e0974e5.tar.gz craftbukkit-a1ad0c0103fd565e28b6d759100cdbc14e0974e5.tar.lz craftbukkit-a1ad0c0103fd565e28b6d759100cdbc14e0974e5.tar.xz craftbukkit-a1ad0c0103fd565e28b6d759100cdbc14e0974e5.zip |
Add events for EntitySmallFireball
-rw-r--r-- | src/main/java/net/minecraft/server/EntitySmallFireball.java | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/src/main/java/net/minecraft/server/EntitySmallFireball.java b/src/main/java/net/minecraft/server/EntitySmallFireball.java index b3673b8f..853f32b7 100644 --- a/src/main/java/net/minecraft/server/EntitySmallFireball.java +++ b/src/main/java/net/minecraft/server/EntitySmallFireball.java @@ -1,5 +1,14 @@ package net.minecraft.server; +// CraftBukkit start +import org.bukkit.entity.Projectile; +import org.bukkit.event.entity.EntityCombustByEntityEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.plugin.PluginManager; +// CraftBukkit end + public class EntitySmallFireball extends EntityFireball { public EntitySmallFireball(World world) { @@ -14,9 +23,41 @@ public class EntitySmallFireball extends EntityFireball { protected void a(MovingObjectPosition movingobjectposition) { if (!this.world.isStatic) { + // CraftBukkit start - projectile hit event + ProjectileHitEvent phe = new ProjectileHitEvent((Projectile) this.getBukkitEntity()); + final PluginManager pluginManager = this.world.getServer().getPluginManager(); + pluginManager.callEvent(phe); + // CraftBukkit end if (movingobjectposition.entity != null) { - if (!movingobjectposition.entity.ax() && movingobjectposition.entity.damageEntity(DamageSource.fireball(this, this.shooter), 5)) { - movingobjectposition.entity.j(5); + // CraftBukkit start - entity damage by entity event + combust event + if (!movingobjectposition.entity.ax()) { // check if not fireproof + boolean stick; + org.bukkit.entity.Entity damagee = movingobjectposition.entity.getBukkitEntity(); + Projectile projectile = (Projectile) this.getBukkitEntity(); + if (movingobjectposition.entity instanceof EntityLiving) { + + EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(projectile, damagee, EntityDamageEvent.DamageCause.PROJECTILE, 5); + pluginManager.callEvent(event); + + if (event.isCancelled()) { + stick = !projectile.doesBounce(); + } else { + // this function returns if the fireball should stick in or not, i.e. !bounce + stick = movingobjectposition.entity.damageEntity(DamageSource.fireball(this, this.shooter), event.getDamage()); + } + } else { + stick = movingobjectposition.entity.damageEntity(DamageSource.fireball(this, this.shooter), 5); + } + if (stick) { + // if the fireball 'sticks', ignite the target + EntityCombustByEntityEvent combustEvent = new EntityCombustByEntityEvent(projectile, damagee, 5); + pluginManager.callEvent(combustEvent); + + if (!combustEvent.isCancelled()) { + movingobjectposition.entity.j(combustEvent.getDuration()); + } + } + // CraftBukkit end } } else { int i = movingobjectposition.b; |