--- a/net/minecraft/world/effect/SaturationMobEffect.java
+++ b/net/minecraft/world/effect/SaturationMobEffect.java
@@ -2,16 +2,29 @@
 
 import net.minecraft.world.entity.LivingEntity;
 import net.minecraft.world.entity.player.Player;
+// CraftBukkit start
+import org.bukkit.craftbukkit.entity.CraftPlayer;
+import org.bukkit.craftbukkit.event.CraftEventFactory;
+// CraftBukkit end
 
 class SaturationMobEffect extends InstantenousMobEffect {
+
     protected SaturationMobEffect(MobEffectCategory category, int color) {
         super(category, color);
     }
 
     @Override
     public boolean applyEffectTick(LivingEntity entity, int amplifier) {
-        if (!entity.level().isClientSide && entity instanceof Player player) {
-            player.getFoodData().eat(amplifier + 1, 1.0F);
+        if (!entity.level().isClientSide && entity instanceof Player entityhuman) {
+            // CraftBukkit start
+            int oldFoodLevel = entityhuman.getFoodData().foodLevel;
+            org.bukkit.event.entity.FoodLevelChangeEvent event = CraftEventFactory.callFoodLevelChangeEvent(entityhuman, amplifier + 1 + oldFoodLevel);
+            if (!event.isCancelled()) {
+                entityhuman.getFoodData().eat(event.getFoodLevel() - oldFoodLevel, 1.0F);
+            }
+
+            ((CraftPlayer) entityhuman.getBukkitEntity()).sendHealthUpdate();
+            // CraftBukkit end
         }
 
         return true;
