package biomesoplenty.blocks;

import java.util.List;
import java.util.Random;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Icon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import biomesoplenty.BiomesOPlenty;
import biomesoplenty.api.Items;

public class BlockBOPAmethyst extends Block
{
	public static final String[] types = new String[] {"amethystore", "amethystblock", "rubyore", "rubyblock", "peridotore", "peridotblock", "topazore", "topazblock", "tanzaniteore", "tanzaniteblock", "apatiteore", "apatiteblock", "sapphireore", "sapphireblock"};
	private Icon[] textures;

	public BlockBOPAmethyst(int par1, Material par2Material)
	{
		super(par1, par2Material);
		this.setCreativeTab(BiomesOPlenty.tabBiomesOPlenty);
		setStepSound(Block.soundStoneFootstep);
	}

	@Override
	public void registerIcons(IconRegister iconRegister)
	{
		textures = new Icon[types.length];

		for (int i = 0; i < types.length; ++i) {
			textures[i] = iconRegister.registerIcon("biomesoplenty:"+types[i]);
		}
	}

	@Override
	public Icon getIcon(int side, int meta)
	{
		if (meta < 0 || meta >= textures.length) {
			meta = 0;
		}

		return textures[meta];
	}

	@Override
	public int getDamageValue(World world, int x, int y, int z) {
		return world.getBlockMetadata(x, y, z);
	}

	@Override
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public void getSubBlocks(int blockID, CreativeTabs creativeTabs, List list) {
		for (int i = 0; i < types.length; ++i) {
			list.add(new ItemStack(blockID, 1, i));
		}
	}

	@Override
	public float getBlockHardness(World world, int x, int y, int z)
	{
		int meta = world.getBlockMetadata(x, y, z);
		float hardness = blockHardness;

		switch (meta)
		{
		case 0:
			hardness = 3.0F;
			break;

		case 1:
			hardness = 5.0F;
			break;
			
		case 2:
			hardness = 3.0F;
			break;

		case 3:
			hardness = 5.0F;
			break;
			
		case 4:
			hardness = 3.0F;
			break;

		case 5:
			hardness = 5.0F;
			break;
			
		case 6:
			hardness = 3.0F;
			break;

		case 7:
			hardness = 5.0F;
			break;
			
		case 8:
			hardness = 3.0F;
			break;

		case 9:
			hardness = 5.0F;
			break;
			
		case 10:
			hardness = 3.0F;
			break;

		case 11:
			hardness = 5.0F;
			break;
			
		case 12:
			hardness = 3.0F;
			break;

		case 13:
			hardness = 5.0F;
			break;
		}

		return hardness;
	}

	@Override
	public float getExplosionResistance(Entity par1Entity, World world, int x, int y, int z, double explosionX, double explosionY, double explosionZ)
	{
		int meta = world.getBlockMetadata(x, y, z);
		float resistance = blockResistance;

		switch (meta)
		{
		case 0:
			resistance = 5.0F;
			break;

		case 1:
			resistance = 10.0F;
			break;
			
		case 2:
			resistance = 5.0F;
			break;

		case 3:
			resistance = 10.0F;
			break;
			
		case 4:
			resistance = 5.0F;
			break;

		case 5:
			resistance = 10.0F;
			break;
			
		case 6:
			resistance = 5.0F;
			break;

		case 7:
			resistance = 10.0F;
			break;
			
		case 8:
			resistance = 5.0F;
			break;

		case 9:
			resistance = 10.0F;
			break;
			
		case 10:
			resistance = 5.0F;
			break;

		case 11:
			resistance = 10.0F;
			break;
			
		case 12:
			resistance = 5.0F;
			break;

		case 13:
			resistance = 10.0F;
			break;
		}

		return resistance / 5.0F;
	}

