summaryrefslogtreecommitdiffstats
path: root/src/main/java/net/minecraft/server/Explosion.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/minecraft/server/Explosion.java')
-rw-r--r--src/main/java/net/minecraft/server/Explosion.java65
1 files changed, 14 insertions, 51 deletions
diff --git a/src/main/java/net/minecraft/server/Explosion.java b/src/main/java/net/minecraft/server/Explosion.java
index 11007d40..56fa9998 100644
--- a/src/main/java/net/minecraft/server/Explosion.java
+++ b/src/main/java/net/minecraft/server/Explosion.java
@@ -9,10 +9,7 @@ import java.util.Map;
import java.util.Random;
// CraftBukkit start
-import org.bukkit.Bukkit;
-import org.bukkit.event.entity.EntityDamageByBlockEvent;
-import org.bukkit.event.entity.EntityDamageByEntityEvent;
-import org.bukkit.event.entity.EntityDamageEvent;
+import org.bukkit.craftbukkit.event.CraftEventFactory;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.Location;
// CraftBukkit end
@@ -130,55 +127,21 @@ public class Explosion {
double d9 = (double) this.world.a(vec3d, entity.boundingBox);
double d10 = (1.0D - d7) * d9;
- // CraftBukkit start - Explosion damage hook
- org.bukkit.entity.Entity damagee = (entity == null) ? null : entity.getBukkitEntity();
- float damageDone = (float) ((int) ((d10 * d10 + d10) / 2.0D * 8.0D * (double) this.size + 1.0D));
-
- if (damagee == null) {
- // nothing was hurt
- } else if (this.source == null) { // Block explosion (without an entity source; bed etc.)
- EntityDamageByBlockEvent event = new EntityDamageByBlockEvent(null, damagee, EntityDamageEvent.DamageCause.BLOCK_EXPLOSION, damageDone);
- Bukkit.getPluginManager().callEvent(event);
-
- if (!event.isCancelled()) {
- damagee.setLastDamageCause(event);
- entity.damageEntity(DamageSource.explosion(this), (float) event.getDamage());
- double d11 = EnchantmentProtection.a(entity, d10);
-
- entity.motX += d0 * d11;
- entity.motY += d1 * d11;
- entity.motZ += d2 * d11;
- if (entity instanceof EntityHuman) {
- this.l.put((EntityHuman) entity, Vec3D.a(d0 * d10, d1 * d10, d2 * d10));
- }
- }
- } else {
- final org.bukkit.entity.Entity damager = this.source.getBukkitEntity();
- final EntityDamageEvent.DamageCause damageCause;
-
- if (damager instanceof org.bukkit.entity.TNTPrimed) {
- damageCause = EntityDamageEvent.DamageCause.BLOCK_EXPLOSION;
- } else {
- damageCause = EntityDamageEvent.DamageCause.ENTITY_EXPLOSION;
- }
-
- EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(damager, damagee, damageCause, damageDone);
- Bukkit.getPluginManager().callEvent(event);
-
- if (!event.isCancelled()) {
- entity.getBukkitEntity().setLastDamageCause(event);
- entity.damageEntity(DamageSource.explosion(this), (float) event.getDamage());
- double d11 = EnchantmentProtection.a(entity, d10);
-
- entity.motX += d0 * d11;
- entity.motY += d1 * d11;
- entity.motZ += d2 * d11;
- if (entity instanceof EntityHuman) {
- this.l.put((EntityHuman) entity, Vec3D.a(d0 * d10, d1 * d10, d2 * d10));
- }
- }
+ // CraftBukkit start
+ CraftEventFactory.entityDamage = source;
+ if (!entity.damageEntity(DamageSource.explosion(this), (float) ((int) ((d10 * d10 + d10) / 2.0D * 8.0D * (double) this.size + 1.0D)))) {
+ CraftEventFactory.entityDamage = null;
+ continue;
}
// CraftBukkit end
+ double d11 = EnchantmentProtection.a(entity, d10);
+
+ entity.motX += d0 * d11;
+ entity.motY += d1 * d11;
+ entity.motZ += d2 * d11;
+ if (entity instanceof EntityHuman) {
+ this.l.put((EntityHuman) entity, Vec3D.a(d0 * d10, d1 * d10, d2 * d10));
+ }
}
}
}