    001package net.minecraft.block;
    002
    003import cpw.mods.fml.relauncher.Side;
    004import cpw.mods.fml.relauncher.SideOnly;
    005
    006import java.util.ArrayList;
    007import java.util.Random;
    008import net.minecraft.client.renderer.texture.IconRegister;
    009import net.minecraft.creativetab.CreativeTabs;
    010import net.minecraft.item.Item;
    011import net.minecraft.item.ItemStack;
    012import net.minecraft.util.Icon;
    013import net.minecraft.world.World;
    014import net.minecraftforge.common.ForgeDirection;
    015
    016public class BlockNetherStalk extends BlockFlower
    017{
    018    private static final String[] field_94373_a = new String[] {"netherStalk_0", "netherStalk_1", "netherStalk_2"};
    019    @SideOnly(Side.CLIENT)
    020    private Icon[] field_94372_b;
    021
    022    protected BlockNetherStalk(int par1)
    023    {
    024        super(par1);
    025        this.setTickRandomly(true);
    026        float f = 0.5F;
    027        this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, 0.25F, 0.5F + f);
    028        this.setCreativeTab((CreativeTabs)null);
    029    }
    030
    031    /**
    032     * Gets passed in the blockID of the block below and supposed to return true if its allowed to grow on the type of
    033     * blockID passed in. Args: blockID
    034     */
    035    protected boolean canThisPlantGrowOnThisBlockID(int par1)
    036    {
    037        return par1 == Block.slowSand.blockID;
    038    }
    039
    040    /**
    041     * Can this block stay at this position.  Similar to canPlaceBlockAt except gets checked often with plants.
    042     */
    043    public boolean canBlockStay(World par1World, int par2, int par3, int par4)
    044    {
    045        Block block = Block.blocksList[par1World.getBlockId(par2, par3 - 1, par4)];
    046        return (block != null && block.canSustainPlant(par1World, par2, par3 - 1, par4, ForgeDirection.UP, this));
    047    }
    048
    049    /**
    050     * Ticks the block if it's been scheduled
    051     */
    052    public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random)
    053    {
    054        int l = par1World.getBlockMetadata(par2, par3, par4);
    055
    056        if (l < 3 && par5Random.nextInt(10) == 0)
    057        {
    058            ++l;
    059            par1World.setBlockMetadataWithNotify(par2, par3, par4, l, 2);
    060        }
    061
    062        super.updateTick(par1World, par2, par3, par4, par5Random);
    063    }
    064
    065    @SideOnly(Side.CLIENT)
    066
    067    /**
    068     * From the specified side and block metadata retrieves the blocks texture. Args: side, metadata
    069     */
    070    public Icon getBlockTextureFromSideAndMetadata(int par1, int par2)
    071    {
    072        return par2 >= 3 ? this.field_94372_b[2] : (par2 > 0 ? this.field_94372_b[1] : this.field_94372_b[0]);
    073    }
    074
    075    /**
    076     * The type of render function that is called for this block
    077     */
    078    public int getRenderType()
    079    {
    080        return 6;
    081    }
    082
    083    /**
    084     * Drops the block items with a specified chance of dropping the specified items
    085     */
    086    public void dropBlockAsItemWithChance(World par1World, int par2, int par3, int par4, int par5, float par6, int par7)
    087    {
    088        super.dropBlockAsItemWithChance(par1World, par2, par3, par4, par5, par6, par7);
    089    }
    090
    091    /**
    092     * Returns the ID of the items to drop on destruction.
    093     */
    094    public int idDropped(int par1, Random par2Random, int par3)
    095    {
    096        return 0;
    097    }
    098
    099    /**
    100     * Returns the quantity of items to drop on block destruction.
    101     */
    102    public int quantityDropped(Random par1Random)
    103    {
    104        return 0;
    105    }
    106
    107    @SideOnly(Side.CLIENT)
    108
    109    /**
    110     * only called by clickMiddleMouseButton , and passed to inventory.setCurrentItem (along with isCreative)
    111     */
    112    public int idPicked(World par1World, int par2, int par3, int par4)
    113    {
    114        return Item.netherStalkSeeds.itemID;
    115    }
    116
    117    @SideOnly(Side.CLIENT)
    118    public void func_94332_a(IconRegister par1IconRegister)
    119    {
    120        this.field_94372_b = new Icon[field_94373_a.length];
    121
    122        for (int i = 0; i < this.field_94372_b.length; ++i)
    123        {
    124            this.field_94372_b[i] = par1IconRegister.func_94245_a(field_94373_a[i]);
    125        }
    126    }
    127
    128    @Override
    129    public ArrayList<ItemStack> getBlockDropped(World world, int x, int y, int z, int metadata, int fortune)
    130    {
    131        ArrayList<ItemStack> ret = new ArrayList<ItemStack>();
    132        int count = 1;
    133
    134        if (metadata >= 3)
    135        {
    136            count = 2 + world.rand.nextInt(3) + (fortune > 0 ? world.rand.nextInt(fortune + 1) : 0);
    137        }
    138
    139        for (int i = 0; i < count; i++)
    140        {
    141            ret.add(new ItemStack(Item.netherStalkSeeds));
    142        }
    143
    144        return ret;
    145    }
    146}