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    }