--- a/net/minecraft/world/level/block/Block.java
+++ b/net/minecraft/world/level/block/Block.java
@@ -342,7 +342,13 @@
             EntityItem entityitem = (EntityItem) supplier.get();
 
             entityitem.setDefaultPickUpDelay();
-            world.addFreshEntity(entityitem);
+            // CraftBukkit start
+            if (world.captureDrops != null) {
+                world.captureDrops.add(entityitem);
+            } else {
+                world.addFreshEntity(entityitem);
+            }
+            // CraftBukkit end
         }
     }
 
@@ -368,7 +374,7 @@
 
     public void playerDestroy(World world, EntityHuman entityhuman, BlockPosition blockposition, IBlockData iblockdata, @Nullable TileEntity tileentity, ItemStack itemstack) {
         entityhuman.awardStat(StatisticList.BLOCK_MINED.get(this));
-        entityhuman.causeFoodExhaustion(0.005F);
+        entityhuman.causeFoodExhaustion(0.005F, org.bukkit.event.entity.EntityExhaustionEvent.ExhaustionReason.BLOCK_MINED); // CraftBukkit - EntityExhaustionEvent
         dropResources(iblockdata, world, blockposition, tileentity, entityhuman, itemstack);
     }
 
@@ -504,16 +510,24 @@
         return this.builtInRegistryHolder;
     }
 
-    protected void tryDropExperience(WorldServer worldserver, BlockPosition blockposition, ItemStack itemstack, IntProvider intprovider) {
+    // CraftBukkit start
+    protected int tryDropExperience(WorldServer worldserver, BlockPosition blockposition, ItemStack itemstack, IntProvider intprovider) {
         if (EnchantmentManager.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, itemstack) == 0) {
             int i = intprovider.sample(worldserver.random);
 
             if (i > 0) {
-                this.popExperience(worldserver, blockposition, i);
+                // this.popExperience(worldserver, blockposition, i);
+                return i;
             }
         }
 
+        return 0;
+    }
+
+    public int getExpDrop(IBlockData iblockdata, WorldServer worldserver, BlockPosition blockposition, ItemStack itemstack, boolean flag) {
+        return 0;
     }
+    // CraftBukkit end
 
     public static final class a {
 
