package mattparks.mods.space.venus.blocks;
import java.util.Random;
import mattparks.mods.space.core.SpaceCore;
import mattparks.mods.space.venus.VenusCore;
import net.minecraft.block.Block;
import net.minecraft.block.BlockTorch;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class BlockSulfurTorch extends BlockTorch {
public BlockSulfurTorch(String name) {
super();
this.setTickRandomly(true);
this.setLightLevel(1.0F);
this.setStepSound(Block.soundTypeWood);
this.setBlockName(name);
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
this.blockIcon = iconRegister.registerIcon(VenusCore.TEXTURE_PREFIX + "sulfurTorch");
}
@Override
@SideOnly(Side.CLIENT)
public CreativeTabs getCreativeTabToDisplayOn() {
return SpaceCore.spaceBlocksTab;
}
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int par4) {
return null;
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
private boolean canPlaceTorchOn(World par1World, int par2, int par3, int par4) {
if (World.doesBlockHaveSolidTopSurface(par1World, par2, par3, par4)) {
return true;
} else {
final Block block = par1World.getBlock(par2, par3, par4);
return block != null && block.canPlaceTorchOnTop(par1World, par2, par3, par4);
}
}
@Override
public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) {
return par1World.isSideSolid(par2 - 1, par3, par4, ForgeDirection.EAST, true) || par1World.isSideSolid(par2 + 1, par3, par4, ForgeDirection.WEST, true) || par1World.isSideSolid(par2, par3, par4 - 1, ForgeDirection.SOUTH, true) || par1World.isSideSolid(par2, par3, par4 + 1, ForgeDirection.NORTH, true) || this.canPlaceTorchOn(par1World, par2, par3 - 1, par4);
}
@Override
public int onBlockPlaced(World par1World, int par2, int par3, int par4, int par5, float par6, float par7, float par8, int par9) {
int j1 = par9;
if (par5 == 1 && this.canPlaceTorchOn(par1World, par2, par3 - 1, par4)) {
j1 = 5;
}
if (par5 == 2 && par1World.isSideSolid(par2, par3, par4 + 1, ForgeDirection.NORTH, true)) {
j1 = 4;
}
if (par5 == 3 && par1World.isSideSolid(par2, par3, par4 - 1, ForgeDirection.SOUTH, true)) {
j1 = 3;
}
if (par5 == 4 && par1World.isSideSolid(par2 + 1, par3, par4, ForgeDirection.WEST, true)) {
j1 = 2;
}
if (par5 == 5 && par1World.isSideSolid(par2 - 1, par3, par4, ForgeDirection.EAST, true)) {
j1 = 1;
}
return j1;
}
@Override
public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random) {
super.updateTick(par1World, par2, par3, par4, par5Random);
if (par1World.getBlockMetadata(par2, par3, par4) == 0) {
this.onBlockAdded(par1World, par2, par3, par4);
}
}
@Override
public void onBlockAdded(World par1World, int par2, int par3, int par4) {
if (par1World.getBlockMetadata(par2, par3, par4) == 0) {
if (par1World.isSideSolid(par2 - 1, par3, par4, ForgeDirection.EAST, true)) {
par1World.setBlockMetadataWithNotify(par2, par3, par4, 1, 2);
} else if (par1World.isSideSolid(par2 + 1, par3, par4, ForgeDirection.WEST, true)) {
par1World.setBlockMetadataWithNotify(par2, par3, par4, 2, 2);
} else if (par1World.isSideSolid(par2, par3, par4 - 1, ForgeDirection.SOUTH, true)) {
par1World.setBlockMetadataWithNotify(par2, par3, par4, 3, 2);
} else if (par1World.isSideSolid(par2, par3, par4 + 1, ForgeDirection.NORTH, true)) {
par1World.setBlockMetadataWithNotify(par2, par3, par4, 4, 2);
} else if (this.canPlaceTorchOn(par1World, par2, par3 - 1, par4)) {
par1World.setBlockMetadataWithNotify(par2, par3, par4, 5, 2);
}
}
this.dropTorchIfCantStay(par1World, par2, par3, par4);
}
@Override
public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, Block par5) {
if (this.dropTorchIfCantStay(par1World, par2, par3, par4)) {
final int i1 = par1World.getBlockMetadata(par2, par3, par4);
boolean flag = false;
if (!par1World.isSideSolid(par2 - 1, par3, par4, ForgeDirection.EAST, true) && i1 == 1) {
flag = true;
}
if (!par1World.isSideSolid(par2 + 1, par3, par4, ForgeDirection.WEST, true) && i1 == 2) {
flag = true;
}
if (!par1World.isSideSolid(par2, par3, par4 - 1, ForgeDirection.SOUTH, true) && i1 == 3) {
flag = true;
}
if (!par1World.isSideSolid(par2, par3, par4 + 1, ForgeDirection.NORTH, true) && i1 == 4) {
flag = true;
}
if (!this.canPlaceTorchOn(par1World, par2, par3 - 1, par4) && i1 == 5) {
flag = true;
}
if (flag) {
this.dropBlockAsItem(par1World, par2, par3, par4, par1World.getBlockMetadata(par2, par3, par4), 0);
par1World.setBlockToAir(par2, par3, par4);
}
}
}
protected boolean dropTorchIfCantStay(World par1World, int par2, int par3, int par4) {
if (!this.canPlaceBlockAt(par1World, par2, par3, par4)) {
if (par1World.getBlock(par2, par3, par4) == this) {
this.dropBlockAsItem(par1World, par2, par3, par4, par1World.getBlockMetadata(par2, par3, par4), 0);
par1World.setBlockToAir(par2, par3, par4);
}
return false;
} else {
return true;
}
}
@Override
public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random) {
final int l = par1World.getBlockMetadata(par2, par3, par4);
final double d0 = par2 + 0.5F;
final double d1 = par3 + 0.7F;
final double d2 = par4 + 0.5F;
final double d3 = 0.2199999988079071D;
final double d4 = 0.27000001072883606D;
if (l == 1) {
par1World.spawnParticle("smoke", d0 - d4, d1 + d3, d2, 0.0D, 0.0D, 0.0D);
par1World.spawnParticle("flame", d0 - d4, d1 + d3, d2, 0.0D, 0.0D, 0.0D);
} else if (l == 2) {
par1World.spawnParticle("smoke", d0 + d4, d1 + d3, d2, 0.0D, 0.0D, 0.0D);
par1World.spawnParticle("flame", d0 + d4, d1 + d3, d2, 0.0D, 0.0D, 0.0D);
} else if (l == 3) {
par1World.spawnParticle("smoke", d0, d1 + d3, d2 - d4, 0.0D, 0.0D, 0.0D);
par1World.spawnParticle("flame", d0, d1 + d3, d2 - d4, 0.0D, 0.0D, 0.0D);
} else if (l == 4) {
par1World.spawnParticle("smoke", d0, d1 + d3, d2 + d4, 0.0D, 0.0D, 0.0D);
par1World.spawnParticle("flame", d0, d1 + d3, d2 + d4, 0.0D, 0.0D, 0.0D);
} else {
par1World.spawnParticle("smoke", d0, d1, d2, 0.0D, 0.0D, 0.0D);
par1World.spawnParticle("flame", d0, d1, d2, 0.0D, 0.0D, 0.0D);
}
}
@Override
public MovingObjectPosition collisionRayTrace(World par1World, int par2, int par3, int par4, Vec3 par5Vec3, Vec3 par6Vec3) {
final int l = par1World.getBlockMetadata(par2, par3, par4) & 7;
float f = 0.15F;
if (l == 1) {
this.setBlockBounds(0.0F, 0.2F, 0.5F - f, f * 2.0F, 0.8F, 0.5F + f);
} else if (l == 2) {
this.setBlockBounds(1.0F - f * 2.0F, 0.2F, 0.5F - f, 1.0F, 0.8F, 0.5F + f);
} else if (l == 3) {
this.setBlockBounds(0.5F - f, 0.2F, 0.0F, 0.5F + f, 0.8F, f * 2.0F);
} else if (l == 4) {
this.setBlockBounds(0.5F - f, 0.2F, 1.0F - f * 2.0F, 0.5F + f, 0.8F, 1.0F);
} else {
f = 0.1F;
this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, 0.6F, 0.5F + f);
}
return super.collisionRayTrace(par1World, par2, par3, par4, par5Vec3, par6Vec3);
}
}