From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: jmp <jasonpenilla2@me.com>
Date: Sun, 15 Nov 2020 02:18:15 -0800
Subject: [PATCH] Make entity breeding times configurable


diff --git a/src/main/java/net/minecraft/server/BehaviorMakeLove.java b/src/main/java/net/minecraft/server/BehaviorMakeLove.java
index 7bdcc7bb26a1f7c8fc2562016af8598b9a7b4de3..d22b1742e2bf9c390590851de45b2e66f1444b47 100644
--- a/src/main/java/net/minecraft/server/BehaviorMakeLove.java
+++ b/src/main/java/net/minecraft/server/BehaviorMakeLove.java
@@ -102,8 +102,10 @@ public class BehaviorMakeLove extends Behavior<EntityVillager> {
         if (entityvillager2 == null) {
             return Optional.empty();
         } else {
-            entityvillager.setAgeRaw(6000);
-            entityvillager1.setAgeRaw(6000);
+            // Purpur start
+            entityvillager.setAgeRaw(worldserver.purpurConfig.villagerBreedingTicks);
+            entityvillager1.setAgeRaw(worldserver.purpurConfig.villagerBreedingTicks);
+            // Purpur end
             entityvillager2.setAgeRaw(-24000);
             entityvillager2.setPositionRotation(entityvillager.locX(), entityvillager.locY(), entityvillager.locZ(), 0.0F, 0.0F);
             worldserver.addAllEntities(entityvillager2, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); // CraftBukkit - added SpawnReason
diff --git a/src/main/java/net/minecraft/server/EntityAnimal.java b/src/main/java/net/minecraft/server/EntityAnimal.java
index cf9be4be18e913e49e9150358c66138b64319ed8..c1d2b12418464203c1da8af8da61a9cc9305bb65 100644
--- a/src/main/java/net/minecraft/server/EntityAnimal.java
+++ b/src/main/java/net/minecraft/server/EntityAnimal.java
@@ -14,6 +14,7 @@ public abstract class EntityAnimal extends EntityAgeable {
     public int loveTicks;
     public UUID breedCause;
     public ItemStack breedItem; // CraftBukkit - Add breedItem variable
+    abstract int getPurpurBreedTime(); // Purpur
 
     protected EntityAnimal(EntityTypes<? extends EntityAnimal> entitytypes, World world) {
         super(entitytypes, world);
@@ -235,8 +236,10 @@ public abstract class EntityAnimal extends EntityAgeable {
                 CriterionTriggers.o.a(entityplayer, this, entityanimal, entityageable);
             }
 
-            this.setAgeRaw(6000);
-            entityanimal.setAgeRaw(6000);
+            // Purpur start
+            this.setAgeRaw(this.getPurpurBreedTime());
+            entityanimal.setAgeRaw(entityanimal.getPurpurBreedTime());
+            // Purpur end
             this.resetLove();
             entityanimal.resetLove();
             entityageable.setBaby(true);
diff --git a/src/main/java/net/minecraft/server/EntityBee.java b/src/main/java/net/minecraft/server/EntityBee.java
index d8354ec4d19fc3fbddc2551ee217acb137482e63..ded4e10f5082fb5aa25368d9035affba287c3345 100644
--- a/src/main/java/net/minecraft/server/EntityBee.java
+++ b/src/main/java/net/minecraft/server/EntityBee.java
@@ -100,6 +100,11 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB
             setMot(mot.a(0.9D));
         }
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return this.world.purpurConfig.beeBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/server/EntityCat.java b/src/main/java/net/minecraft/server/EntityCat.java
index 0e6552d77adb95c94cb06b6f9289c4c12e6955bb..437a7b8ffb40c461f1778d91591fa6c4dcf36834 100644
--- a/src/main/java/net/minecraft/server/EntityCat.java
+++ b/src/main/java/net/minecraft/server/EntityCat.java
@@ -58,6 +58,11 @@ public class EntityCat extends EntityTameableAnimal {
         setSleepingWithOwner(false);
         setHeadDown(false);
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return this.world.purpurConfig.catBreedingTicks;
+    }
     // Purpur end
 
     public MinecraftKey eU() {
diff --git a/src/main/java/net/minecraft/server/EntityChicken.java b/src/main/java/net/minecraft/server/EntityChicken.java
index ee59a9f272a9caebec8f2329e1e4b22ddd27a0f9..2e1dc047459889aea85a79eaa04e8fe1a80e5b9e 100644
--- a/src/main/java/net/minecraft/server/EntityChicken.java
+++ b/src/main/java/net/minecraft/server/EntityChicken.java
@@ -34,6 +34,11 @@ public class EntityChicken extends EntityAnimal {
             this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(2.0D);
         }
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return this.world.purpurConfig.chickenBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/server/EntityCow.java b/src/main/java/net/minecraft/server/EntityCow.java
index 1219b0aa9c62bc9a1bda45cc9e9a27f14a28fe2e..63497ca0266073dc0a16b7dc22641d08c3eaf400 100644
--- a/src/main/java/net/minecraft/server/EntityCow.java
+++ b/src/main/java/net/minecraft/server/EntityCow.java
@@ -21,6 +21,11 @@ public class EntityCow extends EntityAnimal {
     public boolean isRidableInWater() {
         return world.purpurConfig.cowRidableInWater;
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return this.world.purpurConfig.cowBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/server/EntityFox.java b/src/main/java/net/minecraft/server/EntityFox.java
index f5defe4713c6be7d32fb2116110516717460284e..b5f036af81ddd3c1b0e388a28383f0b6a63d128c 100644
--- a/src/main/java/net/minecraft/server/EntityFox.java
+++ b/src/main/java/net/minecraft/server/EntityFox.java
@@ -86,6 +86,11 @@ public class EntityFox extends EntityAnimal {
         super.onDismount(entityhuman);
         setCanPickupLoot(true);
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return this.world.purpurConfig.foxBreedingTicks;
+    }
     // Purpur end
 
     @Override
@@ -1300,8 +1305,10 @@ public class EntityFox extends EntityAnimal {
                     CriterionTriggers.o.a(entityplayer2, this.animal, this.partner, (EntityAgeable) entityfox);
                 }
 
-                this.animal.setAgeRaw(6000);
-                this.partner.setAgeRaw(6000);
+                // Purpur start
+                this.animal.setAgeRaw(this.animal.getPurpurBreedTime());
+                this.partner.setAgeRaw(this.partner.getPurpurBreedTime());
+                // Purpur end
                 this.animal.resetLove();
                 this.partner.resetLove();
                 entityfox.setAgeRaw(-24000);
diff --git a/src/main/java/net/minecraft/server/EntityHoglin.java b/src/main/java/net/minecraft/server/EntityHoglin.java
index 548ff4449faca0abdf72487276fe49207bacfe17..a1578aade4a535144b5e40277c902f2e9ab9e940 100644
--- a/src/main/java/net/minecraft/server/EntityHoglin.java
+++ b/src/main/java/net/minecraft/server/EntityHoglin.java
@@ -30,6 +30,11 @@ public class EntityHoglin extends EntityAnimal implements IMonster, IOglin {
     public boolean isRidableInWater() {
         return world.purpurConfig.hoglinRidableInWater;
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return this.world.purpurConfig.hoglinBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/server/EntityHorse.java b/src/main/java/net/minecraft/server/EntityHorse.java
index 4ffc61acdff8c51dc9b111e3024c828fb5386118..669bce5d9806c80bddc247fe103ff20dc6aaa8a5 100644
--- a/src/main/java/net/minecraft/server/EntityHorse.java
+++ b/src/main/java/net/minecraft/server/EntityHorse.java
@@ -17,6 +17,11 @@ public class EntityHorse extends EntityHorseAbstract {
     public boolean isRidableInWater() {
         return world.purpurConfig.horseRidableInWater;
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return this.world.purpurConfig.horseBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/server/EntityHorseDonkey.java b/src/main/java/net/minecraft/server/EntityHorseDonkey.java
index cb8aee5691ff4ecaa6ae60f1637b1852d3b6c162..f6421bb45c5e6adf39fdc085efe2b2f500b76c0c 100644
--- a/src/main/java/net/minecraft/server/EntityHorseDonkey.java
+++ b/src/main/java/net/minecraft/server/EntityHorseDonkey.java
@@ -13,6 +13,11 @@ public class EntityHorseDonkey extends EntityHorseChestedAbstract {
     public boolean isRidableInWater() {
         return world.purpurConfig.donkeyRidableInWater;
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return this.world.purpurConfig.donkeyBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/server/EntityHorseMule.java b/src/main/java/net/minecraft/server/EntityHorseMule.java
index 243aeb736e350418e9476819bbfec0e7ab59f92f..30cbc505d2b0f4d3247edfd271de8daab023eb2a 100644
--- a/src/main/java/net/minecraft/server/EntityHorseMule.java
+++ b/src/main/java/net/minecraft/server/EntityHorseMule.java
@@ -13,6 +13,11 @@ public class EntityHorseMule extends EntityHorseChestedAbstract {
     public boolean isRidableInWater() {
         return world.purpurConfig.muleRidableInWater;
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return this.world.purpurConfig.muleBreedingTicks;
+    }
     // Purpur end
     @Override
     protected SoundEffect getSoundAmbient() {
diff --git a/src/main/java/net/minecraft/server/EntityHorseSkeleton.java b/src/main/java/net/minecraft/server/EntityHorseSkeleton.java
index e2c6a5807a4554a7eebb148e40f1f8a1d979df5e..408db52cacbdfbca8af0a6a8e913b0128a3f5a76 100644
--- a/src/main/java/net/minecraft/server/EntityHorseSkeleton.java
+++ b/src/main/java/net/minecraft/server/EntityHorseSkeleton.java
@@ -22,6 +22,11 @@ public class EntityHorseSkeleton extends EntityHorseAbstract {
     public boolean isTamed() {
         return true;
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return 6000;
+    }
     // Purpur end
 
     public static AttributeProvider.Builder eL() {
diff --git a/src/main/java/net/minecraft/server/EntityHorseZombie.java b/src/main/java/net/minecraft/server/EntityHorseZombie.java
index 559ba50977147b8e2a0e7c1e7dc281faabd7f292..2121a6c979ba2ea7cb596ca6081750d2f8c7df9f 100644
--- a/src/main/java/net/minecraft/server/EntityHorseZombie.java
+++ b/src/main/java/net/minecraft/server/EntityHorseZombie.java
@@ -18,6 +18,11 @@ public class EntityHorseZombie extends EntityHorseAbstract {
     public boolean isTamed() {
         return true;
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return 6000;
+    }
     // Purpur end
 
     public static AttributeProvider.Builder eL() {
diff --git a/src/main/java/net/minecraft/server/EntityLlama.java b/src/main/java/net/minecraft/server/EntityLlama.java
index 1099277868f92fdaf4b0ec3a982f26f20ead7369..3bc6e6df9e0107debe5b15f5f7aad97ad336f304 100644
--- a/src/main/java/net/minecraft/server/EntityLlama.java
+++ b/src/main/java/net/minecraft/server/EntityLlama.java
@@ -57,6 +57,11 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn
     public boolean hasSaddle() {
         return super.hasSaddle() || (isTamed() && getColor() != null);
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return this.world.purpurConfig.llamaBreedingTicks;
+    }
     // Purpur end
 
     public void setStrength(int i) {
diff --git a/src/main/java/net/minecraft/server/EntityMushroomCow.java b/src/main/java/net/minecraft/server/EntityMushroomCow.java
index e38d165fefb4d552ded2198536a6663a5688070d..46d031ef3cebfe30e07840ef1c9d60a97a24cd1b 100644
--- a/src/main/java/net/minecraft/server/EntityMushroomCow.java
+++ b/src/main/java/net/minecraft/server/EntityMushroomCow.java
@@ -31,6 +31,11 @@ public class EntityMushroomCow extends EntityCow implements IShearable {
     public boolean isRidableInWater() {
         return world.purpurConfig.mooshroomRidableInWater;
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return this.world.purpurConfig.mooshroomBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/server/EntityOcelot.java b/src/main/java/net/minecraft/server/EntityOcelot.java
index 2f8275cd6b3cde0d3f949219f67ba7f0e0031dc3..a5be10dfb0de08b0d97265278b1f11ad1e94b821 100644
--- a/src/main/java/net/minecraft/server/EntityOcelot.java
+++ b/src/main/java/net/minecraft/server/EntityOcelot.java
@@ -26,6 +26,11 @@ public class EntityOcelot extends EntityAnimal {
     public boolean isRidableInWater() {
         return world.purpurConfig.ocelotRidableInWater;
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return this.world.purpurConfig.ocelotBreedingTicks;
+    }
     // Purpur end
 
     private boolean isTrusting() {
diff --git a/src/main/java/net/minecraft/server/EntityPanda.java b/src/main/java/net/minecraft/server/EntityPanda.java
index eafae5516b9b5d51aa943796557926cf61476d2b..c70180fddb829419b9cc5188766e9130f9b8a94a 100644
--- a/src/main/java/net/minecraft/server/EntityPanda.java
+++ b/src/main/java/net/minecraft/server/EntityPanda.java
@@ -65,6 +65,11 @@ public class EntityPanda extends EntityAnimal {
         this.setEating(false);
         this.setLayingOnBack(false);
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return this.world.purpurConfig.pandaBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/server/EntityParrot.java b/src/main/java/net/minecraft/server/EntityParrot.java
index e402d4a77b57b8b12b7575a9793c30d7acfa7fb0..398e92bf7053c411bd98626efe4261e15256d3ee 100644
--- a/src/main/java/net/minecraft/server/EntityParrot.java
+++ b/src/main/java/net/minecraft/server/EntityParrot.java
@@ -115,6 +115,11 @@ public class EntityParrot extends EntityPerchable implements EntityBird {
             setMot(mot.a(0.9D));
         }
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return 6000;
+    }
     // Purpur end
 
     @Nullable
diff --git a/src/main/java/net/minecraft/server/EntityPig.java b/src/main/java/net/minecraft/server/EntityPig.java
index bf7ecd7a7d805cc8f1314a348d7b13f848da46b5..eae841eeac75a35a9dc5a53c57538ac5264ece68 100644
--- a/src/main/java/net/minecraft/server/EntityPig.java
+++ b/src/main/java/net/minecraft/server/EntityPig.java
@@ -29,6 +29,11 @@ public class EntityPig extends EntityAnimal implements ISteerable, ISaddleable {
     public boolean isRidableInWater() {
         return world.purpurConfig.pigRidableInWater;
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return this.world.purpurConfig.pigBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/server/EntityPolarBear.java b/src/main/java/net/minecraft/server/EntityPolarBear.java
index 3d649843f565d2c8820b525c199bd2b9f9120cc7..40395dd7ea515e51a189d014a3274d15dc1d8ee6 100644
--- a/src/main/java/net/minecraft/server/EntityPolarBear.java
+++ b/src/main/java/net/minecraft/server/EntityPolarBear.java
@@ -67,6 +67,11 @@ public class EntityPolarBear extends EntityAnimal implements IEntityAngerable {
             return this.isInLove() && polarbear.isInLove();
         }
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return this.world.purpurConfig.polarBearBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/server/EntityRabbit.java b/src/main/java/net/minecraft/server/EntityRabbit.java
index 95f4592944a53aab0ff9843ae8e7c9b9cd0201c7..b7f4d61f0038d865ef9ee3c14f6dc146f8de5ac4 100644
--- a/src/main/java/net/minecraft/server/EntityRabbit.java
+++ b/src/main/java/net/minecraft/server/EntityRabbit.java
@@ -30,6 +30,11 @@ public class EntityRabbit extends EntityAnimal {
     public boolean isRidableInWater() {
         return world.purpurConfig.rabbitRidableInWater;
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return this.world.purpurConfig.rabbitBreedingTicks;
+    }
     // Purpur end
 
     // CraftBukkit start - code from constructor
diff --git a/src/main/java/net/minecraft/server/EntitySheep.java b/src/main/java/net/minecraft/server/EntitySheep.java
index a151d4295c02930687a23212647de60cce5405ca..32130c0681501e3e5a47b199f0bb39daac416ed3 100644
--- a/src/main/java/net/minecraft/server/EntitySheep.java
+++ b/src/main/java/net/minecraft/server/EntitySheep.java
@@ -66,6 +66,11 @@ public class EntitySheep extends EntityAnimal implements IShearable {
     public boolean isRidableInWater() {
         return world.purpurConfig.sheepRidableInWater;
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return this.world.purpurConfig.sheepBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/server/EntityStrider.java b/src/main/java/net/minecraft/server/EntityStrider.java
index 56b72132595db5bc9addf31aecde5c13c5fd44c2..5c960365901b6ebd74134dac2e90c6aa81d33351 100644
--- a/src/main/java/net/minecraft/server/EntityStrider.java
+++ b/src/main/java/net/minecraft/server/EntityStrider.java
@@ -38,6 +38,11 @@ public class EntityStrider extends EntityAnimal implements ISteerable, ISaddleab
     public boolean isRidableInWater() {
         return world.purpurConfig.striderRidableInWater;
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return this.world.purpurConfig.striderBreedingTicks;
+    }
     // Purpur end
 
     public static boolean c(EntityTypes<EntityStrider> entitytypes, GeneratorAccess generatoraccess, EnumMobSpawn enummobspawn, BlockPosition blockposition, Random random) {
diff --git a/src/main/java/net/minecraft/server/EntityTurtle.java b/src/main/java/net/minecraft/server/EntityTurtle.java
index 2b34e6cf3b86319bd2875d92b63902889fec32a8..067f7f28b02b388d56b93b1ed8274799757196e6 100644
--- a/src/main/java/net/minecraft/server/EntityTurtle.java
+++ b/src/main/java/net/minecraft/server/EntityTurtle.java
@@ -37,6 +37,11 @@ public class EntityTurtle extends EntityAnimal {
     public boolean isRidableInWater() {
         return world.purpurConfig.turtleRidableInWater;
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return this.world.purpurConfig.turtleBreedingTicks;
+    }
     // Purpur end
 
     public void setHomePos(BlockPosition blockposition) {
diff --git a/src/main/java/net/minecraft/server/EntityWolf.java b/src/main/java/net/minecraft/server/EntityWolf.java
index 9ae7168595dd66860e09ef87f946b18b010e54b1..6c25f667eecdf345289a0dbf885c9d71c6a26958 100644
--- a/src/main/java/net/minecraft/server/EntityWolf.java
+++ b/src/main/java/net/minecraft/server/EntityWolf.java
@@ -48,6 +48,11 @@ public class EntityWolf extends EntityTameableAnimal implements IEntityAngerable
         super.onMount(entityhuman);
         setSitting(false);
     }
+
+    @Override
+    int getPurpurBreedTime() {
+        return this.world.purpurConfig.wolfBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
index 84b2b8618162f81369dac9e8341374447d9b1737..abc9b4fc27fdef37e3444cc3d885acab9f4d3f23 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -434,10 +434,12 @@ public class PurpurWorldConfig {
     public boolean beeRidable = false;
     public boolean beeRidableInWater = false;
     public double beeMaxY = 256D;
+    public int beeBreedingTicks = 6000;
     private void beeSettings() {
         beeRidable = getBoolean("mobs.bee.ridable", beeRidable);
         beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater);
         beeMaxY = getDouble("mobs.bee.ridable-max-y", beeMaxY);
+        beeBreedingTicks = getInt("mobs.bee.breeding-delay-ticks", beeBreedingTicks);
     }
 
     public boolean blazeRidable = false;
@@ -454,12 +456,14 @@ public class PurpurWorldConfig {
     public int catSpawnDelay = 1200;
     public int catSpawnSwampHutScanRange = 16;
     public int catSpawnVillageScanRange = 48;
+    public int catBreedingTicks = 6000;
     private void catSettings() {
         catRidable = getBoolean("mobs.cat.ridable", catRidable);
         catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater);
         catSpawnDelay = getInt("mobs.cat.spawn-delay", catSpawnDelay);
         catSpawnSwampHutScanRange = getInt("mobs.cat.scan-range-for-other-cats.swamp-hut", catSpawnSwampHutScanRange);
         catSpawnVillageScanRange = getInt("mobs.cat.scan-range-for-other-cats.village", catSpawnVillageScanRange);
+        catBreedingTicks = getInt("mobs.cat.breeding-delay-ticks", catBreedingTicks);
     }
 
     public boolean caveSpiderRidable = false;
@@ -472,10 +476,12 @@ public class PurpurWorldConfig {
     public boolean chickenRidable = false;
     public boolean chickenRidableInWater = false;
     public boolean chickenRetaliate = false;
+    public int chickenBreedingTicks = 6000;
     private void chickenSettings() {
         chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable);
         chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater);
         chickenRetaliate = getBoolean("mobs.chicken.retaliate", chickenRetaliate);
+        chickenBreedingTicks = getInt("mobs.chicken.breeding-delay-ticks", chickenBreedingTicks);
     }
 
     public boolean codRidable = false;
@@ -486,10 +492,12 @@ public class PurpurWorldConfig {
     public boolean cowRidable = false;
     public boolean cowRidableInWater = false;
     public int cowFeedMushrooms = 0;
+    public int cowBreedingTicks = 6000;
     private void cowSettings() {
         cowRidable = getBoolean("mobs.cow.ridable", cowRidable);
         cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater);
         cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms);
+        cowBreedingTicks = getInt("mobs.cow.breeding-delay-ticks", cowBreedingTicks);
     }
 
     public boolean creeperRidable = false;
@@ -517,8 +525,10 @@ public class PurpurWorldConfig {
     }
 
     public boolean donkeyRidableInWater = false;
+    public int donkeyBreedingTicks = 6000;
     private void donkeySettings() {
         donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater);
+        donkeyBreedingTicks = getInt("mobs.donkey.breeding-delay-ticks", donkeyBreedingTicks);
     }
 
     public boolean drownedRidable = false;
@@ -576,10 +586,12 @@ public class PurpurWorldConfig {
     public boolean foxRidable = false;
     public boolean foxRidableInWater = false;
     public boolean foxTypeChangesWithTulips = false;
+    public int foxBreedingTicks = 6000;
     private void foxSettings() {
         foxRidable = getBoolean("mobs.fox.ridable", foxRidable);
         foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater);
         foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips);
+        foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks);
     }
 
     public boolean ghastRidable = false;
@@ -624,14 +636,18 @@ public class PurpurWorldConfig {
 
     public boolean hoglinRidable = false;
     public boolean hoglinRidableInWater = false;
+    public int hoglinBreedingTicks = 6000;
     private void hoglinSettings() {
         hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable);
         hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater);
+        hoglinBreedingTicks = getInt("mobs.hoglin.breeding-delay-ticks", hoglinBreedingTicks);
     }
 
     public boolean horseRidableInWater = false;
+    public int horseBreedingTicks = 6000;
     private void horseSettings() {
         horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater);
+        horseBreedingTicks = getInt("mobs.horse.breeding-delay-ticks", horseBreedingTicks);
     }
 
     public boolean huskRidable = false;
@@ -676,9 +692,11 @@ public class PurpurWorldConfig {
 
     public boolean llamaRidable = false;
     public boolean llamaRidableInWater = false;
+    public int llamaBreedingTicks = 6000;
     private void llamaSettings() {
         llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable);
         llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater);
+        llamaBreedingTicks = getInt("mobs.llama.breeding-delay-ticks", llamaBreedingTicks);
     }
 
     public boolean llamaTraderRidable = false;
@@ -697,28 +715,36 @@ public class PurpurWorldConfig {
 
     public boolean mooshroomRidable = false;
     public boolean mooshroomRidableInWater = false;
+    public int mooshroomBreedingTicks = 6000;
     private void mooshroomSettings() {
         mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable);
         mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater);
+        mooshroomBreedingTicks = getInt("mobs.mooshroom.breeding-delay-ticks", mooshroomBreedingTicks);
     }
 
     public boolean muleRidableInWater = false;
+    public int muleBreedingTicks = 6000;
     private void muleSettings() {
         muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater);
+        muleBreedingTicks = getInt("mobs.mule.breeding-delay-ticks", muleBreedingTicks);
     }
 
     public boolean ocelotRidable = false;
     public boolean ocelotRidableInWater = false;
+    public int ocelotBreedingTicks = 6000;
     private void ocelotSettings() {
         ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable);
         ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater);
+        ocelotBreedingTicks = getInt("mobs.ocelot.breeding-delay-ticks", ocelotBreedingTicks);
     }
 
     public boolean pandaRidable = false;
     public boolean pandaRidableInWater = false;
+    public int pandaBreedingTicks = 6000;
     private void pandaSettings() {
         pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable);
         pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater);
+        pandaBreedingTicks = getInt("mobs.panda.breeding-delay-ticks", pandaBreedingTicks);
     }
 
     public boolean parrotRidable = false;
@@ -784,10 +810,12 @@ public class PurpurWorldConfig {
     public boolean pigRidable = false;
     public boolean pigRidableInWater = false;
     public boolean pigGiveSaddleBack = false;
+    public int pigBreedingTicks = 6000;
     private void pigSettings() {
         pigRidable = getBoolean("mobs.pig.ridable", pigRidable);
         pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater);
         pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack);
+        pigBreedingTicks = getInt("mobs.pig.breeding-delay-ticks", pigBreedingTicks);
     }
 
     public boolean piglinRidable = false;
@@ -815,12 +843,14 @@ public class PurpurWorldConfig {
     public boolean polarBearRidableInWater = false;
     public String polarBearBreedableItemString = "";
     public Item polarBearBreedableItem = null;
+    public int polarBearBreedingTicks = 6000;
     private void polarBearSettings() {
         polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable);
         polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater);
         polarBearBreedableItemString = getString("mobs.polar_bear.breedable-item", polarBearBreedableItemString);
         Item item = IRegistry.ITEM.get(new MinecraftKey(polarBearBreedableItemString));
         if (item != Items.AIR) polarBearBreedableItem = item;
+        polarBearBreedingTicks = getInt("mobs.polar_bear.breeding-delay-ticks", polarBearBreedingTicks);
     }
 
     public boolean pufferfishRidable = false;
@@ -832,11 +862,13 @@ public class PurpurWorldConfig {
     public boolean rabbitRidableInWater = false;
     public double rabbitNaturalToast = 0.0D;
     public double rabbitNaturalKiller = 0.0D;
+    public int rabbitBreedingTicks = 6000;
     private void rabbitSettings() {
         rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable);
         rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater);
         rabbitNaturalToast = getDouble("mobs.rabbit.spawn-toast-chance", rabbitNaturalToast);
         rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller);
+        rabbitBreedingTicks = getInt("mobs.rabbit.breeding-delay-ticks", rabbitBreedingTicks);
     }
 
     public boolean ravagerRidable = false;
@@ -853,9 +885,11 @@ public class PurpurWorldConfig {
 
     public boolean sheepRidable = false;
     public boolean sheepRidableInWater = false;
+    public int sheepBreedingTicks = 6000;
     private void sheepSettings() {
         sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable);
         sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater);
+        sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks);
     }
 
     public boolean shulkerRidable = false;
@@ -933,9 +967,11 @@ public class PurpurWorldConfig {
 
     public boolean striderRidable = false;
     public boolean striderRidableInWater = false;
+    public int striderBreedingTicks = 6000;
     private void striderSettings() {
         striderRidable = getBoolean("mobs.strider.ridable", striderRidable);
         striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater);
+        striderBreedingTicks = getInt("mobs.strider.breeding-delay-ticks", striderBreedingTicks);
     }
 
     public boolean tropicalFishRidable = false;
@@ -945,9 +981,11 @@ public class PurpurWorldConfig {
 
     public boolean turtleRidable = false;
     public boolean turtleRidableInWater = false;
+    public int turtleBreedingTicks = 6000;
     private void turtleSettings() {
         turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable);
         turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater);
+        turtleBreedingTicks = getInt("mobs.turtle.breeding-delay-ticks", turtleBreedingTicks);
     }
 
     public boolean vexRidable = false;
@@ -969,6 +1007,7 @@ public class PurpurWorldConfig {
     public int villagerSpawnIronGolemRadius = 0;
     public int villagerSpawnIronGolemLimit = 0;
     public boolean villagerCanBreed = true;
+    public int villagerBreedingTicks = 6000;
     private void villagerSettings() {
         villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
         villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
@@ -980,6 +1019,7 @@ public class PurpurWorldConfig {
         villagerSpawnIronGolemRadius = getInt("mobs.villager.spawn-iron-golem.radius", villagerSpawnIronGolemRadius);
         villagerSpawnIronGolemLimit = getInt("mobs.villager.spawn-iron-golem.limit", villagerSpawnIronGolemLimit);
         villagerCanBreed = getBoolean("mobs.villager.can-breed", villagerCanBreed);
+        villagerBreedingTicks = getInt("mobs.villager.breeding-delay-ticks", villagerBreedingTicks);
     }
 
     public boolean villagerTraderRidable = false;
@@ -1040,9 +1080,11 @@ public class PurpurWorldConfig {
 
     public boolean wolfRidable = false;
     public boolean wolfRidableInWater = false;
+    public int wolfBreedingTicks = 6000;
     private void wolfSettings() {
         wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable);
         wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater);
+        wolfBreedingTicks = getInt("mobs.wolf.breeding-delay-ticks", wolfBreedingTicks);
     }
 
     public boolean zoglinRidable = false;
