--- a/net/minecraft/world/entity/monster/Bogged.java
+++ b/net/minecraft/world/entity/monster/Bogged.java
@@ -135,6 +135,15 @@
     }
 
     private void spawnShearedMushrooms() {
+        // Paper start - shear drops API
+        this.generateShearedMushrooms(stack -> {
+            this.forceDrops = true;
+            this.spawnAtLocation(stack, this.getBbHeight());
+            this.forceDrops = false;
+        });
+    }
+    private void generateShearedMushrooms(java.util.function.Consumer<ItemStack> stackConsumer) {
+        // Paper end - shear drops API
         if (this.level() instanceof ServerLevel serverLevel) {
             LootTable lootTable = serverLevel.getServer().reloadableRegistries().getLootTable(BuiltInLootTables.BOGGED_SHEAR);
             LootParams lootParams = new LootParams.Builder(serverLevel)
@@ -143,11 +152,20 @@
                 .create(LootContextParamSets.SHEARING);
 
             for (ItemStack itemStack : lootTable.getRandomItems(lootParams)) {
-                this.spawnAtLocation(itemStack, this.getBbHeight());
+                stackConsumer.accept(itemStack); // Paper
             }
         }
     }
 
+    // Paper start - shear drops API
+    @Override
+    public java.util.List<ItemStack> generateDefaultDrops() {
+        final java.util.List<ItemStack> drops = new java.util.ArrayList<>();
+        this.generateShearedMushrooms(drops::add);
+        return drops;
+    }
+    // Paper end - shear drops API
+
     @Override
     public boolean readyForShearing() {
         return !this.isSheared() && this.isAlive();
