package emasher.entities; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.projectile.EntityThrowable; import net.minecraft.init.Blocks; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; public class EntitySmokeBomb extends EntityThrowable { public EntitySmokeBomb( World par1World, EntityLivingBase par2EntityLivingBase ) { super( par1World, par2EntityLivingBase ); } public EntitySmokeBomb( World par1World ) { super( par1World ); } public EntitySmokeBomb( World par1World, int x, int y, int z ) { super( par1World, x, y, z ); } /** * Called when this EntityThrowable hits a block or entity. */ @Override public void onImpact( MovingObjectPosition mop ) { if( !this.worldObj.isRemote ) { ForgeDirection d = ForgeDirection.UP; boolean set = false; if( worldObj.getBlock( mop.blockX, mop.blockY, mop.blockZ ) == Blocks.air ) { worldObj.setBlock( mop.blockX, mop.blockY, mop.blockZ, emasher.blocks.Blocks.smoke() ); } else if( worldObj.getBlock( mop.blockX + d.offsetX, mop.blockY + d.offsetY, mop.blockZ + d.offsetZ ) == Blocks.air ) { worldObj.setBlock( mop.blockX + d.offsetX, mop.blockY + d.offsetY, mop.blockZ + d.offsetZ, emasher.blocks.Blocks.smoke() ); } else { for( int i = 2; i < 6; i++ ) { d = ForgeDirection.getOrientation( i ); if( worldObj.getBlock( mop.blockX + d.offsetX, mop.blockY + d.offsetY, mop.blockZ + d.offsetZ ) == Blocks.air ) { worldObj.setBlock( mop.blockX + d.offsetX, mop.blockY + d.offsetY, mop.blockZ + d.offsetZ, emasher.blocks.Blocks.smoke() ); set = true; break; } } if( !set ) { d = ForgeDirection.DOWN; if( worldObj.getBlock( mop.blockX + d.offsetX, mop.blockY + d.offsetY, mop.blockZ + d.offsetZ ) == Blocks.air ) { worldObj.setBlock( mop.blockX + d.offsetX, mop.blockY + d.offsetY, mop.blockZ + d.offsetZ, emasher.blocks.Blocks.smoke() ); } } } this.setDead(); } } }