--- a/net/minecraft/world/entity/projectile/ThrownEgg.java
+++ b/net/minecraft/world/entity/projectile/ThrownEgg.java
@@ -61,36 +_,71 @@
     protected void onHit(HitResult result) {
         super.onHit(result);
         if (!this.level().isClientSide) {
-            if (this.random.nextInt(8) == 0) {
+            // CraftBukkit start
+            boolean hatching = this.random.nextInt(8) == 0;
+            if (true) {
+                // CraftBukkit end
                 int i = 1;
                 if (this.random.nextInt(32) == 0) {
                     i = 4;
                 }
+                // CraftBukkit start
+                if (!hatching) {
+                    i = 0;
+                }
+
+                net.minecraft.world.entity.Entity shooter = this.getOwner();
+                org.bukkit.entity.EntityType hatchingType = org.bukkit.entity.EntityType.CHICKEN;
+                if (shooter instanceof net.minecraft.server.level.ServerPlayer) {
+                    org.bukkit.event.player.PlayerEggThrowEvent event = new org.bukkit.event.player.PlayerEggThrowEvent((org.bukkit.entity.Player) shooter.getBukkitEntity(), (org.bukkit.entity.Egg) this.getBukkitEntity(), hatching, (byte) i, hatchingType);
+                    event.callEvent();
+
+                    hatching = event.isHatching();
+                    i = hatching ? event.getNumHatches() : 0; // If hatching is set to false, ensure child count is 0
+                    hatchingType = event.getHatchingType();
+                }
+                // CraftBukkit end
+                // Paper start - Add ThrownEggHatchEvent
+                com.destroystokyo.paper.event.entity.ThrownEggHatchEvent event = new com.destroystokyo.paper.event.entity.ThrownEggHatchEvent((org.bukkit.entity.Egg) getBukkitEntity(), hatching, (byte) i, hatchingType);
+                event.callEvent();
+                hatching = event.isHatching();
+                i = hatching ? event.getNumHatches() : 0; // If hatching is set to false, ensure child count is 0
+                hatchingType = event.getHatchingType();
+                EntityType<?> newEntityType = org.bukkit.craftbukkit.entity.CraftEntityType.bukkitToMinecraft(hatchingType);
+                // Paper end - Add ThrownEggHatchEvent
 
                 for (int i1 = 0; i1 < i; i1++) {
-                    Chicken chicken = EntityType.CHICKEN.create(this.level(), EntitySpawnReason.TRIGGERED);
+                    net.minecraft.world.entity.Entity chicken = newEntityType.create(this.level(), net.minecraft.world.entity.EntitySpawnReason.TRIGGERED); // CraftBukkit
                     if (chicken != null) {
-                        chicken.setAge(-24000);
+                        // CraftBukkit start
+                        if (chicken.getBukkitEntity() instanceof org.bukkit.entity.Ageable ageable) {
+                            ageable.setBaby();
+                        }
+                        // CraftBukkit end
                         chicken.snapTo(this.getX(), this.getY(), this.getZ(), this.getYRot(), 0.0F);
-                        Optional.ofNullable(this.getItem().get(DataComponents.CHICKEN_VARIANT))
-                            .flatMap(eitherHolder -> eitherHolder.unwrap(this.registryAccess()))
-                            .ifPresent(chicken::setVariant);
+                        // CraftBukkit start
+                        if (chicken instanceof Chicken realChicken) {
+                            Optional.ofNullable(this.getItem().get(DataComponents.CHICKEN_VARIANT))
+                                .flatMap(eitherHolder -> eitherHolder.unwrap(this.registryAccess()))
+                                .ifPresent(realChicken::setVariant);
+                        }
+                        // CraftBukkit end
                         if (!chicken.fudgePositionAfterSizeChange(ZERO_SIZED_DIMENSIONS)) {
                             break;
                         }
 
-                        this.level().addFreshEntity(chicken);
+                        this.level().addFreshEntity(chicken, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.EGG); // CraftBukkit
                     }
                 }
             }
 
             this.level().broadcastEntityEvent(this, (byte)3);
-            this.discard();
+            this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.HIT); // CraftBukkit - add Bukkit remove cause
         }
     }
 
     @Override
-    protected Item getDefaultItem() {
+    public Item getDefaultItem() {
         return Items.EGG;
     }
 }
