001 package net.minecraft.src; 002 003 import cpw.mods.fml.common.Side; 004 import cpw.mods.fml.common.asm.SideOnly; 005 import java.util.List; 006 007 import net.minecraftforge.common.ForgeHooks; 008 import net.minecraftforge.common.MinecraftForge; 009 import net.minecraftforge.event.entity.player.BonemealEvent; 010 011 public class ItemDye extends Item 012 { 013 /** List of dye color names */ 014 public static final String[] dyeColorNames = new String[] {"black", "red", "green", "brown", "blue", "purple", "cyan", "silver", "gray", "pink", "lime", "yellow", "lightBlue", "magenta", "orange", "white"}; 015 public static final int[] dyeColors = new int[] {1973019, 11743532, 3887386, 5320730, 2437522, 8073150, 2651799, 2651799, 4408131, 14188952, 4312372, 14602026, 6719955, 12801229, 15435844, 15790320}; 016 017 public ItemDye(int par1) 018 { 019 super(par1); 020 this.setHasSubtypes(true); 021 this.setMaxDamage(0); 022 this.setTabToDisplayOn(CreativeTabs.tabMaterials); 023 } 024 025 @SideOnly(Side.CLIENT) 026 027 /** 028 * Gets an icon index based on an item's damage value 029 */ 030 public int getIconFromDamage(int par1) 031 { 032 int var2 = MathHelper.clamp_int(par1, 0, 15); 033 return this.iconIndex + var2 % 8 * 16 + var2 / 8; 034 } 035 036 public String getItemNameIS(ItemStack par1ItemStack) 037 { 038 int var2 = MathHelper.clamp_int(par1ItemStack.getItemDamage(), 0, 15); 039 return super.getItemName() + "." + dyeColorNames[var2]; 040 } 041 042 public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) 043 { 044 if (!par2EntityPlayer.canPlayerEdit(par4, par5, par6)) 045 { 046 return false; 047 } 048 else 049 { 050 int var11; 051 int var12; 052 053 if (par1ItemStack.getItemDamage() == 15) 054 { 055 var11 = par3World.getBlockId(par4, par5, par6); 056 057 BonemealEvent event = new BonemealEvent(par2EntityPlayer, par3World, var11, par4, par5, par6); 058 if (MinecraftForge.EVENT_BUS.post(event)) 059 { 060 return false; 061 } 062 063 if (event.isHandeled()) 064 { 065 if (!par3World.isRemote) 066 { 067 par1ItemStack.stackSize--; 068 } 069 return true; 070 } 071 072 if (var11 == Block.sapling.blockID) 073 { 074 if (!par3World.isRemote) 075 { 076 ((BlockSapling)Block.sapling).growTree(par3World, par4, par5, par6, par3World.rand); 077 --par1ItemStack.stackSize; 078 } 079 080 return true; 081 } 082 083 if (var11 == Block.mushroomBrown.blockID || var11 == Block.mushroomRed.blockID) 084 { 085 if (!par3World.isRemote && ((BlockMushroom)Block.blocksList[var11]).fertilizeMushroom(par3World, par4, par5, par6, par3World.rand)) 086 { 087 --par1ItemStack.stackSize; 088 } 089 090 return true; 091 } 092 093 if (var11 == Block.melonStem.blockID || var11 == Block.pumpkinStem.blockID) 094 { 095 if (par3World.getBlockMetadata(par4, par5, par6) == 7) 096 { 097 return false; 098 } 099 100 if (!par3World.isRemote) 101 { 102 ((BlockStem)Block.blocksList[var11]).fertilizeStem(par3World, par4, par5, par6); 103 --par1ItemStack.stackSize; 104 } 105 106 return true; 107 } 108 109 if (var11 == Block.crops.blockID) 110 { 111 if (par3World.getBlockMetadata(par4, par5, par6) == 7) 112 { 113 return false; 114 } 115 116 if (!par3World.isRemote) 117 { 118 ((BlockCrops)Block.crops).fertilize(par3World, par4, par5, par6); 119 --par1ItemStack.stackSize; 120 } 121 122 return true; 123 } 124 125 if (var11 == Block.cocoa.blockID) 126 { 127 if (!par3World.isRemote) 128 { 129 par3World.setBlockMetadataWithNotify(par4, par5, par6, 8 | BlockDirectional.getDirection(par3World.getBlockMetadata(par4, par5, par6))); 130 --par1ItemStack.stackSize; 131 } 132 133 return true; 134 } 135 136 if (var11 == Block.grass.blockID) 137 { 138 if (!par3World.isRemote) 139 { 140 --par1ItemStack.stackSize; 141 label135: 142 143 for (var12 = 0; var12 < 128; ++var12) 144 { 145 int var13 = par4; 146 int var14 = par5 + 1; 147 int var15 = par6; 148 149 for (int var16 = 0; var16 < var12 / 16; ++var16) 150 { 151 var13 += itemRand.nextInt(3) - 1; 152 var14 += (itemRand.nextInt(3) - 1) * itemRand.nextInt(3) / 2; 153 var15 += itemRand.nextInt(3) - 1; 154 155 if (par3World.getBlockId(var13, var14 - 1, var15) != Block.grass.blockID || par3World.isBlockNormalCube(var13, var14, var15)) 156 { 157 continue label135; 158 } 159 } 160 161 if (par3World.getBlockId(var13, var14, var15) == 0) 162 { 163 if (itemRand.nextInt(10) != 0) 164 { 165 if (Block.tallGrass.canBlockStay(par3World, var13, var14, var15)) 166 { 167 par3World.setBlockAndMetadataWithNotify(var13, var14, var15, Block.tallGrass.blockID, 1); 168 } 169 } 170 else 171 { 172 ForgeHooks.plantGrass(par3World, var13, var14, var15); 173 } 174 } 175 } 176 } 177 178 return true; 179 } 180 } 181 else if (par1ItemStack.getItemDamage() == 3) 182 { 183 var11 = par3World.getBlockId(par4, par5, par6); 184 var12 = par3World.getBlockMetadata(par4, par5, par6); 185 186 if (var11 == Block.wood.blockID && BlockLog.limitToValidMetadata(var12) == 3) 187 { 188 if (par7 == 0) 189 { 190 return false; 191 } 192 193 if (par7 == 1) 194 { 195 return false; 196 } 197 198 if (par7 == 2) 199 { 200 --par6; 201 } 202 203 if (par7 == 3) 204 { 205 ++par6; 206 } 207 208 if (par7 == 4) 209 { 210 --par4; 211 } 212 213 if (par7 == 5) 214 { 215 ++par4; 216 } 217 218 if (par3World.isAirBlock(par4, par5, par6)) 219 { 220 par3World.setBlockWithNotify(par4, par5, par6, Block.cocoa.blockID); 221 222 if (par3World.getBlockId(par4, par5, par6) == Block.cocoa.blockID) 223 { 224 Block.blocksList[Block.cocoa.blockID].updateBlockMetadata(par3World, par4, par5, par6, par7, par8, par9, par10); 225 } 226 227 if (!par2EntityPlayer.capabilities.isCreativeMode) 228 { 229 --par1ItemStack.stackSize; 230 } 231 } 232 233 return true; 234 } 235 } 236 237 return false; 238 } 239 } 240 241 /** 242 * die sheep, place saddles, etc ... 243 */ 244 public boolean itemInteractionForEntity(ItemStack par1ItemStack, EntityLiving par2EntityLiving) 245 { 246 if (par2EntityLiving instanceof EntitySheep) 247 { 248 EntitySheep var3 = (EntitySheep)par2EntityLiving; 249 int var4 = BlockCloth.getBlockFromDye(par1ItemStack.getItemDamage()); 250 251 if (!var3.getSheared() && var3.getFleeceColor() != var4) 252 { 253 var3.setFleeceColor(var4); 254 --par1ItemStack.stackSize; 255 } 256 257 return true; 258 } 259 else 260 { 261 return false; 262 } 263 } 264 265 @SideOnly(Side.CLIENT) 266 267 /** 268 * returns a list of items with the same ID, but different meta (eg: dye returns 16 items) 269 */ 270 public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) 271 { 272 for (int var4 = 0; var4 < 16; ++var4) 273 { 274 par3List.add(new ItemStack(par1, 1, var4)); 275 } 276 } 277 }