-
Notifications
You must be signed in to change notification settings - Fork 24
Integrating food items with AppleCore
squeek502 edited this page Sep 20, 2014
·
17 revisions
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 calls the ItemStack-aware version ofFoodStats.addStats
(FoodStats.func_151686_a
).
That's it. Your food will integrate properly with AppleCore if you've adhered to 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
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.