You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
271 lines
9.5 KiB
Java
271 lines
9.5 KiB
Java
package net.minecraft.item;
|
|
|
|
import cpw.mods.fml.common.eventhandler.Event.Result;
|
|
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.BlockColored;
|
|
import net.minecraft.block.BlockLog;
|
|
import net.minecraft.block.IGrowable;
|
|
import net.minecraft.block.material.Material;
|
|
import net.minecraft.client.renderer.texture.IIconRegister;
|
|
import net.minecraft.creativetab.CreativeTabs;
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
import net.minecraft.entity.passive.EntitySheep;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.init.Blocks;
|
|
import net.minecraft.util.IIcon;
|
|
import net.minecraft.util.MathHelper;
|
|
import net.minecraft.world.World;
|
|
import net.minecraft.world.WorldServer;
|
|
import net.minecraftforge.common.MinecraftForge;
|
|
import net.minecraftforge.common.util.FakePlayerFactory;
|
|
import net.minecraftforge.event.entity.player.BonemealEvent;
|
|
|
|
public class ItemDye extends Item
|
|
{
|
|
public static final String[] field_150923_a = new String[] {"black", "red", "green", "brown", "blue", "purple", "cyan", "silver", "gray", "pink", "lime", "yellow", "lightBlue", "magenta", "orange", "white"};
|
|
public static final String[] field_150921_b = new String[] {"black", "red", "green", "brown", "blue", "purple", "cyan", "silver", "gray", "pink", "lime", "yellow", "light_blue", "magenta", "orange", "white"};
|
|
public static final int[] field_150922_c = new int[] {1973019, 11743532, 3887386, 5320730, 2437522, 8073150, 2651799, 11250603, 4408131, 14188952, 4312372, 14602026, 6719955, 12801229, 15435844, 15790320};
|
|
@SideOnly(Side.CLIENT)
|
|
private IIcon[] field_150920_d;
|
|
private static final String __OBFID = "CL_00000022";
|
|
|
|
public ItemDye()
|
|
{
|
|
this.setHasSubtypes(true);
|
|
this.setMaxDamage(0);
|
|
this.setCreativeTab(CreativeTabs.tabMaterials);
|
|
}
|
|
|
|
/**
|
|
* Gets an icon index based on an item's damage value
|
|
*/
|
|
@SideOnly(Side.CLIENT)
|
|
public IIcon getIconFromDamage(int p_77617_1_)
|
|
{
|
|
int j = MathHelper.clamp_int(p_77617_1_, 0, 15);
|
|
return this.field_150920_d[j];
|
|
}
|
|
|
|
/**
|
|
* Returns the unlocalized name of this item. This version accepts an ItemStack so different stacks can have
|
|
* different names based on their damage or NBT.
|
|
*/
|
|
public String getUnlocalizedName(ItemStack stack)
|
|
{
|
|
int i = MathHelper.clamp_int(stack.getItemDamage(), 0, 15);
|
|
return super.getUnlocalizedName() + "." + field_150923_a[i];
|
|
}
|
|
|
|
/**
|
|
* 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 p_77648_1_, EntityPlayer p_77648_2_, World p_77648_3_, int p_77648_4_, int p_77648_5_, int p_77648_6_, int p_77648_7_, float p_77648_8_, float p_77648_9_, float p_77648_10_)
|
|
{
|
|
if (!p_77648_2_.canPlayerEdit(p_77648_4_, p_77648_5_, p_77648_6_, p_77648_7_, p_77648_1_))
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
if (p_77648_1_.getItemDamage() == 15)
|
|
{
|
|
if (applyBonemeal(p_77648_1_, p_77648_3_, p_77648_4_, p_77648_5_, p_77648_6_, p_77648_2_))
|
|
{
|
|
if (!p_77648_3_.isRemote)
|
|
{
|
|
p_77648_3_.playAuxSFX(2005, p_77648_4_, p_77648_5_, p_77648_6_, 0);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
else if (p_77648_1_.getItemDamage() == 3)
|
|
{
|
|
Block block = p_77648_3_.getBlock(p_77648_4_, p_77648_5_, p_77648_6_);
|
|
int i1 = p_77648_3_.getBlockMetadata(p_77648_4_, p_77648_5_, p_77648_6_);
|
|
|
|
if (block == Blocks.log && BlockLog.func_150165_c(i1) == 3)
|
|
{
|
|
if (p_77648_7_ == 0)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (p_77648_7_ == 1)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (p_77648_7_ == 2)
|
|
{
|
|
--p_77648_6_;
|
|
}
|
|
|
|
if (p_77648_7_ == 3)
|
|
{
|
|
++p_77648_6_;
|
|
}
|
|
|
|
if (p_77648_7_ == 4)
|
|
{
|
|
--p_77648_4_;
|
|
}
|
|
|
|
if (p_77648_7_ == 5)
|
|
{
|
|
++p_77648_4_;
|
|
}
|
|
|
|
if (p_77648_3_.isAirBlock(p_77648_4_, p_77648_5_, p_77648_6_))
|
|
{
|
|
int j1 = Blocks.cocoa.onBlockPlaced(p_77648_3_, p_77648_4_, p_77648_5_, p_77648_6_, p_77648_7_, p_77648_8_, p_77648_9_, p_77648_10_, 0);
|
|
p_77648_3_.setBlock(p_77648_4_, p_77648_5_, p_77648_6_, Blocks.cocoa, j1, 2);
|
|
|
|
if (!p_77648_2_.capabilities.isCreativeMode)
|
|
{
|
|
--p_77648_1_.stackSize;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static boolean func_150919_a(ItemStack stack, World worldIn, int x, int y, int z)
|
|
{
|
|
if (worldIn instanceof WorldServer)
|
|
return applyBonemeal(stack, worldIn, x, y, z, FakePlayerFactory.getMinecraft((WorldServer)worldIn));
|
|
return false;
|
|
}
|
|
|
|
public static boolean applyBonemeal(ItemStack stack, World worldIn, int x, int y, int z, EntityPlayer player)
|
|
{
|
|
Block block = worldIn.getBlock(x, y, z);
|
|
|
|
BonemealEvent event = new BonemealEvent(player, worldIn, block, x, y, z);
|
|
if (MinecraftForge.EVENT_BUS.post(event))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (event.getResult() == Result.ALLOW)
|
|
{
|
|
if (!worldIn.isRemote)
|
|
{
|
|
stack.stackSize--;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
if (block instanceof IGrowable)
|
|
{
|
|
IGrowable igrowable = (IGrowable)block;
|
|
|
|
if (igrowable.func_149851_a(worldIn, x, y, z, worldIn.isRemote))
|
|
{
|
|
if (!worldIn.isRemote)
|
|
{
|
|
if (igrowable.func_149852_a(worldIn, worldIn.rand, x, y, z))
|
|
{
|
|
igrowable.func_149853_b(worldIn, worldIn.rand, x, y, z);
|
|
}
|
|
|
|
--stack.stackSize;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public static void func_150918_a(World p_150918_0_, int p_150918_1_, int p_150918_2_, int p_150918_3_, int p_150918_4_)
|
|
{
|
|
if (p_150918_4_ == 0)
|
|
{
|
|
p_150918_4_ = 15;
|
|
}
|
|
|
|
Block block = p_150918_0_.getBlock(p_150918_1_, p_150918_2_, p_150918_3_);
|
|
|
|
if (block.getMaterial() != Material.air)
|
|
{
|
|
block.setBlockBoundsBasedOnState(p_150918_0_, p_150918_1_, p_150918_2_, p_150918_3_);
|
|
|
|
for (int i1 = 0; i1 < p_150918_4_; ++i1)
|
|
{
|
|
double d0 = itemRand.nextGaussian() * 0.02D;
|
|
double d1 = itemRand.nextGaussian() * 0.02D;
|
|
double d2 = itemRand.nextGaussian() * 0.02D;
|
|
p_150918_0_.spawnParticle("happyVillager", (double)((float)p_150918_1_ + itemRand.nextFloat()), (double)p_150918_2_ + (double)itemRand.nextFloat() * block.getBlockBoundsMaxY(), (double)((float)p_150918_3_ + itemRand.nextFloat()), d0, d1, d2);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (int i1 = 0; i1 < p_150918_4_; ++i1)
|
|
{
|
|
double d0 = itemRand.nextGaussian() * 0.02D;
|
|
double d1 = itemRand.nextGaussian() * 0.02D;
|
|
double d2 = itemRand.nextGaussian() * 0.02D;
|
|
p_150918_0_.spawnParticle("happyVillager", (double)((float)p_150918_1_ + itemRand.nextFloat()), (double)p_150918_2_ + (double)itemRand.nextFloat() * 1.0f, (double)((float)p_150918_3_ + itemRand.nextFloat()), d0, d1, d2);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns true if the item can be used on the given entity, e.g. shears on sheep.
|
|
*/
|
|
public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer player, EntityLivingBase target)
|
|
{
|
|
if (target instanceof EntitySheep)
|
|
{
|
|
EntitySheep entitysheep = (EntitySheep)target;
|
|
int i = BlockColored.func_150032_b(stack.getItemDamage());
|
|
|
|
if (!entitysheep.getSheared() && entitysheep.getFleeceColor() != i)
|
|
{
|
|
entitysheep.setFleeceColor(i);
|
|
--stack.stackSize;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* returns a list of items with the same ID, but different meta (eg: dye returns 16 items)
|
|
*/
|
|
@SideOnly(Side.CLIENT)
|
|
public void getSubItems(Item p_150895_1_, CreativeTabs p_150895_2_, List p_150895_3_)
|
|
{
|
|
for (int i = 0; i < 16; ++i)
|
|
{
|
|
p_150895_3_.add(new ItemStack(p_150895_1_, 1, i));
|
|
}
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public void registerIcons(IIconRegister register)
|
|
{
|
|
this.field_150920_d = new IIcon[field_150921_b.length];
|
|
|
|
for (int i = 0; i < field_150921_b.length; ++i)
|
|
{
|
|
this.field_150920_d[i] = register.registerIcon(this.getIconString() + "_" + field_150921_b[i]);
|
|
}
|
|
}
|
|
} |