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.canPlayerEdit(par4, par5, par6, par7, par1ItemStack)) 050 { 051 return false; 052 } 053 else 054 { 055 int var11; 056 int var12; 057 int var13; 058 059 if (par1ItemStack.getItemDamage() == 15) 060 { 061 var11 = par3World.getBlockId(par4, par5, par6); 062 063 BonemealEvent event = new BonemealEvent(par2EntityPlayer, par3World, var11, par4, par5, par6); 064 if (MinecraftForge.EVENT_BUS.post(event)) 065 { 066 return false; 067 } 068 069 if (event.getResult() == Result.ALLOW) 070 { 071 if (!par3World.isRemote) 072 { 073 par1ItemStack.stackSize--; 074 } 075 return true; 076 } 077 078 if (var11 == Block.sapling.blockID) 079 { 080 if (!par3World.isRemote) 081 { 082 ((BlockSapling)Block.sapling).growTree(par3World, par4, par5, par6, par3World.rand); 083 --par1ItemStack.stackSize; 084 } 085 086 return true; 087 } 088 089 if (var11 == Block.mushroomBrown.blockID || var11 == Block.mushroomRed.blockID) 090 { 091 if (!par3World.isRemote && ((BlockMushroom)Block.blocksList[var11]).fertilizeMushroom(par3World, par4, par5, par6, par3World.rand)) 092 { 093 --par1ItemStack.stackSize; 094 } 095 096 return true; 097 } 098 099 if (var11 == Block.melonStem.blockID || var11 == Block.pumpkinStem.blockID) 100 { 101 if (par3World.getBlockMetadata(par4, par5, par6) == 7) 102 { 103 return false; 104 } 105 106 if (!par3World.isRemote) 107 { 108 ((BlockStem)Block.blocksList[var11]).fertilizeStem(par3World, par4, par5, par6); 109 --par1ItemStack.stackSize; 110 } 111 112 return true; 113 } 114 115 if (var11 > 0 && Block.blocksList[var11] instanceof BlockCrops) 116 { 117 if (par3World.getBlockMetadata(par4, par5, par6) == 7) 118 { 119 return false; 120 } 121 122 if (!par3World.isRemote) 123 { 124 ((BlockCrops)Block.blocksList[var11]).fertilize(par3World, par4, par5, par6); 125 --par1ItemStack.stackSize; 126 } 127 128 return true; 129 } 130 131 if (var11 == Block.cocoaPlant.blockID) 132 { 133 if (!par3World.isRemote) 134 { 135 par3World.setBlockMetadataWithNotify(par4, par5, par6, 8 | BlockDirectional.getDirection(par3World.getBlockMetadata(par4, par5, par6))); 136 --par1ItemStack.stackSize; 137 } 138 139 return true; 140 } 141 142 if (var11 == Block.grass.blockID) 143 { 144 if (!par3World.isRemote) 145 { 146 --par1ItemStack.stackSize; 147 label133: 148 149 for (var12 = 0; var12 < 128; ++var12) 150 { 151 var13 = par4; 152 int var14 = par5 + 1; 153 int var15 = par6; 154 155 for (int var16 = 0; var16 < var12 / 16; ++var16) 156 { 157 var13 += itemRand.nextInt(3) - 1; 158 var14 += (itemRand.nextInt(3) - 1) * itemRand.nextInt(3) / 2; 159 var15 += itemRand.nextInt(3) - 1; 160 161 if (par3World.getBlockId(var13, var14 - 1, var15) != Block.grass.blockID || par3World.isBlockNormalCube(var13, var14, var15)) 162 { 163 continue label133; 164 } 165 } 166 167 if (par3World.getBlockId(var13, var14, var15) == 0) 168 { 169 if (itemRand.nextInt(10) != 0) 170 { 171 if (Block.tallGrass.canBlockStay(par3World, var13, var14, var15)) 172 { 173 par3World.setBlockAndMetadataWithNotify(var13, var14, var15, Block.tallGrass.blockID, 1); 174 } 175 } 176 else 177 { 178 ForgeHooks.plantGrass(par3World, var13, var14, var15); 179 } 180 } 181 } 182 } 183 184 return true; 185 } 186 } 187 else if (par1ItemStack.getItemDamage() == 3) 188 { 189 var11 = par3World.getBlockId(par4, par5, par6); 190 var12 = par3World.getBlockMetadata(par4, par5, par6); 191 192 if (var11 == Block.wood.blockID && BlockLog.limitToValidMetadata(var12) == 3) 193 { 194 if (par7 == 0) 195 { 196 return false; 197 } 198 199 if (par7 == 1) 200 { 201 return false; 202 } 203 204 if (par7 == 2) 205 { 206 --par6; 207 } 208 209 if (par7 == 3) 210 { 211 ++par6; 212 } 213 214 if (par7 == 4) 215 { 216 --par4; 217 } 218 219 if (par7 == 5) 220 { 221 ++par4; 222 } 223 224 if (par3World.isAirBlock(par4, par5, par6)) 225 { 226 var13 = Block.blocksList[Block.cocoaPlant.blockID].func_85104_a(par3World, par4, par5, par6, par7, par8, par9, par10, 0); 227 par3World.setBlockAndMetadataWithNotify(par4, par5, par6, Block.cocoaPlant.blockID, var13); 228 229 if (!par2EntityPlayer.capabilities.isCreativeMode) 230 { 231 --par1ItemStack.stackSize; 232 } 233 } 234 235 return true; 236 } 237 } 238 239 return false; 240 } 241 } 242 243 /** 244 * dye sheep, place saddles, etc ... 245 */ 246 public boolean itemInteractionForEntity(ItemStack par1ItemStack, EntityLiving par2EntityLiving) 247 { 248 if (par2EntityLiving instanceof EntitySheep) 249 { 250 EntitySheep var3 = (EntitySheep)par2EntityLiving; 251 int var4 = BlockCloth.getBlockFromDye(par1ItemStack.getItemDamage()); 252 253 if (!var3.getSheared() && var3.getFleeceColor() != var4) 254 { 255 var3.setFleeceColor(var4); 256 --par1ItemStack.stackSize; 257 } 258 259 return true; 260 } 261 else 262 { 263 return false; 264 } 265 } 266 267 @SideOnly(Side.CLIENT) 268 269 /** 270 * returns a list of items with the same ID, but different meta (eg: dye returns 16 items) 271 */ 272 public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) 273 { 274 for (int var4 = 0; var4 < 16; ++var4) 275 { 276 par3List.add(new ItemStack(par1, 1, var4)); 277 } 278 } 279 }