    001package net.minecraft.item;
    002
    003import net.minecraft.creativetab.CreativeTabs;
    004import net.minecraft.entity.player.EntityPlayer;
    005import net.minecraft.potion.PotionEffect;
    006import net.minecraft.world.World;
    007
    008public 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}