From a1ad0c0103fd565e28b6d759100cdbc14e0974e5 Mon Sep 17 00:00:00 2001 From: Andrew Ardill Date: Tue, 29 Nov 2011 21:26:55 +1100 Subject: [PATCH] Add events for EntitySmallFireball --- .../minecraft/server/EntitySmallFireball.java | 45 ++++++++++++++++++- 1 file 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 b3673b8fa3..853f32b7de 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;