    001    package net.minecraft.block;
    002
    003    import cpw.mods.fml.common.Side;
    004    import cpw.mods.fml.common.asm.SideOnly;
    005    import java.util.ArrayList;
    006    import java.util.List;
    007    import java.util.Random;
    008    import net.minecraft.block.material.Material;
    009    import net.minecraft.creativetab.CreativeTabs;
    010    import net.minecraft.entity.player.EntityPlayer;
    011    import net.minecraft.item.Item;
    012    import net.minecraft.item.ItemStack;
    013    import net.minecraft.stats.StatList;
    014    import net.minecraft.world.ColorizerFoliage;
    015    import net.minecraft.world.ColorizerGrass;
    016    import net.minecraft.world.IBlockAccess;
    017    import net.minecraft.world.World;
    018
    019    import net.minecraftforge.common.ForgeHooks;
    020    import net.minecraftforge.common.IShearable;
    021
    022    public class BlockTallGrass extends BlockFlower implements IShearable
    023    {
    024        protected BlockTallGrass(int par1, int par2)
    025        {
    026            super(par1, par2, Material.vine);
    027            float var3 = 0.4F;
    028            this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, 0.8F, 0.5F + var3);
    029        }
    030
    031        /**
    032         * From the specified side and block metadata retrieves the blocks texture. Args: side, metadata
    033         */
    034        public int getBlockTextureFromSideAndMetadata(int par1, int par2)
    035        {
    036            return par2 == 1 ? this.blockIndexInTexture : (par2 == 2 ? this.blockIndexInTexture + 16 + 1 : (par2 == 0 ? this.blockIndexInTexture + 16 : this.blockIndexInTexture));
    037        }
    038
    039        /**
    040         * Returns the ID of the items to drop on destruction.
    041         */
    042        public int idDropped(int par1, Random par2Random, int par3)
    043        {
    044            return -1;
    045        }
    046
    047        /**
    048         * Returns the usual quantity dropped by the block plus a bonus of 1 to 'i' (inclusive).
    049         */
    050        public int quantityDroppedWithBonus(int par1, Random par2Random)
    051        {
    052            return 1 + par2Random.nextInt(par1 * 2 + 1);
    053        }
    054
    055        /**
    056         * Called when the player destroys a block with an item that can harvest it. (i, j, k) are the coordinates of the
    057         * block and l is the block's subtype/damage.
    058         */
    059        public void harvestBlock(World par1World, EntityPlayer par2EntityPlayer, int par3, int par4, int par5, int par6)
    060        {
    061            super.harvestBlock(par1World, par2EntityPlayer, par3, par4, par5, par6);
    062        }
    063
    064        @SideOnly(Side.CLIENT)
    065        public int getBlockColor()
    066        {
    067            double var1 = 0.5D;
    068            double var3 = 1.0D;
    069            return ColorizerGrass.getGrassColor(var1, var3);
    070        }
    071
    072        @SideOnly(Side.CLIENT)
    073
    074        /**
    075         * Returns the color this block should be rendered. Used by leaves.
    076         */
    077        public int getRenderColor(int par1)
    078        {
    079            return par1 == 0 ? 16777215 : ColorizerFoliage.getFoliageColorBasic();
    080        }
    081
    082        @SideOnly(Side.CLIENT)
    083
    084        /**
    085         * Returns a integer with hex for 0xrrggbb with this color multiplied against the blocks color. Note only called
    086         * when first determining what to render.
    087         */
    088        public int colorMultiplier(IBlockAccess par1IBlockAccess, int par2, int par3, int par4)
    089        {
    090            int var5 = par1IBlockAccess.getBlockMetadata(par2, par3, par4);
    091            return var5 == 0 ? 16777215 : par1IBlockAccess.getBiomeGenForCoords(par2, par4).getBiomeGrassColor();
    092        }
    093
    094        /**
    095         * Get the block's damage value (for use with pick block).
    096         */
    097        public int getDamageValue(World par1World, int par2, int par3, int par4)
    098        {
    099            return par1World.getBlockMetadata(par2, par3, par4);
    100        }
    101
    102        @SideOnly(Side.CLIENT)
    103
    104        /**
    105         * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks)
    106         */
    107        public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List)
    108        {
    109            for (int var4 = 1; var4 < 3; ++var4)
    110            {
    111                par3List.add(new ItemStack(par1, 1, var4));
    112            }
    113        }
    114
    115        @Override
    116        public ArrayList<ItemStack> getBlockDropped(World world, int x, int y, int z, int meta, int fortune)
    117        {
    118            ArrayList<ItemStack> ret = new ArrayList<ItemStack>();
    119            if (world.rand.nextInt(8) != 0)
    120            {
    121                return ret;
    122            }
    123
    124            ItemStack item = ForgeHooks.getGrassSeed(world);
    125            if (item != null)
    126            {
    127                ret.add(item);
    128            }
    129            return ret;
    130        }
    131
    132        @Override
    133        public boolean isShearable(ItemStack item, World world, int x, int y, int z)
    134        {
    135            return true;
    136        }
    137
    138        @Override
    139        public ArrayList<ItemStack> onSheared(ItemStack item, World world, int x, int y, int z, int fortune)
    140        {
    141            ArrayList<ItemStack> ret = new ArrayList<ItemStack>();
    142            ret.add(new ItemStack(this, 1, world.getBlockMetadata(x, y, z)));
    143            return ret;
    144        }
    145    }