diff --git a/java/squeek/appleskin/api/event/FoodCheckEvent.java b/java/squeek/appleskin/api/event/FoodCheckEvent.java new file mode 100644 index 0000000..8868ba9 --- /dev/null +++ b/java/squeek/appleskin/api/event/FoodCheckEvent.java @@ -0,0 +1,27 @@ +package squeek.appleskin.api.event; + +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.neoforged.bus.api.Event; + +/** + * Can be used to treat non-standard items as food for display purposes + * or if you have a food component specific to your mod. + * Called whenever an item is checked if it should show food tooltips. + *

+ * Note: if the item lacks default food components, make sure to also + * listen to {@link FoodValuesEvent}, otherwise the tooltip will be empty. + */ +public class FoodCheckEvent extends Event +{ + public FoodCheckEvent(Player player, ItemStack itemStack, boolean isFood) + { + this.isFood = isFood; + this.player = player; + this.itemStack = itemStack; + } + + public boolean isFood; + public final ItemStack itemStack; + public final Player player; +} diff --git a/java/squeek/appleskin/helpers/FoodHelper.java b/java/squeek/appleskin/helpers/FoodHelper.java index 5ca595b..acef822 100644 --- a/java/squeek/appleskin/helpers/FoodHelper.java +++ b/java/squeek/appleskin/helpers/FoodHelper.java @@ -12,6 +12,7 @@ import net.minecraft.world.item.consume_effects.ApplyStatusEffectsConsumeEffect; import net.neoforged.neoforge.common.NeoForge; import org.jetbrains.annotations.Nullable; +import squeek.appleskin.api.event.FoodCheckEvent; import squeek.appleskin.api.event.FoodValuesEvent; import squeek.appleskin.network.MessageNaturalRegenerationSync; @@ -19,7 +20,12 @@ public class FoodHelper { public static boolean isFood(ItemStack itemStack, Player player) { - return itemStack.get(DataComponents.FOOD) != null && itemStack.get(DataComponents.CONSUMABLE) != null; + boolean result = itemStack.get(DataComponents.FOOD) != null && itemStack.get(DataComponents.CONSUMABLE) != null; + + FoodCheckEvent event = new FoodCheckEvent(player, itemStack, result); + NeoForge.EVENT_BUS.post(event); + + return event.isFood; } public static boolean canConsume(Player player, FoodProperties foodProperties)