	@Override
	public int idDropped(int meta, Random par2Random, int par3)
	{
		if (meta == 0)
		{
			return Items.miscItems.get().itemID;
		}
		if (meta == 1)
		{
			return this.blockID;
		}
		if (meta == 2)
		{
			return Items.miscItems.get().itemID;
		}
		if (meta == 3)
		{
			return this.blockID;
		}
		if (meta == 4)
		{
			return Items.miscItems.get().itemID;
		}
		if (meta == 5)
		{
			return this.blockID;
		}
		if (meta == 6)
		{
			return Items.miscItems.get().itemID;
		}
		if (meta == 7)
		{
			return this.blockID;
		}
		if (meta == 8)
		{
			return Items.miscItems.get().itemID;
		}
		if (meta == 9)
		{
			return this.blockID;
		}
		if (meta == 10)
		{
			return Items.miscItems.get().itemID;
		}
		if (meta == 11)
		{
			return this.blockID;
		}
		if (meta == 12)
		{
			return Items.miscItems.get().itemID;
		}
		if (meta == 13)
		{
			return this.blockID;
		}
		
		return this.blockID;
	}

	@Override
	public int damageDropped(int meta)
	{
		if (meta == 0)
		{
			return 2;
		}
		if (meta == 1)
		{
			return meta;
		}
		if (meta == 2)
		{
			return 10;
		}
		if (meta == 3)
		{
			return meta;
		}
		if (meta == 4)
		{
			return 11;
		}
		if (meta == 5)
		{
			return meta;
		}
		if (meta == 6)
		{
			return 12;
		}
		if (meta == 7)
		{
			return meta;
		}
		if (meta == 8)
		{
			return 13;
		}
		if (meta == 9)
		{
			return meta;
		}
		if (meta == 10)
		{
			return 14;
		}
		if (meta == 11)
		{
			return meta;
		}
		if (meta == 12)
		{
			return 15;
		}
		if (meta == 13)
		{
			return meta;
		}
		
		return meta;
	}

	@Override
	public int quantityDropped(int meta, int fortune, Random random)
	{
		if (meta == 0)
		{
			return quantityDroppedWithBonus(fortune, random);
		}
		if (meta == 1)
		{
			return quantityDropped(random);
		}
		if (meta == 2)
		{
			return quantityDroppedWithBonus(fortune, random);
		}
		if (meta == 3)
		{
			return quantityDropped(random);
		}
		if (meta == 4)
		{
			return quantityDroppedWithBonus(fortune, random);
		}
		if (meta == 5)
		{
			return quantityDropped(random);
		}
		if (meta == 6)
		{
			return quantityDroppedWithBonus(fortune, random);
		}
		if (meta == 7)
		{
			return quantityDropped(random);
		}
		if (meta == 8)
		{
			return quantityDroppedWithBonus(fortune, random);
		}
		if (meta == 9)
		{
			return quantityDropped(random);
		}
		if (meta == 10)
		{
			return quantityDroppedWithBonus(fortune, random);
		}
		if (meta == 11)
		{
			return quantityDropped(random);
		}
		if (meta == 12)
		{
			return quantityDroppedWithBonus(fortune, random);
		}
		if (meta == 13)
		{
			return quantityDropped(random);
		}
		
		return quantityDropped(random);
	}

	@Override
	public int quantityDroppedWithBonus(int bonus, Random par2Random)
	{
		if (bonus > 0 && blockID != this.idDropped(0, par2Random, bonus))
		{
			int rnd = par2Random.nextInt(bonus + 2) - 1;

			if (rnd < 0) {
				rnd = 0;
			}

			return (1 + par2Random.nextInt(5)) * (rnd + 1);
		}
		else
			return (1 + par2Random.nextInt(5));
	}

	@Override
	public void dropBlockAsItemWithChance(World world, int par2, int par3, int par4, int par5, float par6, int par7)
	{
		super.dropBlockAsItemWithChance(world, par2, par3, par4, par5, par6, par7);

		if (this.idDropped(par5, world.rand, par7) != blockID)
		{
			int var8 =  MathHelper.getRandomIntegerInRange(world.rand, 1, 4);
			this.dropXpOnBlockBreak(world, par2, par3, par4, var8);
		}
	}
}
