package drzhark.mocreatures.block;

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

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

import drzhark.mocreatures.MoCreatures;

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.item.ItemStack;
import net.minecraft.util.Icon;
import net.minecraft.world.World;

public class MoCBlockGrass extends MoCBlock
{
	 
	@SideOnly(Side.CLIENT)
    private Icon[][] icons;
	
	
	public MoCBlockGrass(int par1)
    {
        super(par1, Material.grass);
        setTickRandomly(true);
        this.setCreativeTab(CreativeTabs.tabBlock);
    }
    
	
	public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random)
    {
		
        if (!MoCreatures.isServer())
        {
            return;
        }

        
        if (par1World.getBlockLightValue(par2, par3 + 1, par4) < 4 && Block.lightOpacity[par1World.getBlockId(par2, par3 + 1, par4)] > 2)
        {
            //par1World.setBlockWithNotify(par2, par3, par4, MoCreatures.mocDirt.blockID);
            par1World.setBlock(par2, par3, par4, MoCreatures.mocDirt.blockID, this.getDamageValue(par1World, par2, par3, par4), 3);
        }
        else if (par1World.getBlockLightValue(par2, par3 + 1, par4) >= 9)
        {
            for (int i = 0; i < 45; i++)
            {
                int j = (par2 + par5Random.nextInt(3)) - 1;
                int k = (par3 + par5Random.nextInt(5)) - 3;
                int l = (par4 + par5Random.nextInt(3)) - 1;
                int i1 = par1World.getBlockId(j, k + 1, l);

                if (par1World.getBlockId(j, k, l) == MoCreatures.mocDirt.blockID && par1World.getBlockLightValue(j, k + 1, l) >= 4 && Block.lightOpacity[i1] <= 2)
                {
                    par1World.setBlock(j, k, l, MoCreatures.mocGrass.blockID, this.getDamageValue(par1World, j, k, l), 3);
                }
            }
        }
    }
	
	
	//old one without metadata
    /*public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random)
    {
        if (!MoCreatures.isServer())
        {
            return;
        }

        if (par1World.getBlockLightValue(par2, par3 + 1, par4) < 4 && Block.lightOpacity[par1World.getBlockId(par2, par3 + 1, par4)] > 2)
        {
            par1World.setBlockWithNotify(par2, par3, par4, MoCreatures.mocDirt.blockID);
        }
        else if (par1World.getBlockLightValue(par2, par3 + 1, par4) >= 9)
        {
            for (int i = 0; i < 45; i++)
            {
                int j = (par2 + par5Random.nextInt(3)) - 1;
                int k = (par3 + par5Random.nextInt(5)) - 3;
                int l = (par4 + par5Random.nextInt(3)) - 1;
                int i1 = par1World.getBlockId(j, k + 1, l);

                if (par1World.getBlockId(j, k, l) == MoCreatures.mocDirt.blockID && par1World.getBlockLightValue(j, k + 1, l) >= 4 && Block.lightOpacity[i1] <= 2)
                {
                    par1World.setBlockWithNotify(j, k, l, MoCreatures.mocGrass.blockID);
                }
            }
        }
    }*/
    
    
   
    public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)
    {
        super.randomDisplayTick(par1World, par2, par3, par4, par5Random);

        if (par5Random.nextInt(75) == 0)
        {
            par1World.spawnParticle("depthsuspend", (float)par2 + par5Random.nextFloat(), (float)par3 + 1.1F, (float)par4 + par5Random.nextFloat(), 20.0D, 20.0D, 20.0D);
        }
    }


    
    @SideOnly(Side.CLIENT)
	public void getSubBlocks(int par1, CreativeTabs tab, List subItems) 
    {
		for (int ix = 0; ix < MoCreatures.multiBlockNames.size(); ix++) {
			subItems.add(new ItemStack(this, 1, ix));
		}
	}
    
    @Override
    public int damageDropped(int i)
    {
        return i;
    }
    
	//func_94332_a = registerIcons(IconRegister)
    //func_94245_a = registerIcon(String)
	@SideOnly(Side.CLIENT)
	@Override
    public void registerIcons(IconRegister par1IconRegister)
    {
		icons = new Icon[MoCreatures.multiBlockNames.size()][3];
        
		for (int x = 0; x < MoCreatures.multiBlockNames.size(); x++)
		{
			icons[x][0] = par1IconRegister.registerIcon("mocreatures:" + "dirt_" + MoCreatures.multiBlockNames.get(x));
			icons[x][1] = par1IconRegister.registerIcon("mocreatures:" + "grassTop_" + MoCreatures.multiBlockNames.get(x));
			icons[x][2] = par1IconRegister.registerIcon("mocreatures:" + "grassSide_" + MoCreatures.multiBlockNames.get(x));
		}
    }
   
    
	/**
     * From the specified side and block metadata retrieves the blocks texture. Args: side, metadata
     */
	
	
	@SideOnly(Side.CLIENT)
	@Override
    public Icon getIcon(int par1Side, int Metadata)
    {
		if (par1Side > 2) par1Side = 2;
        return icons[Metadata][par1Side];
    }
    
	
}