From 34d46feb053a1c3ae36f5f9cec22c68226428b82 Mon Sep 17 00:00:00 2001 From: WakelessSloth56 Date: Sat, 17 Sep 2022 22:21:54 +0800 Subject: [PATCH] feat(event): LivingEatEvent --- .../common/event/CommonEventFactory.java | 17 +++++-- .../common/event/impl/LivingEatEvent.java | 46 +++++++++++++++++++ 2 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 src/main/java/org/auioc/mcmod/arnicalib/common/event/impl/LivingEatEvent.java diff --git a/src/main/java/org/auioc/mcmod/arnicalib/common/event/CommonEventFactory.java b/src/main/java/org/auioc/mcmod/arnicalib/common/event/CommonEventFactory.java index 7896a6da..c386ca09 100644 --- a/src/main/java/org/auioc/mcmod/arnicalib/common/event/CommonEventFactory.java +++ b/src/main/java/org/auioc/mcmod/arnicalib/common/event/CommonEventFactory.java @@ -1,10 +1,13 @@ package org.auioc.mcmod.arnicalib.common.event; import org.auioc.mcmod.arnicalib.common.event.impl.ItemInventoryTickEvent; +import org.auioc.mcmod.arnicalib.common.event.impl.LivingEatEvent; import org.auioc.mcmod.arnicalib.common.event.impl.PistonCheckPushableEvent; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.food.FoodData; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; @@ -13,19 +16,25 @@ public final class CommonEventFactory { - private static final IEventBus forgeEventBus = MinecraftForge.EVENT_BUS; + private static final IEventBus BUS = MinecraftForge.EVENT_BUS; @Deprecated(since = "3.1.1") public static boolean postPistonAddBlockLineEvent(BlockState blockState, Level level, BlockPos blockPos, Direction direction) { - return forgeEventBus.post(new org.auioc.mcmod.arnicalib.common.event.impl.PistonAddBlockLineEvent(blockState, level, blockPos, direction)); + return BUS.post(new org.auioc.mcmod.arnicalib.common.event.impl.PistonAddBlockLineEvent(blockState, level, blockPos, direction)); } public static boolean firePistonCheckPushableEvent(BlockState blockState, Level level, BlockPos blockPos, Direction pushDirection, boolean p_60209_, Direction p_60210_) { - return forgeEventBus.post(new PistonCheckPushableEvent(blockState, level, blockPos, pushDirection, p_60209_, p_60210_)); + return BUS.post(new PistonCheckPushableEvent(blockState, level, blockPos, pushDirection, p_60209_, p_60210_)); } public static boolean onSelectedItemItemInventoryTick(Player player, Level level, ItemStack itemStack, int index) { - return forgeEventBus.post(new ItemInventoryTickEvent.Selected(player, level, itemStack, index)); + return BUS.post(new ItemInventoryTickEvent.Selected(player, level, itemStack, index)); + } + + public static LivingEatEvent onLivingEat(LivingEntity living, FoodData foodData, ItemStack foodItemStack) { + var event = new LivingEatEvent(living, foodData, foodItemStack); + BUS.post(event); + return event; } } diff --git a/src/main/java/org/auioc/mcmod/arnicalib/common/event/impl/LivingEatEvent.java b/src/main/java/org/auioc/mcmod/arnicalib/common/event/impl/LivingEatEvent.java new file mode 100644 index 00000000..09e9786c --- /dev/null +++ b/src/main/java/org/auioc/mcmod/arnicalib/common/event/impl/LivingEatEvent.java @@ -0,0 +1,46 @@ +package org.auioc.mcmod.arnicalib.common.event.impl; + +import org.auioc.mcmod.arnicalib.api.game.event.FoodDataEvent; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.food.FoodData; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.eventbus.api.Cancelable; + +@Cancelable +public class LivingEatEvent extends FoodDataEvent { + + private final ItemStack foodItemStack; + private int nutrition = 0; + private float saturationModifier = 0.0F; + + public LivingEatEvent(LivingEntity living, FoodData foodData, ItemStack foodItemStack) { + super(living, foodData); + this.foodItemStack = foodItemStack; + if (foodItemStack.isEdible()) { + var foodProperties = foodItemStack.getFoodProperties(living); + this.nutrition = foodProperties.getNutrition(); + this.saturationModifier = foodProperties.getSaturationModifier(); + } + } + + public ItemStack getFoodItemStack() { + return this.foodItemStack; + } + + public int getNutrition() { + return this.nutrition; + } + + public float getSaturationModifier() { + return this.saturationModifier; + } + + public void setNutrition(int nutrition) { + this.nutrition = nutrition; + } + + public void setSaturationModifier(float saturationModifier) { + this.saturationModifier = saturationModifier; + } + +}