--- a/net/minecraft/world/entity/animal/sniffer/Sniffer.java
+++ b/net/minecraft/world/entity/animal/sniffer/Sniffer.java
@@ -278,6 +_,13 @@
             this.dropFromGiftLootTable(serverLevel, BuiltInLootTables.SNIFFER_DIGGING, (serverLevel1, itemStack) -> {
                 ItemEntity itemEntity = new ItemEntity(this.level(), headBlock.getX(), headBlock.getY(), headBlock.getZ(), itemStack);
                 itemEntity.setDefaultPickUpDelay();
+                // CraftBukkit start - handle EntityDropItemEvent
+                org.bukkit.event.entity.EntityDropItemEvent event = new org.bukkit.event.entity.EntityDropItemEvent(this.getBukkitEntity(), (org.bukkit.entity.Item) itemEntity.getBukkitEntity());
+                org.bukkit.Bukkit.getPluginManager().callEvent(event);
+                if (event.isCancelled()) {
+                    return;
+                }
+                // CraftBukkit end
                 serverLevel1.addFreshEntity(itemEntity);
             });
             this.playSound(SoundEvents.SNIFFER_DROP_SEED, 1.0F, 1.0F);
@@ -336,12 +_,17 @@
 
     @Override
     public void spawnChildFromBreeding(ServerLevel level, Animal mate) {
+        // Paper start - Add EntityFertilizeEggEvent event
+        final io.papermc.paper.event.entity.EntityFertilizeEggEvent result = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityFertilizeEggEvent(this, mate);
+        if (result.isCancelled()) return;
+        // Paper end - Add EntityFertilizeEggEvent event
         ItemStack itemStack = new ItemStack(Items.SNIFFER_EGG);
         ItemEntity itemEntity = new ItemEntity(level, this.position().x(), this.position().y(), this.position().z(), itemStack);
         itemEntity.setDefaultPickUpDelay();
-        this.finalizeSpawnChildFromBreeding(level, mate, null);
+        this.finalizeSpawnChildFromBreeding(level, mate, null, result.getExperience()); // Paper - Add EntityFertilizeEggEvent event
+        if (this.spawnAtLocation(level, itemEntity) != null) { // Paper - Call EntityDropItemEvent
         this.playSound(SoundEvents.SNIFFER_EGG_PLOP, 1.0F, (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 0.5F);
-        level.addFreshEntity(itemEntity);
+        } // Paper - Call EntityDropItemEvent
     }
 
     @Override
