From 2f615809f2913f08641edcb13aa4133064011535 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E9=9B=A8=E8=90=BD?= Date: Wed, 18 Sep 2024 10:49:30 +0800 Subject: [PATCH] Fix food eating. (Closes #1469) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 秋雨落 --- .../common/mixin/core/world/food/FoodDataMixin.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/food/FoodDataMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/food/FoodDataMixin.java index b262bede..c1d35b3d 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/food/FoodDataMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/food/FoodDataMixin.java @@ -10,6 +10,7 @@ import io.izzel.arclight.mixin.DecorationOps; import net.minecraft.network.protocol.game.ClientboundSetHealthPacket; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Player; import net.minecraft.world.food.FoodData; import net.minecraft.world.food.FoodProperties; @@ -61,16 +62,17 @@ public abstract class FoodDataMixin implements FoodStatsBridge { private void arclight$foodLevelChange(FoodData foodStats, int foodLevelIn, float foodSaturationModifier, FoodProperties food) throws Throwable { var stack = this.arclight$eatStack; this.arclight$eatStack = null; + int deltaFoodLevel = foodLevelIn; if (this.entityhuman != null && stack != null) { - int oldFoodLevel = this.foodLevel; - FoodLevelChangeEvent event = CraftEventFactory.callFoodLevelChangeEvent(this.entityhuman, foodLevel, stack); + int newFoodLevel = Mth.clamp(this.foodLevel + foodLevelIn, 0, 20); + FoodLevelChangeEvent event = CraftEventFactory.callFoodLevelChangeEvent(this.entityhuman, newFoodLevel, stack); if (event.isCancelled()) { return; } - foodLevelIn = event.getFoodLevel() - oldFoodLevel; + deltaFoodLevel = event.getFoodLevel() - this.foodLevel; ((ServerPlayerEntityBridge) this.entityhuman).bridge$getBukkitEntity().sendHealthUpdate(); } - DecorationOps.callsite().invoke(foodStats, foodLevelIn, foodSaturationModifier); + DecorationOps.callsite().invoke(foodStats, deltaFoodLevel, foodSaturationModifier); } @Inject(method = "tick", at = @At(value = "INVOKE_ASSIGN", remap = false, target = "Ljava/lang/Math;max(II)I"))