--- a/net/minecraft/world/level/block/DropExperienceBlock.java
+++ b/net/minecraft/world/level/block/DropExperienceBlock.java
@@ -10,15 +10,17 @@
 import net.minecraft.world.level.block.state.BlockState;
 
 public class DropExperienceBlock extends Block {
-    public static final MapCodec<DropExperienceBlock> CODEC = RecordCodecBuilder.mapCodec(
-        instance -> instance.group(IntProvider.codec(0, 10).fieldOf("experience").forGetter(block -> block.xpRange), propertiesCodec())
-                .apply(instance, DropExperienceBlock::new)
-    );
+
+    public static final MapCodec<DropExperienceBlock> CODEC = RecordCodecBuilder.mapCodec((instance) -> {
+        return instance.group(IntProvider.codec(0, 10).fieldOf("experience").forGetter((dropexperienceblock) -> {
+            return dropexperienceblock.xpRange;
+        }), propertiesCodec()).apply(instance, DropExperienceBlock::new);
+    });
     private final IntProvider xpRange;
 
     @Override
     public MapCodec<? extends DropExperienceBlock> codec() {
-        return CODEC;
+        return DropExperienceBlock.CODEC;
     }
 
     public DropExperienceBlock(IntProvider experienceDropped, BlockBehaviour.Properties settings) {
@@ -29,8 +31,16 @@
     @Override
     protected void spawnAfterBreak(BlockState state, ServerLevel world, BlockPos pos, ItemStack tool, boolean dropExperience) {
         super.spawnAfterBreak(state, world, pos, tool, dropExperience);
-        if (dropExperience) {
-            this.tryDropExperience(world, pos, tool, this.xpRange);
+        // CraftBukkit start - Delegate to getExpDrop
+    }
+
+    @Override
+    public int getExpDrop(BlockState iblockdata, ServerLevel worldserver, BlockPos blockposition, ItemStack itemstack, boolean flag) {
+        if (flag) {
+            return this.tryDropExperience(worldserver, blockposition, itemstack, this.xpRange);
         }
+
+        return 0;
+        // CraftBukkit end
     }
 }
