001 package net.minecraft.src;
002
003 public class ItemFood extends Item
004 {
005 /** Number of ticks to run while 'EnumAction'ing until result. */
006 public final int itemUseDuration;
007
008 /** The amount this food item heals the player. */
009 private final int healAmount;
010 private final float saturationModifier;
011
012 /** Whether wolves like this food (true for raw and cooked porkchop). */
013 private final boolean isWolfsFavoriteMeat;
014
015 /**
016 * If this field is true, the food can be consumed even if the player don't need to eat.
017 */
018 private boolean alwaysEdible;
019
020 /**
021 * represents the potion effect that will occurr upon eating this food. Set by setPotionEffect
022 */
023 private int potionId;
024
025 /** set by setPotionEffect */
026 private int potionDuration;
027
028 /** set by setPotionEffect */
029 private int potionAmplifier;
030
031 /** probably of the set potion effect occurring */
032 private float potionEffectProbability;
033
034 public ItemFood(int par1, int par2, float par3, boolean par4)
035 {
036 super(par1);
037 this.itemUseDuration = 32;
038 this.healAmount = par2;
039 this.isWolfsFavoriteMeat = par4;
040 this.saturationModifier = par3;
041 this.setCreativeTab(CreativeTabs.tabFood);
042 }
043
044 public ItemFood(int par1, int par2, boolean par3)
045 {
046 this(par1, par2, 0.6F, par3);
047 }
048
049 public ItemStack onFoodEaten(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
050 {
051 --par1ItemStack.stackSize;
052 par3EntityPlayer.getFoodStats().addStats(this);
053 par2World.playSoundAtEntity(par3EntityPlayer, "random.burp", 0.5F, par2World.rand.nextFloat() * 0.1F + 0.9F);
054 this.func_77849_c(par1ItemStack, par2World, par3EntityPlayer);
055 return par1ItemStack;
056 }
057
058 protected void func_77849_c(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
059 {
060 if (!par2World.isRemote && this.potionId > 0 && par2World.rand.nextFloat() < this.potionEffectProbability)
061 {
062 par3EntityPlayer.addPotionEffect(new PotionEffect(this.potionId, this.potionDuration * 20, this.potionAmplifier));
063 }
064 }
065
066 /**
067 * How long it takes to use or consume an item
068 */
069 public int getMaxItemUseDuration(ItemStack par1ItemStack)
070 {
071 return 32;
072 }
073
074 /**
075 * returns the action that specifies what animation to play when the items is being used
076 */
077 public EnumAction getItemUseAction(ItemStack par1ItemStack)
078 {
079 return EnumAction.eat;
080 }
081
082 /**
083 * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer
084 */
085 public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
086 {
087 if (par3EntityPlayer.canEat(this.alwaysEdible))
088 {
089 par3EntityPlayer.setItemInUse(par1ItemStack, this.getMaxItemUseDuration(par1ItemStack));
090 }
091
092 return par1ItemStack;
093 }
094
095 public int getHealAmount()
096 {
097 return this.healAmount;
098 }
099
100 /**
101 * gets the saturationModifier of the ItemFood
102 */
103 public float getSaturationModifier()
104 {
105 return this.saturationModifier;
106 }
107
108 /**
109 * Whether wolves like this food (true for raw and cooked porkchop).
110 */
111 public boolean isWolfsFavoriteMeat()
112 {
113 return this.isWolfsFavoriteMeat;
114 }
115
116 /**
117 * sets a potion effect on the item. Args: int potionId, int duration (will be multiplied by 20), int amplifier,
118 * float probability of effect happening
119 */
120 public ItemFood setPotionEffect(int par1, int par2, int par3, float par4)
121 {
122 this.potionId = par1;
123 this.potionDuration = par2;
124 this.potionAmplifier = par3;
125 this.potionEffectProbability = par4;
126 return this;
127 }
128
129 /**
130 * Set the field 'alwaysEdible' to true, and make the food edible even if the player don't need to eat.
131 */
132 public ItemFood setAlwaysEdible()
133 {
134 this.alwaysEdible = true;
135 return this;
136 }
137 }