--- a/net/minecraft/world/entity/animal/frog/Frog.java
+++ b/net/minecraft/world/entity/animal/frog/Frog.java
@@ -163,7 +_,7 @@
         return this.entityData.get(DATA_VARIANT_ID);
     }
 
-    private void setVariant(Holder<FrogVariant> variant) {
+    public void setVariant(Holder<FrogVariant> variant) {
         this.entityData.set(DATA_VARIANT_ID, variant);
     }
 
@@ -287,7 +_,12 @@
 
     @Override
     public void spawnChildFromBreeding(ServerLevel level, Animal mate) {
-        this.finalizeSpawnChildFromBreeding(level, mate, null);
+        // 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;
+
+        this.finalizeSpawnChildFromBreeding(level, mate, null, result.getExperience()); // Paper - use craftbukkit call that takes experience amount
+        // Paper end - Add EntityFertilizeEggEvent event
         this.getBrain().setMemory(MemoryModuleType.IS_PREGNANT, Unit.INSTANCE);
     }
 
@@ -310,19 +_,19 @@
 
     @Nullable
     @Override
-    protected SoundEvent getAmbientSound() {
+    public SoundEvent getAmbientSound() {
         return SoundEvents.FROG_AMBIENT;
     }
 
     @Nullable
     @Override
-    protected SoundEvent getHurtSound(DamageSource damageSource) {
+    public SoundEvent getHurtSound(DamageSource damageSource) {
         return SoundEvents.FROG_HURT;
     }
 
     @Nullable
     @Override
-    protected SoundEvent getDeathSound() {
+    public SoundEvent getDeathSound() {
         return SoundEvents.FROG_DEATH;
     }
 
