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