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