--- a/net/minecraft/world/level/block/entity/TileEntityCampfire.java
+++ b/net/minecraft/world/level/block/entity/TileEntityCampfire.java
@@ -21,6 +21,12 @@
 import net.minecraft.world.level.block.BlockCampfire;
 import net.minecraft.world.level.block.state.IBlockData;
 
+// CraftBukkit start
+import org.bukkit.craftbukkit.block.CraftBlock;
+import org.bukkit.craftbukkit.inventory.CraftItemStack;
+import org.bukkit.event.block.BlockCookEvent;
+// CraftBukkit end
+
 public class TileEntityCampfire extends TileEntity implements Clearable {
 
     private static final int BURN_COOL_SPEED = 2;
@@ -52,6 +58,20 @@
                         return recipecampfire.a(inventorysubcontainer);
                     }).orElse(itemstack);
 
+                    // CraftBukkit start - fire BlockCookEvent
+                    CraftItemStack source = CraftItemStack.asCraftMirror(itemstack);
+                    org.bukkit.inventory.ItemStack result = CraftItemStack.asBukkitCopy(itemstack1);
+
+                    BlockCookEvent blockCookEvent = new BlockCookEvent(CraftBlock.at(world, blockposition), source, result);
+                    world.getCraftServer().getPluginManager().callEvent(blockCookEvent);
+
+                    if (blockCookEvent.isCancelled()) {
+                        return;
+                    }
+
+                    result = blockCookEvent.getResult();
+                    itemstack1 = CraftItemStack.asNMSCopy(result);
+                    // CraftBukkit end
                     InventoryUtils.dropItem(world, (double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ(), itemstack1);
                     tileentitycampfire.items.set(i, ItemStack.EMPTY);
                     world.notify(blockposition, iblockdata, iblockdata, 3);
