electrodynamics/APIs/icbm/api/explosion/ExplosionEvent.java
2013-10-09 17:55:28 -04:00

141 lines
3.3 KiB
Java

package icbm.api.explosion;
import net.minecraft.entity.Entity;
import net.minecraft.world.Explosion;
import net.minecraft.world.World;
import net.minecraftforge.event.Cancelable;
import net.minecraftforge.event.Event;
/**
* Use ForgeSubscribe to subscribe to this event. This event is called every single time when an
* ICBM explosion happens.
*
* @author Calclavia
*
*/
@Cancelable
public class ExplosionEvent extends Event
{
/**
* The explosion object. Can be cast into {@link Explosion}. This event can be canceled to
* prevent a specific part of an explosion from being executed.
*/
public World world;
public double x, y, z;
public IExplosion iExplosion;
/**
* Pre-cast explosion class.
*/
public Explosion explosion;
public ExplosionEvent(World world, IExplosion iExplosion)
{
this.world = world;
this.iExplosion = iExplosion;
this.x = ((Explosion) iExplosion).explosionX;
this.y = ((Explosion) iExplosion).explosionY;
this.z = ((Explosion) iExplosion).explosionZ;
}
/**
* Called before an explosive is detonated or a missile is placed to check if detonation is
* possible. You may cancel and explosion here if needed. After this it will be a bit too late
* to prevent destruction without any losses.
*
* @author Calclavia
*
*/
@Cancelable
public static class ExplosivePreDetonationEvent extends Event
{
/** The world object */
public World world;
/** The entity causing the explosion. This could be null */
public Entity entity;
/** The position in which the explosion might happen. */
public double x, y, z;
/** The explosive object. */
public IExplosive explosion;
/** The explosive type. */
public ExplosiveType type;
public ExplosivePreDetonationEvent(World world, double x, double y, double z, ExplosiveType type, IExplosive explosion)
{
this.world = world;
this.type = type;
this.explosion = explosion;
this.x = x;
this.y = y;
this.z = z;
}
public ExplosivePreDetonationEvent(World world, Entity entity, ExplosiveType type, IExplosive explosion)
{
this.world = world;
this.entity = entity;
this.type = type;
this.explosion = explosion;
this.x = entity.posX;
this.y = entity.posY;
this.z = entity.posZ;
}
}
/**
* Called when an explosion is constructed.
*
* @author Calclavia
*
*/
public static class ExplosionConstructionEvent extends ExplosionEvent
{
public ExplosionConstructionEvent(World world, IExplosion explosion)
{
super(world, explosion);
}
}
/**
* Called before an explosion happens.
*
* @author Calclavia
*
*/
public static class PreExplosionEvent extends ExplosionEvent
{
public PreExplosionEvent(World world, IExplosion explosion)
{
super(world, explosion);
}
}
/**
* Called while an explosion happens. May be called every single tick if explosion is
* procedural. (E.g: Red matter explosive)
*
* @author Calclavia
*
*/
public static class DoExplosionEvent extends ExplosionEvent
{
public DoExplosionEvent(World world, IExplosion explosion)
{
super(world, explosion);
}
}
/**
* Called after an explosion happens.
*
* @author Calclavia
*
*/
public static class PostExplosionEvent extends ExplosionEvent
{
public PostExplosionEvent(World world, IExplosion explosion)
{
super(world, explosion);
}
}
}