package net.minecraft.item;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.block.BlockCloth;
import net.minecraft.block.BlockCrops;
import net.minecraft.block.BlockDirectional;
import net.minecraft.block.BlockLog;
import net.minecraft.block.BlockMushroom;
import net.minecraft.block.BlockSapling;
import net.minecraft.block.BlockStem;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.passive.EntitySheep;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.Event.Result;
import net.minecraftforge.event.entity.player.BonemealEvent;
public class ItemDye extends Item
{
/** List of dye color names */
public static final String[] dyeColorNames = new String[] {"black", "red", "green", "brown", "blue", "purple", "cyan", "silver", "gray", "pink", "lime", "yellow", "lightBlue", "magenta", "orange", "white"};
public static final int[] dyeColors = new int[] {1973019, 11743532, 3887386, 5320730, 2437522, 8073150, 2651799, 11250603, 4408131, 14188952, 4312372, 14602026, 6719955, 12801229, 15435844, 15790320};
public ItemDye(int par1)
{
super(par1);
this.setHasSubtypes(true);
this.setMaxDamage(0);
this.setCreativeTab(CreativeTabs.tabMaterials);
}
@SideOnly(Side.CLIENT)
/**
* Gets an icon index based on an item's damage value
*/
public int getIconFromDamage(int par1)
{
int var2 = MathHelper.clamp_int(par1, 0, 15);
return this.iconIndex + var2 % 8 * 16 + var2 / 8;
}
public String getItemNameIS(ItemStack par1ItemStack)
{
int var2 = MathHelper.clamp_int(par1ItemStack.getItemDamage(), 0, 15);
return super.getItemName() + "." + dyeColorNames[var2];
}
/**
* Callback for item usage. If the item does something special on right clicking, he will have one of those. Return
* True if something happen and false if it don't. This is for ITEMS, not BLOCKS
*/
public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
{
if (!par2EntityPlayer.canPlayerEdit(par4, par5, par6, par7, par1ItemStack))
{
return false;
}
else
{
int var11;
int var12;
int var13;
if (par1ItemStack.getItemDamage() == 15)
{
var11 = par3World.getBlockId(par4, par5, par6);
BonemealEvent event = new BonemealEvent(par2EntityPlayer, par3World, var11, par4, par5, par6);
if (MinecraftForge.EVENT_BUS.post(event))
{
return false;
}
if (event.getResult() == Result.ALLOW)
{
if (!par3World.isRemote)
{
par1ItemStack.stackSize--;
}
return true;
}
if (var11 == Block.sapling.blockID)
{
if (!par3World.isRemote)
{
((BlockSapling)Block.sapling).growTree(par3World, par4, par5, par6, par3World.rand);
--par1ItemStack.stackSize;
}
return true;
}
if (var11 == Block.mushroomBrown.blockID || var11 == Block.mushroomRed.blockID)
{
if (!par3World.isRemote && ((BlockMushroom)Block.blocksList[var11]).fertilizeMushroom(par3World, par4, par5, par6, par3World.rand))
{
--par1ItemStack.stackSize;
}
return true;
}
if (var11 == Block.melonStem.blockID || var11 == Block.pumpkinStem.blockID)
{
if (par3World.getBlockMetadata(par4, par5, par6) == 7)
{
return false;
}
if (!par3World.isRemote)
{
((BlockStem)Block.blocksList[var11]).fertilizeStem(par3World, par4, par5, par6);
--par1ItemStack.stackSize;
}
return true;
}
if (var11 > 0 && Block.blocksList[var11] instanceof BlockCrops)
{
if (par3World.getBlockMetadata(par4, par5, par6) == 7)
{
return false;
}
if (!par3World.isRemote)
{
((BlockCrops)Block.blocksList[var11]).fertilize(par3World, par4, par5, par6);
--par1ItemStack.stackSize;
}
return true;
}
if (var11 == Block.cocoaPlant.blockID)
{
if (!par3World.isRemote)
{
par3World.setBlockMetadataWithNotify(par4, par5, par6, 8 | BlockDirectional.getDirection(par3World.getBlockMetadata(par4, par5, par6)));
--par1ItemStack.stackSize;
}
return true;
}
if (var11 == Block.grass.blockID)
{
if (!par3World.isRemote)
{
--par1ItemStack.stackSize;
label133:
for (var12 = 0; var12 < 128; ++var12)
{
var13 = par4;
int var14 = par5 + 1;
int var15 = par6;
for (int var16 = 0; var16 < var12 / 16; ++var16)
{
var13 += itemRand.nextInt(3) - 1;
var14 += (itemRand.nextInt(3) - 1) * itemRand.nextInt(3) / 2;
var15 += itemRand.nextInt(3) - 1;
if (par3World.getBlockId(var13, var14 - 1, var15) != Block.grass.blockID || par3World.isBlockNormalCube(var13, var14, var15))
{
continue label133;
}
}
if (par3World.getBlockId(var13, var14, var15) == 0)
{
if (itemRand.nextInt(10) != 0)
{
if (Block.tallGrass.canBlockStay(par3World, var13, var14, var15))
{
par3World.setBlockAndMetadataWithNotify(var13, var14, var15, Block.tallGrass.blockID, 1);
}
}
else
{
ForgeHooks.plantGrass(par3World, var13, var14, var15);
}
}
}
}
return true;
}
}
else if (par1ItemStack.getItemDamage() == 3)
{
var11 = par3World.getBlockId(par4, par5, par6);
var12 = par3World.getBlockMetadata(par4, par5, par6);
if (var11 == Block.wood.blockID && BlockLog.limitToValidMetadata(var12) == 3)
{
if (par7 == 0)
{
return false;
}
if (par7 == 1)
{
return false;
}
if (par7 == 2)
{
--par6;
}
if (par7 == 3)
{
++par6;
}
if (par7 == 4)
{
--par4;
}
if (par7 == 5)
{
++par4;
}
if (par3World.isAirBlock(par4, par5, par6))
{
var13 = Block.blocksList[Block.cocoaPlant.blockID].onBlockPlaced(par3World, par4, par5, par6, par7, par8, par9, par10, 0);
par3World.setBlockAndMetadataWithNotify(par4, par5, par6, Block.cocoaPlant.blockID, var13);
if (!par2EntityPlayer.capabilities.isCreativeMode)
{
--par1ItemStack.stackSize;
}
}
return true;
}
}
return false;
}
}
/**
* dye sheep, place saddles, etc ...
*/
public boolean itemInteractionForEntity(ItemStack par1ItemStack, EntityLiving par2EntityLiving)
{
if (par2EntityLiving instanceof EntitySheep)
{
EntitySheep var3 = (EntitySheep)par2EntityLiving;
int var4 = BlockCloth.getBlockFromDye(par1ItemStack.getItemDamage());
if (!var3.getSheared() && var3.getFleeceColor() != var4)
{
var3.setFleeceColor(var4);
--par1ItemStack.stackSize;
}
return true;
}
else
{
return false;
}
}
@SideOnly(Side.CLIENT)
/**
* returns a list of items with the same ID, but different meta (eg: dye returns 16 items)
*/
public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List)
{
for (int var4 = 0; var4 < 16; ++var4)
{
par3List.add(new ItemStack(par1, 1, var4));
}
}
}