package squeek.applecore.api.food;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import squeek.applecore.api.AppleCoreAPI;
import squeek.applecore.api.IAppleCoreAccessor;
/**
* FoodValues is a utility class used to retrieve and hold food values.
*
* To get food values for any given food, use any of the static {@link #get} methods.
*
* <pre>
* {@code
* FoodValues appleFoodValues = FoodValues.get(new ItemStack(Items.apple));
* }
* </pre>
*/
public class FoodValues
{
public final int hunger;
public final float saturationModifier;
public FoodValues(int hunger, float saturationModifier)
{
this.hunger = hunger;
this.saturationModifier = saturationModifier;
}
public FoodValues(FoodValues other)
{
this(other.hunger, other.saturationModifier);
}
/**
* @return The amount of saturation that the food values would provide.
*/
public float getSaturationIncrement()
{
return Math.min(20, hunger * saturationModifier * 2f);
}
/**
* See {@link IAppleCoreAccessor#getUnmodifiedFoodValues}
*/
public static FoodValues getUnmodified(ItemStack itemStack)
{
return AppleCoreAPI.accessor.getUnmodifiedFoodValues(itemStack);
}
/**
* See {@link IAppleCoreAccessor#getFoodValues}
*/
public static FoodValues get(ItemStack itemStack)
{
return AppleCoreAPI.accessor.getFoodValues(itemStack);
}
/**
* See {@link IAppleCoreAccessor#getFoodValuesForPlayer}
*/
public static FoodValues get(ItemStack itemStack, EntityPlayer player)
{
return AppleCoreAPI.accessor.getFoodValuesForPlayer(itemStack, player);
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + hunger;
result = prime * result + Float.floatToIntBits(saturationModifier);
return result;
}
@Override
public boolean equals(Object obj)
{
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
FoodValues other = (FoodValues) obj;
if (hunger != other.hunger)
return false;
if (Float.floatToIntBits(saturationModifier) != Float.floatToIntBits(other.saturationModifier))
return false;
return true;
}
}