package mattparks.mods.space.venus.blocks;
import java.util.Random;
import mattparks.mods.space.core.SpaceCore;
import mattparks.mods.space.venus.VenusCore;
import mattparks.mods.space.venus.entities.EntityVenusianTNT;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.init.Items;
import net.minecraft.util.IIcon;
import net.minecraft.world.Explosion;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class BlockVenusianTNT extends Block {
private IIcon TNTTop;
private IIcon TNTBottom;
private IIcon TNTSide;
public BlockVenusianTNT(String name) {
super(Material.tnt);
this.setStepSound(Block.soundTypeGrass);
this.setHardness(0.3F);
this.setBlockName(name);
}
@SideOnly(Side.CLIENT)
@Override
public IIcon getIcon(int par1, int par2) {
return par1 == 0 ? this.TNTBottom : par1 == 1 ? this.TNTTop : this.TNTSide;
}
@Override
public void onBlockAdded(World par1World, int par2, int par3, int par4) {
super.onBlockAdded(par1World, par2, par3, par4);
if (par1World.isBlockIndirectlyGettingPowered(par2, par3, par4)) {
this.onBlockDestroyedByPlayer(par1World, par2, par3, par4, 1);
par1World.setBlockToAir(par2, par3, par4);
}
}
@Override
public CreativeTabs getCreativeTabToDisplayOn() {
return SpaceCore.spaceBlocksTab;
}
@Override
public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, Block par5) {
if (par1World.isBlockIndirectlyGettingPowered(par2, par3, par4)) {
this.onBlockDestroyedByPlayer(par1World, par2, par3, par4, 1);
par1World.setBlockToAir(par2, par3, par4);
}
}
@Override
public int quantityDropped(Random par1Random) {
return 1;
}
@Override
public void onBlockDestroyedByExplosion(World par1World, int par2, int par3, int par4, Explosion par5Explosion) {
if (!par1World.isRemote) {
final EntityVenusianTNT entitytntprimed = new EntityVenusianTNT(par1World, par2 + 0.5F, par3 + 0.5F, par4 + 0.5F, par5Explosion.getExplosivePlacedBy());
entitytntprimed.fuse = par1World.rand.nextInt(entitytntprimed.fuse / 4) + entitytntprimed.fuse / 8;
par1World.spawnEntityInWorld(entitytntprimed);
}
}
@Override
public void onBlockDestroyedByPlayer(World par1World, int par2, int par3, int par4, int par5) {
this.primeTnt(par1World, par2, par3, par4, par5, (EntityLivingBase) null);
}
public void primeTnt(World par1World, int par2, int par3, int par4, int par5, EntityLivingBase par6EntityLivingBase) {
if (!par1World.isRemote) {
if ((par5 & 1) == 1) {
final EntityVenusianTNT entitytntprimed = new EntityVenusianTNT(par1World, par2 + 0.5F, par3 + 0.5F, par4 + 0.5F, par6EntityLivingBase);
par1World.spawnEntityInWorld(entitytntprimed);
par1World.playSoundAtEntity(entitytntprimed, "game.tnt.primed", 1.0F, 1.0F);
}
}
}
@Override
public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9) {
if (par5EntityPlayer.getCurrentEquippedItem() != null && par5EntityPlayer.getCurrentEquippedItem().getItem() == Items.flint_and_steel) {
this.primeTnt(par1World, par2, par3, par4, 1, par5EntityPlayer);
par1World.setBlockToAir(par2, par3, par4);
par5EntityPlayer.getCurrentEquippedItem().damageItem(1, par5EntityPlayer);
return true;
}
return super.onBlockActivated(par1World, par2, par3, par4, par5EntityPlayer, par6, par7, par8, par9);
}
@Override
public void onEntityCollidedWithBlock(World par1World, int par2, int par3, int par4, Entity par5Entity) {
if (par5Entity instanceof EntityArrow && !par1World.isRemote) {
final EntityArrow entityarrow = (EntityArrow) par5Entity;
if (entityarrow.isBurning()) {
this.primeTnt(par1World, par2, par3, par4, 1, entityarrow.shootingEntity instanceof EntityLivingBase ? (EntityLivingBase) entityarrow.shootingEntity : null);
par1World.setBlockToAir(par2, par3, par4);
}
}
}
@Override
public boolean canDropFromExplosion(Explosion par1Explosion) {
return false;
}
@SideOnly(Side.CLIENT)
@Override
public void registerBlockIcons(IIconRegister par1IconRegister) {
this.TNTSide = par1IconRegister.registerIcon(VenusCore.TEXTURE_PREFIX + "venusianTNTSide");
this.TNTTop = par1IconRegister.registerIcon(VenusCore.TEXTURE_PREFIX + "venusianTNTTop");
this.TNTBottom = par1IconRegister.registerIcon(VenusCore.TEXTURE_PREFIX + "venusianTNTBottom");
}
}