From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jason Penilla <11360596+jpenilla@users.noreply.github.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/world/entity/ai/behavior/VillagerMakeLove.java b/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java
index 8419ce671cff4b59e44376f9d874a6bdb53b3b13..dfbceb36813c9fd55bc481779bea0ce9084b544b 100644
--- a/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java
+++ b/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java
@@ -121,6 +121,10 @@ public class VillagerMakeLove extends Behavior<Villager> {
             // CraftBukkit end
             parent.setAge(6000);
             partner.setAge(6000);
+            // Purpur start
+            parent.setAge(world.purpurConfig.villagerBreedingTicks);
+            partner.setAge(world.purpurConfig.villagerBreedingTicks);
+            // Purpur end
             world.addAllEntities(entityvillager2, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); // CraftBukkit - added SpawnReason
             world.broadcastEntityEvent(entityvillager2, (byte) 12);
             return Optional.of(entityvillager2);
diff --git a/src/main/java/net/minecraft/world/entity/animal/Animal.java b/src/main/java/net/minecraft/world/entity/animal/Animal.java
index d5d9f8e9c7119ae159a085aa414fc7f303be72a5..ff67d13f646551d7d4d2a169be656c9856f11324 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Animal.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Animal.java
@@ -38,6 +38,7 @@ public abstract class Animal extends AgeableMob {
     public int inLove;
     public UUID loveCause;
     public ItemStack breedItem; // CraftBukkit - Add breedItem variable
+    public abstract int getPurpurBreedTime(); // Purpur
 
     protected Animal(EntityType<? extends Animal> type, Level world) {
         super(type, world);
@@ -263,8 +264,10 @@ public abstract class Animal extends AgeableMob {
                 CriteriaTriggers.BRED_ANIMALS.trigger(entityplayer, this, other, entityageable);
             }
 
-            this.setAge(6000);
-            other.setAge(6000);
+            // Purpur start
+            this.setAge(this.getPurpurBreedTime());
+            other.setAge(other.getPurpurBreedTime());
+            // Purpur end
             this.resetLove();
             other.resetLove();
             world.addAllEntities(entityageable, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); // CraftBukkit - added SpawnReason
diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java
index 56f55c4520bec4b4baaa606e47ecf6c0288a104f..f9262c1fca1a1318fb5f6f607e8e71c1019c5c95 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java
@@ -214,6 +214,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
     public void initAttributes() {
         this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.beeMaxHealth);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.beeBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java
index 1cbbc29ef19c8f1b8f96882213b662cfcb193033..052d1e51a891ee17bed0043f6f3fd162c15b16b2 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Cat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java
@@ -144,6 +144,11 @@ public class Cat extends TamableAnimal {
     public void initAttributes() {
         this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.catMaxHealth);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.catBreedingTicks;
+    }
     // Purpur end
 
     public ResourceLocation getResourceLocation() {
diff --git a/src/main/java/net/minecraft/world/entity/animal/Chicken.java b/src/main/java/net/minecraft/world/entity/animal/Chicken.java
index 35cf6b9fb4d72df905d93bf52c02846b21b04007..50bd7f218ed5c85f52e8e53f027623a5ec12078b 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Chicken.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Chicken.java
@@ -70,6 +70,11 @@ public class Chicken extends Animal {
             this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(2.0D);
         }
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.chickenBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java
index 9da76357da891a70e20ad80f50873b3b487dc84c..c718697a9511ccf761467644967397b777446db9 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Cow.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java
@@ -57,6 +57,11 @@ public class Cow extends Animal {
     public void initAttributes() {
         this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.cowMaxHealth);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.cowBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java
index 406b6ed8084c18da1062d8e8049bdfff65101565..ba1bfad397d62dd6feccdbbe3288997cfe16ce84 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Fox.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java
@@ -176,6 +176,11 @@ public class Fox extends Animal {
     public void initAttributes() {
         this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.foxMaxHealth);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.foxBreedingTicks;
+    }
     // Purpur end
 
     @Override
@@ -955,8 +960,10 @@ public class Fox extends Animal {
                     CriteriaTriggers.BRED_ANIMALS.trigger(entityplayer2, this.animal, this.partner, (AgeableMob) entityfox);
                 }
 
-                this.animal.setAge(6000);
-                this.partner.setAge(6000);
+                // Purpur start
+                this.animal.setAge(this.animal.getPurpurBreedTime());
+                this.partner.setAge(this.partner.getPurpurBreedTime());
+                // Purpur end
                 this.animal.resetLove();
                 this.partner.resetLove();
                 worldserver.addAllEntities(entityfox, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); // CraftBukkit - added SpawnReason
diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
index 9dde33111658b2b80dfe9609114067332ec7df27..417640879f17081591b1ed23c6704a8b68069942 100644
--- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
+++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
@@ -76,6 +76,11 @@ public class MushroomCow extends Cow implements Shearable {
     public void initAttributes() {
         this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.mooshroomMaxHealth);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.mooshroomBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java
index de0247899f0bf785a94e39e170c8e2fc8a58b590..3b8c3aaa7f8249dafea44b306583cf7f7dbbed5e 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java
@@ -83,6 +83,11 @@ public class Ocelot extends Animal {
     public void initAttributes() {
         this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.ocelotMaxHealth);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.ocelotBreedingTicks;
+    }
     // Purpur end
 
     public boolean isTrusting() {
diff --git a/src/main/java/net/minecraft/world/entity/animal/Panda.java b/src/main/java/net/minecraft/world/entity/animal/Panda.java
index d0c10a6d465e2ac9a1bec04080a23dfb081e9f3e..a1538e9b97745dd775b48d38f14cff1b3fb1dd2e 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Panda.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Panda.java
@@ -133,6 +133,11 @@ public class Panda extends Animal {
         this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.pandaMaxHealth);
         setAttributes();
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.pandaBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java
index 1e38578a9a1531433866e2de7aa0ce5237da3b6b..2cc91c255e0f77b214b8ec54429c11bb1d6fe8e0 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java
@@ -181,6 +181,11 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal {
     public void initAttributes() {
         this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.parrotMaxHealth);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return 6000;
+    }
     // Purpur end
 
     @Nullable
diff --git a/src/main/java/net/minecraft/world/entity/animal/Pig.java b/src/main/java/net/minecraft/world/entity/animal/Pig.java
index 518d28dc0b5b8c04263c93a4347e4c971a1318d8..98cf2268304f3a092dba45bb4297d14fe81cc057 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Pig.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Pig.java
@@ -80,6 +80,11 @@ public class Pig extends Animal implements ItemSteerable, Saddleable {
     public void initAttributes() {
         this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.pigMaxHealth);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.pigBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java
index d39c88af3882a09ff1a06f9052d7b9b8afdddda4..45934499067bb323413e73c99fe01bb223df7990 100644
--- a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java
+++ b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java
@@ -114,6 +114,11 @@ public class PolarBear extends Animal implements NeutralMob {
             return this.isInLove() && bear.isInLove();
         }
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.polarBearBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java
index e0ba1ef404c9f8ba1eae563b733d10d94b1442e4..8d15e7ec0ae4bcdfd5628f41c0fc236eaa85d548 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java
@@ -133,6 +133,11 @@ public class Rabbit extends Animal {
     public void initAttributes() {
         this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.rabbitMaxHealth);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.rabbitBreedingTicks;
+    }
     // Purpur end
 
     // CraftBukkit start - code from constructor
diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java
index 497be3182c72b5a0f3bc42088c4168702119b527..607823661ba942ec03b1f61dac5a786b6f72ff7b 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java
@@ -131,6 +131,11 @@ public class Sheep extends Animal implements Shearable {
     public void initAttributes() {
         this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.sheepMaxHealth);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.sheepBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java
index 66c01b8300bc09ace27e4d1a30ee9274c69fcc9a..3e8c90c2d44d906fae3dfc068a30c81a494a3268 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java
@@ -105,6 +105,11 @@ public class Turtle extends Animal {
     public void initAttributes() {
         this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.turtleMaxHealth);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.turtleBreedingTicks;
+    }
     // Purpur end
 
     public void setHomePos(BlockPos pos) {
diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java
index ae416b70109c959980b3115da6e97df1610996ca..ef4abaf68de01b0879f7d0b330d2d57cc6bd10f9 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java
@@ -113,6 +113,11 @@ public class Wolf extends TamableAnimal implements NeutralMob {
     public void initAttributes() {
         this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.wolfMaxHealth);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.wolfBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
index 2542ed327e03c37a3225fac10d4a6659c35512ca..be4beb44c5db58a0ac33e21948b45bc792c692e1 100644
--- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
+++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
@@ -110,6 +110,11 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable {
     public void initAttributes() {
         this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.axolotlMaxHealth);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.axolotlBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
index 0ee42f45a9877ffd6df80e602c3cb5affd43d285..ce2896c609d16a9b9a733930a3c4c3bd32ebec90 100644
--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
+++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
@@ -87,6 +87,11 @@ public class Goat extends Animal {
     public void initAttributes() {
         this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.goatMaxHealth);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.goatBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java b/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java
index b4944ab2191241dc604ad21670360e5204bc111b..63378addd3de1a3e882f72bc6e1da74405bd79ed 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java
@@ -35,6 +35,11 @@ public class Donkey extends AbstractChestedHorse {
     public double generateRandomSpeed() {
         return generateRandomSpeed(this.level.purpurConfig.donkeyMovementSpeedMin, this.level.purpurConfig.donkeyMovementSpeedMax);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.donkeyBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java b/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java
index 6c6d2ac7551ae24dec88bd9e6bce7aeafd900e8c..b077b3d389e3439cf1115009a0edb4ed9f66bf02 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java
@@ -59,6 +59,11 @@ public class Horse extends AbstractHorse {
     public double generateRandomSpeed() {
         return generateRandomSpeed(this.level.purpurConfig.horseMovementSpeedMin, this.level.purpurConfig.horseMovementSpeedMax);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.horseBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
index 5a0b9cfdd0b8d79b10f16c4a3ea1eed746c8887d..93a05b945ac248df0ea7a0b9d7264a9c129c3bcf 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
@@ -123,6 +123,11 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob {
     public double generateRandomSpeed() {
         return generateRandomSpeed(this.level.purpurConfig.llamaMovementSpeedMin, this.level.purpurConfig.llamaMovementSpeedMax);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.llamaBreedingTicks;
+    }
     // Purpur end
 
     public boolean isTraderLlama() {
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Mule.java b/src/main/java/net/minecraft/world/entity/animal/horse/Mule.java
index da3d0b431c14f1a0794b9445236af1f548139013..6bdf1727ae241538dc391431a55e5b089431bd7b 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/Mule.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/Mule.java
@@ -34,6 +34,11 @@ public class Mule extends AbstractChestedHorse {
     public double generateRandomSpeed() {
         return generateRandomSpeed(this.level.purpurConfig.muleMovementSpeedMin, this.level.purpurConfig.muleMovementSpeedMax);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.muleBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
index ffc36728e0fc90c4e37051adc643a2b8af8077ff..6d595941aa2dd36fda8bf7efea06b6d52c17647d 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/SkeletonHorse.java
@@ -49,6 +49,11 @@ public class SkeletonHorse extends AbstractHorse {
     public double generateRandomSpeed() {
         return generateRandomSpeed(this.level.purpurConfig.skeletonHorseMovementSpeedMin, this.level.purpurConfig.skeletonHorseMovementSpeedMax);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return 6000;
+    }
     // Purpur end
 
     public static AttributeSupplier.Builder createAttributes() {
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java b/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java
index c4eb99466c00c6cf1d60c7fa387f8b65efdac912..dbeed04103ee42bd16e7b785d7024214b6335679 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/TraderLlama.java
@@ -57,6 +57,11 @@ public class TraderLlama extends Llama {
     public double generateRandomSpeed() {
         return generateRandomSpeed(this.level.purpurConfig.traderLlamaMovementSpeedMin, this.level.purpurConfig.traderLlamaMovementSpeedMax);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.traderLlamaBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java
index 6ca7b168a1ea26102922d9377e52662f16c1e725..74321ed51b25617bac25e3497ba908cd1751db09 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/ZombieHorse.java
@@ -47,6 +47,11 @@ public class ZombieHorse extends AbstractHorse {
     public double generateRandomSpeed() {
         return generateRandomSpeed(this.level.purpurConfig.zombieHorseMovementSpeedMin, this.level.purpurConfig.zombieHorseMovementSpeedMax);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return 6000;
+    }
     // Purpur end
 
     public static AttributeSupplier.Builder createAttributes() {
diff --git a/src/main/java/net/minecraft/world/entity/monster/Strider.java b/src/main/java/net/minecraft/world/entity/monster/Strider.java
index 2d7b83ce2e0e26ef3976514ec8921a718ccc28bd..9d314470361b2e17afdadc355c084254e5b03aff 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Strider.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java
@@ -112,6 +112,11 @@ public class Strider extends Animal implements ItemSteerable, Saddleable {
     public void initAttributes() {
         this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.striderMaxHealth);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.striderBreedingTicks;
+    }
     // Purpur end
 
     public static boolean checkStriderSpawnRules(EntityType<Strider> type, LevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) {
diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
index fb0aa2854f8be22682ee65298080b668c722f447..975e15a501f01c1f87b80ee20d57f4d26051f326 100644
--- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
+++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java
@@ -82,6 +82,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
     public void initAttributes() {
         this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level.purpurConfig.hoglinMaxHealth);
     }
+
+    @Override
+    public int getPurpurBreedTime() {
+        return this.level.purpurConfig.hoglinBreedingTicks;
+    }
     // Purpur end
 
     @Override
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
index db50fe00f2e725d0ab44f8704443cf6107e39d4e..42f1ef15f020b2b62079d23fde09b788d204dc17 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -492,9 +492,11 @@ public class PurpurWorldConfig {
 
     public boolean axolotlRidable = false;
     public double axolotlMaxHealth = 14.0D;
+    public int axolotlBreedingTicks = 6000;
     private void axolotlSettings() {
         axolotlRidable = getBoolean("mobs.axolotl.ridable", axolotlRidable);
         axolotlMaxHealth = getDouble("mobs.axolotl.attributes.max_health", axolotlMaxHealth);
+        axolotlBreedingTicks = getInt("mobs.axolotl.breeding-delay-ticks", axolotlBreedingTicks);
     }
 
     public boolean batRidable = false;
@@ -524,6 +526,7 @@ public class PurpurWorldConfig {
     public boolean beeRidableInWater = false;
     public double beeMaxY = 256D;
     public double beeMaxHealth = 10.0D;
+    public int beeBreedingTicks = 6000;
     private void beeSettings() {
         beeRidable = getBoolean("mobs.bee.ridable", beeRidable);
         beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater);
@@ -534,6 +537,7 @@ public class PurpurWorldConfig {
             set("mobs.bee.attributes.max_health", oldValue);
         }
         beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth);
+        beeBreedingTicks = getInt("mobs.bee.breeding-delay-ticks", beeBreedingTicks);
     }
 
     public boolean blazeRidable = false;
@@ -558,6 +562,7 @@ 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);
@@ -570,6 +575,7 @@ public class PurpurWorldConfig {
         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;
@@ -590,6 +596,7 @@ public class PurpurWorldConfig {
     public boolean chickenRidableInWater = false;
     public double chickenMaxHealth = 4.0D;
     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);
@@ -600,6 +607,7 @@ public class PurpurWorldConfig {
         }
         chickenMaxHealth = getDouble("mobs.chicken.attributes.max_health", chickenMaxHealth);
         chickenRetaliate = getBoolean("mobs.chicken.retaliate", chickenRetaliate);
+        chickenBreedingTicks = getInt("mobs.chicken.breeding-delay-ticks", chickenBreedingTicks);
     }
 
     public boolean codRidable = false;
@@ -618,6 +626,7 @@ public class PurpurWorldConfig {
     public boolean cowRidableInWater = false;
     public double cowMaxHealth = 10.0D;
     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);
@@ -628,6 +637,7 @@ public class PurpurWorldConfig {
         }
         cowMaxHealth = getDouble("mobs.cow.attributes.max_health", cowMaxHealth);
         cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms);
+        cowBreedingTicks = getInt("mobs.cow.breeding-delay-ticks", cowBreedingTicks);
     }
 
     public boolean creeperRidable = false;
@@ -675,6 +685,7 @@ public class PurpurWorldConfig {
     public double donkeyJumpStrengthMax = 0.5D;
     public double donkeyMovementSpeedMin = 0.175D;
     public double donkeyMovementSpeedMax = 0.175D;
+    public int donkeyBreedingTicks = 6000;
     private void donkeySettings() {
         donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater);
         if (PurpurConfig.version < 10) {
@@ -690,6 +701,7 @@ public class PurpurWorldConfig {
         donkeyJumpStrengthMax = getDouble("mobs.donkey.attributes.jump_strength.max", donkeyJumpStrengthMax);
         donkeyMovementSpeedMin = getDouble("mobs.donkey.attributes.movement_speed.min", donkeyMovementSpeedMin);
         donkeyMovementSpeedMax = getDouble("mobs.donkey.attributes.movement_speed.max", donkeyMovementSpeedMax);
+        donkeyBreedingTicks = getInt("mobs.donkey.breeding-delay-ticks", donkeyBreedingTicks);
     }
 
     public boolean drownedRidable = false;
@@ -796,6 +808,7 @@ public class PurpurWorldConfig {
     public boolean foxRidableInWater = false;
     public double foxMaxHealth = 10.0D;
     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);
@@ -806,6 +819,7 @@ public class PurpurWorldConfig {
         }
         foxMaxHealth = getDouble("mobs.fox.attributes.max_health", foxMaxHealth);
         foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips);
+        foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks);
     }
 
     public boolean ghastRidable = false;
@@ -866,10 +880,12 @@ public class PurpurWorldConfig {
     public boolean goatRidable = false;
     public boolean goatRidableInWater = false;
     public double goatMaxHealth = 10.0D;
+    public int goatBreedingTicks = 6000;
     private void goatSettings() {
         goatRidable = getBoolean("mobs.goat.ridable", goatRidable);
         goatRidableInWater = getBoolean("mobs.goat.ridable-in-water", goatRidableInWater);
         goatMaxHealth = getDouble("mobs.goat.attributes.max_health", goatMaxHealth);
+        goatBreedingTicks = getInt("mobs.goat.breeding-delay-ticks", goatBreedingTicks);
     }
 
     public boolean guardianRidable = false;
@@ -887,6 +903,7 @@ public class PurpurWorldConfig {
     public boolean hoglinRidable = false;
     public boolean hoglinRidableInWater = false;
     public double hoglinMaxHealth = 40.0D;
+    public int hoglinBreedingTicks = 6000;
     private void hoglinSettings() {
         hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable);
         hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater);
@@ -896,6 +913,7 @@ public class PurpurWorldConfig {
             set("mobs.hoglin.attributes.max_health", oldValue);
         }
         hoglinMaxHealth = getDouble("mobs.hoglin.attributes.max_health", hoglinMaxHealth);
+        hoglinBreedingTicks = getInt("mobs.hoglin.breeding-delay-ticks", hoglinBreedingTicks);
     }
 
     public boolean horseRidableInWater = false;
@@ -905,6 +923,7 @@ public class PurpurWorldConfig {
     public double horseJumpStrengthMax = 1.0D;
     public double horseMovementSpeedMin = 0.1125D;
     public double horseMovementSpeedMax = 0.3375D;
+    public int horseBreedingTicks = 6000;
     private void horseSettings() {
         horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater);
         if (PurpurConfig.version < 10) {
@@ -920,6 +939,7 @@ public class PurpurWorldConfig {
         horseJumpStrengthMax = getDouble("mobs.horse.attributes.jump_strength.max", horseJumpStrengthMax);
         horseMovementSpeedMin = getDouble("mobs.horse.attributes.movement_speed.min", horseMovementSpeedMin);
         horseMovementSpeedMax = getDouble("mobs.horse.attributes.movement_speed.max", horseMovementSpeedMax);
+        horseBreedingTicks = getInt("mobs.horse.breeding-delay-ticks", horseBreedingTicks);
     }
 
     public boolean huskRidable = false;
@@ -990,6 +1010,7 @@ public class PurpurWorldConfig {
     public double llamaJumpStrengthMax = 0.5D;
     public double llamaMovementSpeedMin = 0.175D;
     public double llamaMovementSpeedMax = 0.175D;
+    public int llamaBreedingTicks = 6000;
     private void llamaSettings() {
         llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable);
         llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater);
@@ -1006,6 +1027,7 @@ public class PurpurWorldConfig {
         llamaJumpStrengthMax = getDouble("mobs.llama.attributes.jump_strength.max", llamaJumpStrengthMax);
         llamaMovementSpeedMin = getDouble("mobs.llama.attributes.movement_speed.min", llamaMovementSpeedMin);
         llamaMovementSpeedMax = getDouble("mobs.llama.attributes.movement_speed.max", llamaMovementSpeedMax);
+        llamaBreedingTicks = getInt("mobs.llama.breeding-delay-ticks", llamaBreedingTicks);
     }
 
     public boolean magmaCubeRidable = false;
@@ -1025,6 +1047,7 @@ public class PurpurWorldConfig {
     public boolean mooshroomRidable = false;
     public boolean mooshroomRidableInWater = false;
     public double mooshroomMaxHealth = 10.0D;
+    public int mooshroomBreedingTicks = 6000;
     private void mooshroomSettings() {
         mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable);
         mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater);
@@ -1034,6 +1057,7 @@ public class PurpurWorldConfig {
             set("mobs.mooshroom.attributes.max_health", oldValue);
         }
         mooshroomMaxHealth = getDouble("mobs.mooshroom.attributes.max_health", mooshroomMaxHealth);
+        mooshroomBreedingTicks = getInt("mobs.mooshroom.breeding-delay-ticks", mooshroomBreedingTicks);
     }
 
     public boolean muleRidableInWater = false;
@@ -1043,6 +1067,7 @@ public class PurpurWorldConfig {
     public double muleJumpStrengthMax = 0.5D;
     public double muleMovementSpeedMin = 0.175D;
     public double muleMovementSpeedMax = 0.175D;
+    public int muleBreedingTicks = 6000;
     private void muleSettings() {
         muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater);
         if (PurpurConfig.version < 10) {
@@ -1058,11 +1083,13 @@ public class PurpurWorldConfig {
         muleJumpStrengthMax = getDouble("mobs.mule.attributes.jump_strength.max", muleJumpStrengthMax);
         muleMovementSpeedMin = getDouble("mobs.mule.attributes.movement_speed.min", muleMovementSpeedMin);
         muleMovementSpeedMax = getDouble("mobs.mule.attributes.movement_speed.max", muleMovementSpeedMax);
+        muleBreedingTicks = getInt("mobs.mule.breeding-delay-ticks", muleBreedingTicks);
     }
 
     public boolean ocelotRidable = false;
     public boolean ocelotRidableInWater = false;
     public double ocelotMaxHealth = 10.0D;
+    public int ocelotBreedingTicks = 6000;
     private void ocelotSettings() {
         ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable);
         ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater);
@@ -1072,11 +1099,13 @@ public class PurpurWorldConfig {
             set("mobs.ocelot.attributes.max_health", oldValue);
         }
         ocelotMaxHealth = getDouble("mobs.ocelot.attributes.max_health", ocelotMaxHealth);
+        ocelotBreedingTicks = getInt("mobs.ocelot.breeding-delay-ticks", ocelotBreedingTicks);
     }
 
     public boolean pandaRidable = false;
     public boolean pandaRidableInWater = false;
     public double pandaMaxHealth = 20.0D;
+    public int pandaBreedingTicks = 6000;
     private void pandaSettings() {
         pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable);
         pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater);
@@ -1086,6 +1115,7 @@ public class PurpurWorldConfig {
             set("mobs.panda.attributes.max_health", oldValue);
         }
         pandaMaxHealth = getDouble("mobs.panda.attributes.max_health", pandaMaxHealth);
+        pandaBreedingTicks = getInt("mobs.panda.breeding-delay-ticks", pandaBreedingTicks);
     }
 
     public boolean parrotRidable = false;
@@ -1166,6 +1196,7 @@ public class PurpurWorldConfig {
     public boolean pigRidableInWater = false;
     public double pigMaxHealth = 10.0D;
     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);
@@ -1176,6 +1207,7 @@ public class PurpurWorldConfig {
         }
         pigMaxHealth = getDouble("mobs.pig.attributes.max_health", pigMaxHealth);
         pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack);
+        pigBreedingTicks = getInt("mobs.pig.breeding-delay-ticks", pigBreedingTicks);
     }
 
     public boolean piglinRidable = false;
@@ -1225,6 +1257,7 @@ public class PurpurWorldConfig {
     public double polarBearMaxHealth = 30.0D;
     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);
@@ -1237,6 +1270,7 @@ public class PurpurWorldConfig {
         polarBearBreedableItemString = getString("mobs.polar_bear.breedable-item", polarBearBreedableItemString);
         Item item = Registry.ITEM.get(new ResourceLocation(polarBearBreedableItemString));
         if (item != Items.AIR) polarBearBreedableItem = item;
+        polarBearBreedingTicks = getInt("mobs.polar_bear.breeding-delay-ticks", polarBearBreedingTicks);
     }
 
     public boolean pufferfishRidable = false;
@@ -1256,6 +1290,7 @@ public class PurpurWorldConfig {
     public double rabbitMaxHealth = 3.0D;
     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);
@@ -1267,6 +1302,7 @@ public class PurpurWorldConfig {
         rabbitMaxHealth = getDouble("mobs.rabbit.attributes.max_health", rabbitMaxHealth);
         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;
@@ -1298,6 +1334,7 @@ public class PurpurWorldConfig {
     public boolean sheepRidable = false;
     public boolean sheepRidableInWater = false;
     public double sheepMaxHealth = 8.0D;
+    public int sheepBreedingTicks = 6000;
     private void sheepSettings() {
         sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable);
         sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater);
@@ -1307,6 +1344,7 @@ public class PurpurWorldConfig {
             set("mobs.sheep.attributes.max_health", oldValue);
         }
         sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth);
+        sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks);
     }
 
     public boolean shulkerRidable = false;
@@ -1461,6 +1499,7 @@ public class PurpurWorldConfig {
     public boolean striderRidable = false;
     public boolean striderRidableInWater = false;
     public double striderMaxHealth = 20.0D;
+    public int striderBreedingTicks = 6000;
     private void striderSettings() {
         striderRidable = getBoolean("mobs.strider.ridable", striderRidable);
         striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater);
@@ -1470,6 +1509,7 @@ public class PurpurWorldConfig {
             set("mobs.strider.attributes.max_health", oldValue);
         }
         striderMaxHealth = getDouble("mobs.strider.attributes.max_health", striderMaxHealth);
+        striderBreedingTicks = getInt("mobs.strider.breeding-delay-ticks", striderBreedingTicks);
     }
 
     public boolean traderLlamaRidable = false;
@@ -1480,6 +1520,7 @@ public class PurpurWorldConfig {
     public double traderLlamaJumpStrengthMax = 0.5D;
     public double traderLlamaMovementSpeedMin = 0.175D;
     public double traderLlamaMovementSpeedMax = 0.175D;
+    public int traderLlamaBreedingTicks = 6000;
     private void traderLlamaSettings() {
         traderLlamaRidable = getBoolean("mobs.trader_llama.ridable", traderLlamaRidable);
         traderLlamaRidableInWater = getBoolean("mobs.trader_llama.ridable-in-water", traderLlamaRidableInWater);
@@ -1496,6 +1537,7 @@ public class PurpurWorldConfig {
         traderLlamaJumpStrengthMax = getDouble("mobs.trader_llama.attributes.jump_strength.max", traderLlamaJumpStrengthMax);
         traderLlamaMovementSpeedMin = getDouble("mobs.trader_llama.attributes.movement_speed.min", traderLlamaMovementSpeedMin);
         traderLlamaMovementSpeedMax = getDouble("mobs.trader_llama.attributes.movement_speed.max", traderLlamaMovementSpeedMax);
+        traderLlamaBreedingTicks = getInt("mobs.trader_llama.breeding-delay-ticks", traderLlamaBreedingTicks);
     }
 
     public boolean tropicalFishRidable = false;
@@ -1516,6 +1558,7 @@ public class PurpurWorldConfig {
     public boolean turtleEggsBreakFromExpOrbs = true;
     public boolean turtleEggsBreakFromItems = true;
     public boolean turtleEggsBreakFromMinecarts = true;
+    public int turtleBreedingTicks = 6000;
     private void turtleEggSettings() {
         turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable);
         turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater);
@@ -1528,6 +1571,7 @@ public class PurpurWorldConfig {
         turtleEggsBreakFromExpOrbs = getBoolean("blocks.turtle_egg.break-from-exp-orbs", turtleEggsBreakFromExpOrbs);
         turtleEggsBreakFromItems = getBoolean("blocks.turtle_egg.break-from-items", turtleEggsBreakFromItems);
         turtleEggsBreakFromMinecarts = getBoolean("blocks.turtle_egg.break-from-minecarts", turtleEggsBreakFromMinecarts);
+        turtleBreedingTicks = getInt("mobs.turtle.breeding-delay-ticks", turtleBreedingTicks);
     }
 
     public boolean vexRidable = false;
@@ -1556,6 +1600,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);
@@ -1572,6 +1617,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 vindicatorRidable = false;
@@ -1663,6 +1709,7 @@ public class PurpurWorldConfig {
     public boolean wolfRidable = false;
     public boolean wolfRidableInWater = false;
     public double wolfMaxHealth = 8.0D;
+    public int wolfBreedingTicks = 6000;
     private void wolfSettings() {
         wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable);
         wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater);
@@ -1672,6 +1719,7 @@ public class PurpurWorldConfig {
             set("mobs.wolf.attributes.max_health", oldValue);
         }
         wolfMaxHealth = getDouble("mobs.wolf.attributes.max_health", wolfMaxHealth);
+        wolfBreedingTicks = getInt("mobs.wolf.breeding-delay-ticks", wolfBreedingTicks);
     }
 
     public boolean zoglinRidable = false;
