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 }