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