-
Notifications
You must be signed in to change notification settings - Fork 24
Integrating food items with AppleCore
If you want your food to integrate with AppleCore, do not call FoodStats.addStats(int, float)
directly when it is eaten. Use the ItemStack-aware FoodStats.func_151686_a(ItemFood, ItemStack)
method instead.
If your food extends ItemFood and uses the standard Minecraft ItemFood methods, your food will integrate with AppleCore without issue.
- Have your item extend
ItemFood
. - Implement the 1.7 ItemStack-aware hunger and saturation getters (
func_150905_g
for hunger value andfunc_150906_h
for the saturation modifier). - Use the default
ItemFood.onEaten
implementation or make sure that your overridden version still callsFoodStats.func_151686_a(ItemFood, ItemStack)
(the ItemStack-aware version ofFoodStats.addStats
).
That's it. Your food will integrate properly with AppleCore if you're able to check off all of the above.
If your food does not extend ItemFood
, then you can implement AppleCore's IEdible
interface and use ItemFoodProxy
to call FoodStats.func_151686_a(ItemFood, ItemStack)
when the food is eaten.
Here is a partial example implementation (see applecore.example.ItemNonStandardFood for the full implementation):
@Optional.Interface(iface = "squeek.applecore.api.food.IEdible", modid = "AppleCore")
public class ItemNonStandardFood extends Item implements IEdible
{
@Optional.Method(modid = "AppleCore")
@Override
public FoodValues getFoodValues(ItemStack itemStack)
{
return new FoodValues(1, 1f);
}
@Override
public ItemStack onEaten(ItemStack itemStack, World world, EntityPlayer player)
{
--itemStack.stackSize;
if (Loader.isModLoaded("AppleCore"))
{
// one possible compatible method
player.getFoodStats().func_151686_a(new ItemFoodProxy(this), itemStack);
// another possible compatible method:
// new ItemFoodProxy(this).onEaten(itemStack, player);
}
else
{
// this method is not compatible with AppleCore
player.getFoodStats().addStats(1, 1f);
}
return itemStack;
}
}
Note that the above example degrades nicely: if AppleCore is not loaded, it will still function as expected.