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 }