From fb602e72eb7860a5d8e61aa95be056c9327fafdf Mon Sep 17 00:00:00 2001 From: granny Date: Thu, 9 Jan 2025 20:19:07 -0800 Subject: [PATCH] port Make entity breeding times configurable patch --- ...e-entity-breeding-times-configurable.patch | 1014 ----------------- ...e-entity-breeding-times-configurable.patch | 598 ++++++++++ .../purpurmc/purpur/PurpurWorldConfig.java | 56 + 3 files changed, 654 insertions(+), 1014 deletions(-) delete mode 100644 patches/server/0097-Make-entity-breeding-times-configurable.patch create mode 100644 purpur-server/minecraft-patches/features/0013-Make-entity-breeding-times-configurable.patch diff --git a/patches/server/0097-Make-entity-breeding-times-configurable.patch b/patches/server/0097-Make-entity-breeding-times-configurable.patch deleted file mode 100644 index a7391a6fb..000000000 --- a/patches/server/0097-Make-entity-breeding-times-configurable.patch +++ /dev/null @@ -1,1014 +0,0 @@ -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/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java b/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java -index 0a608418f87b71d5d71706712e1f82da0d7e4d34..03e7ca83e4c28dfaa5b52bcb100bd542db105970 100644 ---- a/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java -+++ b/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java -@@ -125,8 +125,10 @@ public class VillagerMakeLove extends Behavior { - return Optional.empty(); - } - // Move age setting down -- parent.setAge(6000); -- partner.setAge(6000); -+ // Purpur start -+ parent.setAge(world.purpurConfig.villagerBreedingTicks); -+ partner.setAge(world.purpurConfig.villagerBreedingTicks); -+ // Purpur end - world.addFreshEntityWithPassengers(entityvillager2, CreatureSpawnEvent.SpawnReason.BREEDING); - // CraftBukkit end - world.broadcastEntityEvent(entityvillager2, (byte) 12); -diff --git a/net/minecraft/world/entity/animal/Animal.java b/net/minecraft/world/entity/animal/Animal.java -index 4637d062b6a4c4d6de2ef54ec3cfdeb4344ff38e..8df1682dca61b0f771a1c08f5bcd797506badf19 100644 ---- a/net/minecraft/world/entity/animal/Animal.java -+++ b/net/minecraft/world/entity/animal/Animal.java -@@ -49,6 +49,7 @@ public abstract class Animal extends AgeableMob { - @Nullable - public UUID loveCause; - public ItemStack breedItem; // CraftBukkit - Add breedItem variable -+ public abstract int getPurpurBreedTime(); // Purpur - Make entity breeding times configurable - - protected Animal(EntityType type, Level world) { - super(type, world); -@@ -302,8 +303,10 @@ public abstract class Animal extends AgeableMob { - entityplayer.awardStat(Stats.ANIMALS_BRED); - CriteriaTriggers.BRED_ANIMALS.trigger(entityplayer, this, entityanimal, entityageable); - } // Paper -- this.setAge(6000); -- entityanimal.setAge(6000); -+ // Purpur start - Make entity breeding times configurable -+ this.setAge(this.getPurpurBreedTime()); -+ entityanimal.setAge(entityanimal.getPurpurBreedTime()); -+ // Purpur end - Make entity breeding times configurable - this.resetLove(); - entityanimal.resetLove(); - worldserver.broadcastEntityEvent(this, (byte) 18); -diff --git a/net/minecraft/world/entity/animal/Bee.java b/net/minecraft/world/entity/animal/Bee.java -index 8751cc882f2dcbf6dfc10cebab9d9a4f95ebfb10..121a4c58d4052eb0880f540e87beaf12a74eecd7 100644 ---- a/net/minecraft/world/entity/animal/Bee.java -+++ b/net/minecraft/world/entity/animal/Bee.java -@@ -496,6 +496,12 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { - this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.beeScale); - } - // Purpur end - Configurable entity base attributes -+ // Purpur start - Make entity breeding times configurable -+ @Override -+ public int getPurpurBreedTime() { -+ return this.level().purpurConfig.beeBreedingTicks; -+ } -+ // Purpur end - Make entity breeding times configurable - @Override - public int getRemainingPersistentAngerTime() { - return (Integer) this.entityData.get(Bee.DATA_REMAINING_ANGER_TIME); -diff --git a/net/minecraft/world/entity/animal/Cat.java b/net/minecraft/world/entity/animal/Cat.java -index b4f022093a52c1fe13ad67ad70d57fd0278a9d55..06b68fcf750a637e1f41eecacca2969cb55a8fa8 100644 ---- a/net/minecraft/world/entity/animal/Cat.java -+++ b/net/minecraft/world/entity/animal/Cat.java -@@ -132,6 +132,12 @@ public class Cat extends TamableAnimal implements VariantHolder { -diff --git a/net/minecraft/world/entity/animal/Chicken.java b/net/minecraft/world/entity/animal/Chicken.java -index f6f7afc6a421022738f77e5eece193ad15de78ba..d06fb7d714efc88af13e6357536d4c58a7ec3bb5 100644 ---- a/net/minecraft/world/entity/animal/Chicken.java -+++ b/net/minecraft/world/entity/animal/Chicken.java -@@ -82,6 +82,12 @@ public class Chicken extends Animal { - // Purpur end - Chickens can retaliate - } - // Purpur end - Configurable entity base attributes -+ // Purpur start - Make entity breeding times configurable -+ @Override -+ public int getPurpurBreedTime() { -+ return this.level().purpurConfig.chickenBreedingTicks; -+ } -+ // Purpur end - Make entity breeding times configurable - @Override - protected void registerGoals() { - this.goalSelector.addGoal(0, new FloatGoal(this)); -diff --git a/net/minecraft/world/entity/animal/Cow.java b/net/minecraft/world/entity/animal/Cow.java -index 88dd147317e200a11eb6a7e496bfffee9079fd6f..4b27440624deda151f63f7ce4670fd805d24eaba 100644 ---- a/net/minecraft/world/entity/animal/Cow.java -+++ b/net/minecraft/world/entity/animal/Cow.java -@@ -68,6 +68,12 @@ public class Cow extends Animal { - this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.cowScale); - } - // Purpur end - Configurable entity base attributes -+ // Purpur start - Make entity breeding times configurable -+ @Override -+ public int getPurpurBreedTime() { -+ return this.level().purpurConfig.cowBreedingTicks; -+ } -+ // Purpur end - Make entity breeding times configurable - @Override - protected void registerGoals() { - this.goalSelector.addGoal(0, new FloatGoal(this)); -diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java -index a0adc29bb09a3eaecdaf564fd992b8aefec69629..ce597675e973eb0d7ce580a2b4dfd76e7bb586b1 100644 ---- a/net/minecraft/world/entity/animal/Fox.java -+++ b/net/minecraft/world/entity/animal/Fox.java -@@ -189,6 +189,12 @@ public class Fox extends Animal implements VariantHolder { - this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.foxScale); - } - // Purpur end - Configurable entity base attributes -+ // Purpur start - Make entity breeding times configurable -+ @Override -+ public int getPurpurBreedTime() { -+ return this.level().purpurConfig.foxBreedingTicks; -+ } -+ // Purpur end - Make entity breeding times configurable - @Override - protected void defineSynchedData(SynchedEntityData.Builder builder) { - super.defineSynchedData(builder); -@@ -977,8 +983,10 @@ public class Fox extends Animal implements VariantHolder { - CriteriaTriggers.BRED_ANIMALS.trigger(entityplayer2, this.animal, this.partner, entityfox); - } - -- this.animal.setAge(6000); -- this.partner.setAge(6000); -+ // Purpur start - Make entity breeding times configurable -+ this.animal.setAge(this.animal.getPurpurBreedTime()); -+ this.partner.setAge(this.partner.getPurpurBreedTime()); -+ // Purpur end - Make entity breeding times configurable - this.animal.resetLove(); - this.partner.resetLove(); - worldserver.addFreshEntityWithPassengers(entityfox, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); // CraftBukkit - added SpawnReason -diff --git a/net/minecraft/world/entity/animal/MushroomCow.java b/net/minecraft/world/entity/animal/MushroomCow.java -index 96078cf11f13c85a3f019f70fa02668c43dbc559..28b544f4f2e0f30d831b57167fc3ea3ce28e2191 100644 ---- a/net/minecraft/world/entity/animal/MushroomCow.java -+++ b/net/minecraft/world/entity/animal/MushroomCow.java -@@ -87,6 +87,12 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder { - this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.rabbitScale); - } - // Purpur end - Configurable entity base attributes -+ // Purpur start - Make entity breeding times configurable -+ @Override -+ public int getPurpurBreedTime() { -+ return this.level().purpurConfig.rabbitBreedingTicks; -+ } -+ // Purpur end - Make entity breeding times configurable - @Override - public void registerGoals() { - this.goalSelector.addGoal(1, new FloatGoal(this)); -diff --git a/net/minecraft/world/entity/animal/Sheep.java b/net/minecraft/world/entity/animal/Sheep.java -index 3fd84abe0889b224c7c8d5af06b384d2fb431eb4..761ff22d66a191ab4c38d872e65afc2ee70f233d 100644 ---- a/net/minecraft/world/entity/animal/Sheep.java -+++ b/net/minecraft/world/entity/animal/Sheep.java -@@ -108,6 +108,12 @@ public class Sheep extends Animal implements Shearable { - this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.sheepScale); - } - // Purpur end - Configurable entity base attributes -+ // Purpur start - Make entity breeding times configurable -+ @Override -+ public int getPurpurBreedTime() { -+ return this.level().purpurConfig.sheepBreedingTicks; -+ } -+ // Purpur end - Make entity breeding times configurable - @Override - protected void registerGoals() { - this.eatBlockGoal = new EatBlockGoal(this); -diff --git a/net/minecraft/world/entity/animal/Turtle.java b/net/minecraft/world/entity/animal/Turtle.java -index 2133b8a2615be6502bf9d7b4d4c1bc75929b5022..0a29ce3a783a5bcadfd386927f176457596882ce 100644 ---- a/net/minecraft/world/entity/animal/Turtle.java -+++ b/net/minecraft/world/entity/animal/Turtle.java -@@ -110,6 +110,12 @@ public class Turtle extends Animal { - this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.turtleScale); - } - // Purpur end - Configurable entity base attributes -+ // Purpur start - Make entity breeding times configurable -+ @Override -+ public int getPurpurBreedTime() { -+ return this.level().purpurConfig.turtleBreedingTicks; -+ } -+ // Purpur end - Make entity breeding times configurable - public void setHomePos(BlockPos pos) { - this.entityData.set(Turtle.HOME_POS, pos); - } -diff --git a/net/minecraft/world/entity/animal/Wolf.java b/net/minecraft/world/entity/animal/Wolf.java -index d86bad821e781d698cc2bf0b3179eb4d2ed065b1..539eba7148be12eb05c907ed86b0cea975424874 100644 ---- a/net/minecraft/world/entity/animal/Wolf.java -+++ b/net/minecraft/world/entity/animal/Wolf.java -@@ -153,6 +153,12 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder, B - this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.axolotlScale); - } - // Purpur end - Configurable entity base attributes -+ // Purpur start - Make entity breeding times configurable -+ @Override -+ public int getPurpurBreedTime() { -+ return this.level().purpurConfig.axolotlBreedingTicks; -+ } -+ // Purpur end - Make entity breeding times configurable - @Override - public float getWalkTargetValue(BlockPos pos, LevelReader world) { - return 0.0F; -diff --git a/net/minecraft/world/entity/animal/camel/Camel.java b/net/minecraft/world/entity/animal/camel/Camel.java -index ab0b90c300d0610e423abe7ac9e5b93305a21c5a..d0023e3734bb3c625fa53077f47039dcb82d9606 100644 ---- a/net/minecraft/world/entity/animal/camel/Camel.java -+++ b/net/minecraft/world/entity/animal/camel/Camel.java -@@ -94,6 +94,12 @@ public class Camel extends AbstractHorse { - } - // Purpur end - Ridables - -+ // Purpur start - Make entity breeding times configurable -+ @Override -+ public int getPurpurBreedTime() { -+ return this.level().purpurConfig.camelBreedingTicks; -+ } -+ // Purpur end - Make entity breeding times configurable - @Override - public void addAdditionalSaveData(CompoundTag nbt) { - super.addAdditionalSaveData(nbt); -diff --git a/net/minecraft/world/entity/animal/frog/Frog.java b/net/minecraft/world/entity/animal/frog/Frog.java -index b42e1e1749c9f18b3bf842517522e90ba60330ff..e862803b38aceec149da8deddb9c88c46e916ad6 100644 ---- a/net/minecraft/world/entity/animal/frog/Frog.java -+++ b/net/minecraft/world/entity/animal/frog/Frog.java -@@ -165,6 +165,12 @@ public class Frog extends Animal implements VariantHolder> { - } - // Purpur end - Ridables - -+ // Purpur start - Make entity breeding times configurable -+ @Override -+ public int getPurpurBreedTime() { -+ return this.level().purpurConfig.frogBreedingTicks; -+ } -+ // Purpur end - Make entity breeding times configurable - @Override - protected Brain.Provider brainProvider() { - return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); -diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java -index 307d11e5ad6d0b47af36b1469a73ae1caa100232..c9d7be823a040e7de407537d247062821dca643a 100644 ---- a/net/minecraft/world/entity/animal/goat/Goat.java -+++ b/net/minecraft/world/entity/animal/goat/Goat.java -@@ -110,6 +110,12 @@ public class Goat extends Animal { - } - // Purpur end - Ridables - -+ // Purpur start - Make entity breeding times configurable -+ @Override -+ public int getPurpurBreedTime() { -+ return this.level().purpurConfig.goatBreedingTicks; -+ } -+ // Purpur end - Make entity breeding times configurable - @Override - protected Brain.Provider brainProvider() { - return Brain.provider(Goat.MEMORY_TYPES, Goat.SENSOR_TYPES); -diff --git a/net/minecraft/world/entity/animal/horse/Donkey.java b/net/minecraft/world/entity/animal/horse/Donkey.java -index 8fd709bcd4c7a5a875bdc65fd4dd1420ea618e3a..4cff4fcedc75a99ca71ae6a7c34d6f407665bf1b 100644 ---- a/net/minecraft/world/entity/animal/horse/Donkey.java -+++ b/net/minecraft/world/entity/animal/horse/Donkey.java -@@ -39,6 +39,12 @@ public class Donkey extends AbstractChestedHorse { - return generateSpeed(this.level().purpurConfig.donkeyMovementSpeedMin, this.level().purpurConfig.donkeyMovementSpeedMax); - } - // Purpur end - Configurable entity base attributes -+ // Purpur start - Make entity breeding times configurable -+ @Override -+ public int getPurpurBreedTime() { -+ return this.level().purpurConfig.donkeyBreedingTicks; -+ } -+ // Purpur end - Make entity breeding times configurable - @Override - protected SoundEvent getAmbientSound() { - return SoundEvents.DONKEY_AMBIENT; -diff --git a/net/minecraft/world/entity/animal/horse/Horse.java b/net/minecraft/world/entity/animal/horse/Horse.java -index 13056a0a13eeb3dcc164344b973e6ff656c0793d..cbeb7d1e834a4f0f120248bec619e34ca46f8069 100644 ---- a/net/minecraft/world/entity/animal/horse/Horse.java -+++ b/net/minecraft/world/entity/animal/horse/Horse.java -@@ -66,6 +66,12 @@ public class Horse extends AbstractHorse implements VariantHolder { - return generateSpeed(this.level().purpurConfig.horseMovementSpeedMin, this.level().purpurConfig.horseMovementSpeedMax); - } - // Purpur end - Configurable entity base attributes -+ // Purpur start - Make entity breeding times configurable -+ @Override -+ public int getPurpurBreedTime() { -+ return this.level().purpurConfig.horseBreedingTicks; -+ } -+ // Purpur end - Make entity breeding times configurable - @Override - protected void randomizeAttributes(RandomSource random) { - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)generateMaxHealth(random::nextInt)); -diff --git a/net/minecraft/world/entity/animal/horse/Llama.java b/net/minecraft/world/entity/animal/horse/Llama.java -index cbab482bd44c0a0fa82a80f41fdfd8c124c58c43..ea396b5740ae1e7b2cf5356607835467b412d379 100644 ---- a/net/minecraft/world/entity/animal/horse/Llama.java -+++ b/net/minecraft/world/entity/animal/horse/Llama.java -@@ -140,6 +140,12 @@ public class Llama extends AbstractChestedHorse implements VariantHolder type, LevelAccessor world, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random) { - BlockPos.MutableBlockPos blockposition_mutableblockposition = pos.mutable(); - -diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 476dcc613f566d88273f195b847e6b4dec777e44..d7bef344f1d18aa6037b3805da07353c54c82142 100644 ---- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java -+++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -100,6 +100,12 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { - this.timeInOverworld = timeInOverworld; - } - -+ // Purpur start - Make entity breeding times configurable -+ @Override -+ public int getPurpurBreedTime() { -+ return this.level().purpurConfig.hoglinBreedingTicks; -+ } -+ // Purpur end - Make entity breeding times configurable - @Override - public boolean canBeLeashed() { - return true; -diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6805a2f2803bb4e859afba5369308dd4d2ac5165..e363a93bdfcef7408ecdd5618b63c345ab9525b4 100644 ---- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -463,23 +463,27 @@ public class PurpurWorldConfig { - public boolean armadilloControllable = true; - public double armadilloMaxHealth = 12.0D; - public double armadilloScale = 1.0D; -+ public int armadilloBreedingTicks = 6000; - private void armadilloSettings() { - armadilloRidable = getBoolean("mobs.armadillo.ridable", armadilloRidable); - armadilloRidableInWater = getBoolean("mobs.armadillo.ridable-in-water", armadilloRidableInWater); - armadilloControllable = getBoolean("mobs.armadillo.controllable", armadilloControllable); - armadilloMaxHealth = getDouble("mobs.armadillo.attributes.max_health", armadilloMaxHealth); - armadilloScale = Mth.clamp(getDouble("mobs.armadillo.attributes.scale", armadilloScale), 0.0625D, 16.0D); -+ armadilloBreedingTicks = getInt("mobs.armadillo.breeding-delay-ticks", armadilloBreedingTicks); - } - - public boolean axolotlRidable = false; - public boolean axolotlControllable = true; - public double axolotlMaxHealth = 14.0D; - public double axolotlScale = 1.0D; -+ public int axolotlBreedingTicks = 6000; - private void axolotlSettings() { - axolotlRidable = getBoolean("mobs.axolotl.ridable", axolotlRidable); - axolotlControllable = getBoolean("mobs.axolotl.controllable", axolotlControllable); - axolotlMaxHealth = getDouble("mobs.axolotl.attributes.max_health", axolotlMaxHealth); - axolotlScale = Mth.clamp(getDouble("mobs.axolotl.attributes.scale", axolotlScale), 0.0625D, 16.0D); -+ axolotlBreedingTicks = getInt("mobs.axolotl.breeding-delay-ticks", axolotlBreedingTicks); - } - - public boolean batRidable = false; -@@ -522,6 +526,7 @@ public class PurpurWorldConfig { - public double beeMaxY = 320D; - public double beeMaxHealth = 10.0D; - public double beeScale = 1.0D; -+ public int beeBreedingTicks = 6000; - private void beeSettings() { - beeRidable = getBoolean("mobs.bee.ridable", beeRidable); - beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -534,6 +539,7 @@ public class PurpurWorldConfig { - } - beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth); - beeScale = Mth.clamp(getDouble("mobs.bee.attributes.scale", beeScale), 0.0625D, 16.0D); -+ beeBreedingTicks = getInt("mobs.bee.breeding-delay-ticks", beeBreedingTicks); - } - - public boolean blazeRidable = false; -@@ -576,6 +582,7 @@ public class PurpurWorldConfig { - public double camelJumpStrengthMax = 0.42D; - public double camelMovementSpeedMin = 0.09D; - public double camelMovementSpeedMax = 0.09D; -+ public int camelBreedingTicks = 6000; - private void camelSettings() { - camelRidableInWater = getBoolean("mobs.camel.ridable-in-water", camelRidableInWater); - camelMaxHealthMin = getDouble("mobs.camel.attributes.max_health.min", camelMaxHealthMin); -@@ -584,6 +591,7 @@ public class PurpurWorldConfig { - camelJumpStrengthMax = getDouble("mobs.camel.attributes.jump_strength.max", camelJumpStrengthMax); - camelMovementSpeedMin = getDouble("mobs.camel.attributes.movement_speed.min", camelMovementSpeedMin); - camelMovementSpeedMax = getDouble("mobs.camel.attributes.movement_speed.max", camelMovementSpeedMax); -+ camelBreedingTicks = getInt("mobs.camel.breeding-delay-ticks", camelBreedingTicks); - } - - public boolean catRidable = false; -@@ -594,6 +602,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); -@@ -608,6 +617,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; -@@ -634,6 +644,7 @@ public class PurpurWorldConfig { - public double chickenMaxHealth = 4.0D; - public double chickenScale = 1.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); -@@ -646,6 +657,7 @@ public class PurpurWorldConfig { - chickenMaxHealth = getDouble("mobs.chicken.attributes.max_health", chickenMaxHealth); - chickenScale = Mth.clamp(getDouble("mobs.chicken.attributes.scale", chickenScale), 0.0625D, 16.0D); - chickenRetaliate = getBoolean("mobs.chicken.retaliate", chickenRetaliate); -+ chickenBreedingTicks = getInt("mobs.chicken.breeding-delay-ticks", chickenBreedingTicks); - } - - public boolean codRidable = false; -@@ -670,6 +682,7 @@ public class PurpurWorldConfig { - public double cowMaxHealth = 10.0D; - public double cowScale = 1.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); -@@ -682,6 +695,7 @@ public class PurpurWorldConfig { - cowMaxHealth = getDouble("mobs.cow.attributes.max_health", cowMaxHealth); - cowScale = Mth.clamp(getDouble("mobs.cow.attributes.scale", cowScale), 0.0625D, 16.0D); - cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms); -+ cowBreedingTicks = getInt("mobs.cow.breeding-delay-ticks", cowBreedingTicks); - } - - public boolean creakingRidable = false; -@@ -750,6 +764,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) { -@@ -765,6 +780,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; -@@ -895,6 +911,7 @@ public class PurpurWorldConfig { - public double foxMaxHealth = 10.0D; - public double foxScale = 1.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); -@@ -907,17 +924,20 @@ public class PurpurWorldConfig { - foxMaxHealth = getDouble("mobs.fox.attributes.max_health", foxMaxHealth); - foxScale = Mth.clamp(getDouble("mobs.fox.attributes.scale", foxScale), 0.0625D, 16.0D); - foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips); -+ foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks); - } - - public boolean frogRidable = false; - public boolean frogRidableInWater = true; - public boolean frogControllable = true; - public float frogRidableJumpHeight = 0.65F; -+ public int frogBreedingTicks = 6000; - private void frogSettings() { - frogRidable = getBoolean("mobs.frog.ridable", frogRidable); - frogRidableInWater = getBoolean("mobs.frog.ridable-in-water", frogRidableInWater); - frogControllable = getBoolean("mobs.frog.controllable", frogControllable); - frogRidableJumpHeight = (float) getDouble("mobs.frog.ridable-jump-height", frogRidableJumpHeight); -+ frogBreedingTicks = getInt("mobs.frog.breeding-delay-ticks", frogBreedingTicks); - } - - public boolean ghastRidable = false; -@@ -992,12 +1012,14 @@ public class PurpurWorldConfig { - public boolean goatControllable = true; - public double goatMaxHealth = 10.0D; - public double goatScale = 1.0D; -+ public int goatBreedingTicks = 6000; - private void goatSettings() { - goatRidable = getBoolean("mobs.goat.ridable", goatRidable); - goatRidableInWater = getBoolean("mobs.goat.ridable-in-water", goatRidableInWater); - goatControllable = getBoolean("mobs.goat.controllable", goatControllable); - goatMaxHealth = getDouble("mobs.goat.attributes.max_health", goatMaxHealth); - goatScale = Mth.clamp(getDouble("mobs.goat.attributes.scale", goatScale), 0.0625D, 16.0D); -+ goatBreedingTicks = getInt("mobs.goat.breeding-delay-ticks", goatBreedingTicks); - } - - public boolean guardianRidable = false; -@@ -1021,6 +1043,7 @@ public class PurpurWorldConfig { - public boolean hoglinControllable = true; - public double hoglinMaxHealth = 40.0D; - public double hoglinScale = 1.0D; -+ public int hoglinBreedingTicks = 6000; - private void hoglinSettings() { - hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable); - hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater); -@@ -1032,6 +1055,7 @@ public class PurpurWorldConfig { - } - hoglinMaxHealth = getDouble("mobs.hoglin.attributes.max_health", hoglinMaxHealth); - hoglinScale = Mth.clamp(getDouble("mobs.hoglin.attributes.scale", hoglinScale), 0.0625D, 16.0D); -+ hoglinBreedingTicks = getInt("mobs.hoglin.breeding-delay-ticks", hoglinBreedingTicks); - } - - public boolean horseRidableInWater = false; -@@ -1041,6 +1065,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) { -@@ -1056,6 +1081,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; -@@ -1139,6 +1165,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); -@@ -1156,6 +1183,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; -@@ -1185,6 +1213,7 @@ public class PurpurWorldConfig { - public boolean mooshroomControllable = true; - public double mooshroomMaxHealth = 10.0D; - public double mooshroomScale = 1.0D; -+ public int mooshroomBreedingTicks = 6000; - private void mooshroomSettings() { - mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable); - mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater); -@@ -1196,6 +1225,7 @@ public class PurpurWorldConfig { - } - mooshroomMaxHealth = getDouble("mobs.mooshroom.attributes.max_health", mooshroomMaxHealth); - mooshroomScale = Mth.clamp(getDouble("mobs.mooshroom.attributes.scale", mooshroomScale), 0.0625D, 16.0D); -+ mooshroomBreedingTicks = getInt("mobs.mooshroom.breeding-delay-ticks", mooshroomBreedingTicks); - } - - public boolean muleRidableInWater = false; -@@ -1205,6 +1235,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) { -@@ -1220,6 +1251,7 @@ 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; -@@ -1227,6 +1259,7 @@ public class PurpurWorldConfig { - public boolean ocelotControllable = true; - public double ocelotMaxHealth = 10.0D; - public double ocelotScale = 1.0D; -+ public int ocelotBreedingTicks = 6000; - private void ocelotSettings() { - ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable); - ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater); -@@ -1238,6 +1271,7 @@ public class PurpurWorldConfig { - } - ocelotMaxHealth = getDouble("mobs.ocelot.attributes.max_health", ocelotMaxHealth); - ocelotScale = Mth.clamp(getDouble("mobs.ocelot.attributes.scale", ocelotScale), 0.0625D, 16.0D); -+ ocelotBreedingTicks = getInt("mobs.ocelot.breeding-delay-ticks", ocelotBreedingTicks); - } - - public boolean pandaRidable = false; -@@ -1245,6 +1279,7 @@ public class PurpurWorldConfig { - public boolean pandaControllable = true; - public double pandaMaxHealth = 20.0D; - public double pandaScale = 1.0D; -+ public int pandaBreedingTicks = 6000; - private void pandaSettings() { - pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable); - pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater); -@@ -1256,6 +1291,7 @@ public class PurpurWorldConfig { - } - pandaMaxHealth = getDouble("mobs.panda.attributes.max_health", pandaMaxHealth); - pandaScale = Mth.clamp(getDouble("mobs.panda.attributes.scale", pandaScale), 0.0625D, 16.0D); -+ pandaBreedingTicks = getInt("mobs.panda.breeding-delay-ticks", pandaBreedingTicks); - } - - public boolean parrotRidable = false; -@@ -1342,6 +1378,7 @@ public class PurpurWorldConfig { - public double pigMaxHealth = 10.0D; - public double pigScale = 1.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); -@@ -1354,6 +1391,7 @@ public class PurpurWorldConfig { - pigMaxHealth = getDouble("mobs.pig.attributes.max_health", pigMaxHealth); - pigScale = Mth.clamp(getDouble("mobs.pig.attributes.scale", pigScale), 0.0625D, 16.0D); - pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack); -+ pigBreedingTicks = getInt("mobs.pig.breeding-delay-ticks", pigBreedingTicks); - } - - public boolean piglinRidable = false; -@@ -1417,6 +1455,7 @@ public class PurpurWorldConfig { - public double polarBearScale = 1.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); -@@ -1431,6 +1470,7 @@ public class PurpurWorldConfig { - polarBearBreedableItemString = getString("mobs.polar_bear.breedable-item", polarBearBreedableItemString); - Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(polarBearBreedableItemString)); - if (item != Items.AIR) polarBearBreedableItem = item; -+ polarBearBreedingTicks = getInt("mobs.polar_bear.breeding-delay-ticks", polarBearBreedingTicks); - } - - public boolean pufferfishRidable = false; -@@ -1456,6 +1496,7 @@ public class PurpurWorldConfig { - public double rabbitScale = 1.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); -@@ -1469,6 +1510,7 @@ public class PurpurWorldConfig { - rabbitScale = Mth.clamp(getDouble("mobs.rabbit.attributes.scale", rabbitScale), 0.0625D, 16.0D); - 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; -@@ -1510,6 +1552,7 @@ public class PurpurWorldConfig { - public boolean sheepControllable = true; - public double sheepMaxHealth = 8.0D; - public double sheepScale = 1.0D; -+ public int sheepBreedingTicks = 6000; - private void sheepSettings() { - sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); - sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); -@@ -1521,6 +1564,7 @@ public class PurpurWorldConfig { - } - sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth); - sheepScale = Mth.clamp(getDouble("mobs.sheep.attributes.scale", sheepScale), 0.0625D, 16.0D); -+ sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks); - } - - public boolean shulkerRidable = false; -@@ -1657,12 +1701,14 @@ public class PurpurWorldConfig { - public boolean snifferControllable = true; - public double snifferMaxHealth = 14.0D; - public double snifferScale = 1.0D; -+ public int snifferBreedingTicks = 6000; - private void snifferSettings() { - snifferRidable = getBoolean("mobs.sniffer.ridable", snifferRidable); - snifferRidableInWater = getBoolean("mobs.sniffer.ridable-in-water", snifferRidableInWater); - snifferControllable = getBoolean("mobs.sniffer.controllable", snifferControllable); - snifferMaxHealth = getDouble("mobs.sniffer.attributes.max_health", snifferMaxHealth); - snifferScale = Mth.clamp(getDouble("mobs.sniffer.attributes.scale", snifferScale), 0.0625D, 16.0D); -+ snifferBreedingTicks = getInt("mobs.sniffer.breeding-delay-ticks", snifferBreedingTicks); - } - - public boolean squidRidable = false; -@@ -1728,6 +1774,7 @@ public class PurpurWorldConfig { - public boolean striderControllable = true; - public double striderMaxHealth = 20.0D; - public double striderScale = 1.0D; -+ public int striderBreedingTicks = 6000; - private void striderSettings() { - striderRidable = getBoolean("mobs.strider.ridable", striderRidable); - striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater); -@@ -1739,6 +1786,7 @@ public class PurpurWorldConfig { - } - striderMaxHealth = getDouble("mobs.strider.attributes.max_health", striderMaxHealth); - striderScale = Mth.clamp(getDouble("mobs.strider.attributes.scale", striderScale), 0.0625D, 16.0D); -+ striderBreedingTicks = getInt("mobs.strider.breeding-delay-ticks", striderBreedingTicks); - } - - public boolean tadpoleRidable = false; -@@ -1759,6 +1807,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); -@@ -1776,6 +1825,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; -@@ -1799,6 +1849,7 @@ public class PurpurWorldConfig { - public boolean turtleControllable = true; - public double turtleMaxHealth = 30.0D; - public double turtleScale = 1.0D; -+ public int turtleBreedingTicks = 6000; - private void turtleSettings() { - turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable); - turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater); -@@ -1810,6 +1861,7 @@ public class PurpurWorldConfig { - } - turtleMaxHealth = getDouble("mobs.turtle.attributes.max_health", turtleMaxHealth); - turtleScale = Mth.clamp(getDouble("mobs.turtle.attributes.scale", turtleScale), 0.0625D, 16.0D); -+ turtleBreedingTicks = getInt("mobs.turtle.breeding-delay-ticks", turtleBreedingTicks); - } - - public boolean vexRidable = false; -@@ -1841,6 +1893,7 @@ public class PurpurWorldConfig { - public double villagerTemptRange = 10.0D; - public boolean villagerCanBeLeashed = false; - 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); -@@ -1856,6 +1909,7 @@ public class PurpurWorldConfig { - villagerTemptRange = getDouble("mobs.villager.attributes.tempt_range", villagerTemptRange); - villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed); - villagerCanBreed = getBoolean("mobs.villager.can-breed", villagerCanBreed); -+ villagerBreedingTicks = getInt("mobs.villager.breeding-delay-ticks", villagerBreedingTicks); - } - - public boolean vindicatorRidable = false; -@@ -1980,6 +2034,7 @@ public class PurpurWorldConfig { - public boolean wolfControllable = true; - public double wolfMaxHealth = 8.0D; - public double wolfScale = 1.0D; -+ public int wolfBreedingTicks = 6000; - private void wolfSettings() { - wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); - wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); -@@ -1991,6 +2046,7 @@ public class PurpurWorldConfig { - } - wolfMaxHealth = getDouble("mobs.wolf.attributes.max_health", wolfMaxHealth); - wolfScale = Mth.clamp(getDouble("mobs.wolf.attributes.scale", wolfScale), 0.0625D, 16.0D); -+ wolfBreedingTicks = getInt("mobs.wolf.breeding-delay-ticks", wolfBreedingTicks); - } - - public boolean zoglinRidable = false; diff --git a/purpur-server/minecraft-patches/features/0013-Make-entity-breeding-times-configurable.patch b/purpur-server/minecraft-patches/features/0013-Make-entity-breeding-times-configurable.patch new file mode 100644 index 000000000..4a82a2eae --- /dev/null +++ b/purpur-server/minecraft-patches/features/0013-Make-entity-breeding-times-configurable.patch @@ -0,0 +1,598 @@ +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/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java b/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java +index 4fb63e58eac5d67fcd31c3233dca1dae72b98bc4..dd8d315eba203db121e24e3402f2117fc0f3043f 100644 +--- a/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java ++++ b/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java +@@ -118,8 +118,10 @@ public class VillagerMakeLove extends Behavior { + return Optional.empty(); + } + // Move age setting down +- parent.setAge(6000); +- partner.setAge(6000); ++ // Purpur start - Make entity breeding times configurable ++ parent.setAge(level.purpurConfig.villagerBreedingTicks); ++ partner.setAge(level.purpurConfig.villagerBreedingTicks); ++ // Purpur end - Make entity breeding times configurable + level.addFreshEntityWithPassengers(breedOffspring, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); + // CraftBukkit end + level.broadcastEntityEvent(breedOffspring, (byte)12); +diff --git a/net/minecraft/world/entity/animal/Animal.java b/net/minecraft/world/entity/animal/Animal.java +index 33c3752be451508343cad83766da7c3be1822d02..fa34e7f1c20dfd569b52a9c8e0a8d4d5e659ce20 100644 +--- a/net/minecraft/world/entity/animal/Animal.java ++++ b/net/minecraft/world/entity/animal/Animal.java +@@ -40,6 +40,7 @@ public abstract class Animal extends AgeableMob { + @Nullable + public UUID loveCause; + public ItemStack breedItem; // CraftBukkit - Add breedItem variable ++ public abstract int getPurpurBreedTime(); // Purpur - Make entity breeding times configurable + + protected Animal(EntityType entityType, Level level) { + super(entityType, level); +@@ -279,8 +280,10 @@ public abstract class Animal extends AgeableMob { + player.awardStat(Stats.ANIMALS_BRED); + CriteriaTriggers.BRED_ANIMALS.trigger(player, this, animal, baby); + } // Paper +- this.setAge(6000); +- animal.setAge(6000); ++ // Purpur start - Make entity breeding times configurable ++ this.setAge(this.getPurpurBreedTime()); ++ animal.setAge(animal.getPurpurBreedTime()); ++ // Purpur end - Make entity breeding times configurable + this.resetLove(); + animal.resetLove(); + level.broadcastEntityEvent(this, (byte)18); +diff --git a/net/minecraft/world/entity/animal/Bee.java b/net/minecraft/world/entity/animal/Bee.java +index bcf554054111f85b095341a5455856ee79f3ade6..62fbaed0f81b900730ab22b969ffd48d31a268ce 100644 +--- a/net/minecraft/world/entity/animal/Bee.java ++++ b/net/minecraft/world/entity/animal/Bee.java +@@ -479,6 +479,13 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { + } + // Purpur end - Configurable entity base attributes + ++ // Purpur start - Make entity breeding times configurable ++ @Override ++ public int getPurpurBreedTime() { ++ return this.level().purpurConfig.beeBreedingTicks; ++ } ++ // Purpur end - Make entity breeding times configurable ++ + @Override + public int getRemainingPersistentAngerTime() { + return this.entityData.get(DATA_REMAINING_ANGER_TIME); +diff --git a/net/minecraft/world/entity/animal/Cat.java b/net/minecraft/world/entity/animal/Cat.java +index 54a003df555a3146fe30de1f95fe2469dced9fb0..7a9792542a8bc4e142bb82e2cd75c6f7fbec8f8b 100644 +--- a/net/minecraft/world/entity/animal/Cat.java ++++ b/net/minecraft/world/entity/animal/Cat.java +@@ -126,6 +126,13 @@ public class Cat extends TamableAnimal implements VariantHolder itemStack.is(ItemTags.CAT_FOOD), true); +diff --git a/net/minecraft/world/entity/animal/Chicken.java b/net/minecraft/world/entity/animal/Chicken.java +index d718f0ed362c49803260dceed64bd93e2b6744fc..39ad1729ef03fc35a6365ee215be214eccfd959a 100644 +--- a/net/minecraft/world/entity/animal/Chicken.java ++++ b/net/minecraft/world/entity/animal/Chicken.java +@@ -81,6 +81,13 @@ public class Chicken extends Animal { + } + // Purpur end - Configurable entity base attributes + ++ // Purpur start - Make entity breeding times configurable ++ @Override ++ public int getPurpurBreedTime() { ++ return this.level().purpurConfig.chickenBreedingTicks; ++ } ++ // Purpur end - Make entity breeding times configurable ++ + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); +diff --git a/net/minecraft/world/entity/animal/Cow.java b/net/minecraft/world/entity/animal/Cow.java +index d2a4bfa5334f7361067e4adac36ba5a4a4fa6ad8..e4965300eb41512d03a0b111422c98627cf29a54 100644 +--- a/net/minecraft/world/entity/animal/Cow.java ++++ b/net/minecraft/world/entity/animal/Cow.java +@@ -63,6 +63,13 @@ public class Cow extends Animal { + } + // Purpur end - Configurable entity base attributes + ++ // Purpur start - Make entity breeding times configurable ++ @Override ++ public int getPurpurBreedTime() { ++ return this.level().purpurConfig.cowBreedingTicks; ++ } ++ // Purpur end - Make entity breeding times configurable ++ + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); +diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java +index 8bf893837586ae2a9b4ef7564d242e16e4863b5d..1acf9b8c9e6a5915b3f095e83d3f209708947093 100644 +--- a/net/minecraft/world/entity/animal/Fox.java ++++ b/net/minecraft/world/entity/animal/Fox.java +@@ -175,6 +175,13 @@ public class Fox extends Animal implements VariantHolder { + } + // Purpur end - Configurable entity base attributes + ++ // Purpur start - Make entity breeding times configurable ++ @Override ++ public int getPurpurBreedTime() { ++ return this.level().purpurConfig.foxBreedingTicks; ++ } ++ // Purpur end - Make entity breeding times configurable ++ + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); +@@ -969,8 +976,10 @@ public class Fox extends Animal implements VariantHolder { + CriteriaTriggers.BRED_ANIMALS.trigger(serverPlayer, this.animal, this.partner, fox); + } + +- this.animal.setAge(6000); +- this.partner.setAge(6000); ++ // Purpur start - Make entity breeding times configurable ++ this.animal.setAge(this.animal.getPurpurBreedTime()); ++ this.partner.setAge(this.partner.getPurpurBreedTime()); ++ // Purpur end - Make entity breeding times configurable + this.animal.resetLove(); + this.partner.resetLove(); + serverLevel.addFreshEntityWithPassengers(fox, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); // CraftBukkit - added SpawnReason +diff --git a/net/minecraft/world/entity/animal/MushroomCow.java b/net/minecraft/world/entity/animal/MushroomCow.java +index 990723c31aa1040a4e45b9857a18d86287ef91b4..a64b609bf5ce38a252bfa1bcff869f88e14389b5 100644 +--- a/net/minecraft/world/entity/animal/MushroomCow.java ++++ b/net/minecraft/world/entity/animal/MushroomCow.java +@@ -79,6 +79,13 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder { + } + // Purpur end - Configurable entity base attributes + ++ // Purpur start - Make entity breeding times configurable ++ @Override ++ public int getPurpurBreedTime() { ++ return this.level().purpurConfig.rabbitBreedingTicks; ++ } ++ // Purpur end - Make entity breeding times configurable ++ + @Override + public void registerGoals() { + this.goalSelector.addGoal(1, new FloatGoal(this)); +diff --git a/net/minecraft/world/entity/animal/Sheep.java b/net/minecraft/world/entity/animal/Sheep.java +index b66440f5cfbd714c6d2f5b7f66b4e755602b4521..882c799cb66a2acada33ff24f3adb7eb611f89c1 100644 +--- a/net/minecraft/world/entity/animal/Sheep.java ++++ b/net/minecraft/world/entity/animal/Sheep.java +@@ -106,6 +106,13 @@ public class Sheep extends Animal implements Shearable { + } + // Purpur end - Configurable entity base attributes + ++ // Purpur start - Make entity breeding times configurable ++ @Override ++ public int getPurpurBreedTime() { ++ return this.level().purpurConfig.sheepBreedingTicks; ++ } ++ // Purpur end - Make entity breeding times configurable ++ + @Override + protected void registerGoals() { + this.eatBlockGoal = new EatBlockGoal(this); +diff --git a/net/minecraft/world/entity/animal/Turtle.java b/net/minecraft/world/entity/animal/Turtle.java +index 4f0fbbb2caeda6d1477d3297fd68f802e4f3a9ca..edbccb7ca27aa8a1917eb8b35b3ba8600c91111a 100644 +--- a/net/minecraft/world/entity/animal/Turtle.java ++++ b/net/minecraft/world/entity/animal/Turtle.java +@@ -109,6 +109,13 @@ public class Turtle extends Animal { + } + // Purpur end - Configurable entity base attributes + ++ // Purpur start - Make entity breeding times configurable ++ @Override ++ public int getPurpurBreedTime() { ++ return this.level().purpurConfig.turtleBreedingTicks; ++ } ++ // Purpur end - Make entity breeding times configurable ++ + public void setHomePos(BlockPos homePos) { + this.entityData.set(HOME_POS, homePos); + } +diff --git a/net/minecraft/world/entity/animal/Wolf.java b/net/minecraft/world/entity/animal/Wolf.java +index 9768a336c260572022a140e95d0b0bf084dfc9e9..1bc9c1449ccc59d59ba40783958cfbaadbc2b9c1 100644 +--- a/net/minecraft/world/entity/animal/Wolf.java ++++ b/net/minecraft/world/entity/animal/Wolf.java +@@ -145,6 +145,13 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder, B + } + // Purpur end - Configurable entity base attributes + ++ // Purpur start - Make entity breeding times configurable ++ @Override ++ public int getPurpurBreedTime() { ++ return this.level().purpurConfig.axolotlBreedingTicks; ++ } ++ // Purpur end - Make entity breeding times configurable ++ + @Override + public float getWalkTargetValue(BlockPos pos, LevelReader level) { + return 0.0F; +diff --git a/net/minecraft/world/entity/animal/camel/Camel.java b/net/minecraft/world/entity/animal/camel/Camel.java +index 1d7e2358bac193af48dc4b7f5b0295e3bffa152b..1d7ae2a08968860636918e7c66b60139a9d761b4 100644 +--- a/net/minecraft/world/entity/animal/camel/Camel.java ++++ b/net/minecraft/world/entity/animal/camel/Camel.java +@@ -90,6 +90,13 @@ public class Camel extends AbstractHorse { + } + // Purpur end - Ridables + ++ // Purpur start - Make entity breeding times configurable ++ @Override ++ public int getPurpurBreedTime() { ++ return this.level().purpurConfig.camelBreedingTicks; ++ } ++ // Purpur end - Make entity breeding times configurable ++ + @Override + public void addAdditionalSaveData(CompoundTag compound) { + super.addAdditionalSaveData(compound); +diff --git a/net/minecraft/world/entity/animal/frog/Frog.java b/net/minecraft/world/entity/animal/frog/Frog.java +index 9a400c8bf2b54aa5fbcbe65b61670cac5fbebf05..c4ea9485294b7dec2582c638802f003ad70659b6 100644 +--- a/net/minecraft/world/entity/animal/frog/Frog.java ++++ b/net/minecraft/world/entity/animal/frog/Frog.java +@@ -165,6 +165,12 @@ public class Frog extends Animal implements VariantHolder> { + } + // Purpur end - Ridables + ++ // Purpur start - Make entity breeding times configurable ++ @Override ++ public int getPurpurBreedTime() { ++ return this.level().purpurConfig.frogBreedingTicks; ++ } ++ // Purpur end - Make entity breeding times configurable + @Override + protected Brain.Provider brainProvider() { + return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); +diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java +index 9924a39953fb49954d02c771ae1a51411226ceac..e7337eaa2813c30b92fd518f12ef4ba0c17ec6a3 100644 +--- a/net/minecraft/world/entity/animal/goat/Goat.java ++++ b/net/minecraft/world/entity/animal/goat/Goat.java +@@ -128,6 +128,12 @@ public class Goat extends Animal { + } + // Purpur end - Ridables + ++ // Purpur start - Make entity breeding times configurable ++ @Override ++ public int getPurpurBreedTime() { ++ return this.level().purpurConfig.goatBreedingTicks; ++ } ++ // Purpur end - Make entity breeding times configurable + @Override + protected Brain.Provider brainProvider() { + return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); +diff --git a/net/minecraft/world/entity/animal/horse/Donkey.java b/net/minecraft/world/entity/animal/horse/Donkey.java +index 223f1d109680e3643ab2c8343be22713e89755fd..b977597785df5665176ab2f330633ec61b7c9feb 100644 +--- a/net/minecraft/world/entity/animal/horse/Donkey.java ++++ b/net/minecraft/world/entity/animal/horse/Donkey.java +@@ -40,6 +40,13 @@ public class Donkey extends AbstractChestedHorse { + } + // Purpur end - Configurable entity base attributes + ++ // Purpur start - Make entity breeding times configurable ++ @Override ++ public int getPurpurBreedTime() { ++ return this.level().purpurConfig.donkeyBreedingTicks; ++ } ++ // Purpur end - Make entity breeding times configurable ++ + @Override + protected SoundEvent getAmbientSound() { + return SoundEvents.DONKEY_AMBIENT; +diff --git a/net/minecraft/world/entity/animal/horse/Horse.java b/net/minecraft/world/entity/animal/horse/Horse.java +index 8bd118e82da9e4d4153de0a3efaf6d69e3c4c540..0339ab08b3029a9ffc102c5b865e411aca2a863c 100644 +--- a/net/minecraft/world/entity/animal/horse/Horse.java ++++ b/net/minecraft/world/entity/animal/horse/Horse.java +@@ -67,6 +67,13 @@ public class Horse extends AbstractHorse implements VariantHolder { + } + // Purpur end - Configurable entity base attributes + ++ // Purpur start - Make entity breeding times configurable ++ @Override ++ public int getPurpurBreedTime() { ++ return this.level().purpurConfig.horseBreedingTicks; ++ } ++ // Purpur end - Make entity breeding times configurable ++ + @Override + protected void randomizeAttributes(RandomSource random) { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(generateMaxHealth(random::nextInt)); +diff --git a/net/minecraft/world/entity/animal/horse/Llama.java b/net/minecraft/world/entity/animal/horse/Llama.java +index 8b6beeff7ad0c7ca7bc09f505891f560096d5c9a..67413d7c1cbef72a9068b33ea69125315aa35565 100644 +--- a/net/minecraft/world/entity/animal/horse/Llama.java ++++ b/net/minecraft/world/entity/animal/horse/Llama.java +@@ -141,6 +141,13 @@ public class Llama extends AbstractChestedHorse implements VariantHolder entityType, LevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random + ) { +diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java +index 54924cd7c84cbcd22ffc0bd37fc24f24e73c18bc..b2edc0723a0d60801716cec31abf7403a06a903a 100644 +--- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java ++++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java +@@ -122,6 +122,12 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { + this.timeInOverworld = timeInOverworld; + } + ++ // Purpur start - Make entity breeding times configurable ++ @Override ++ public int getPurpurBreedTime() { ++ return this.level().purpurConfig.hoglinBreedingTicks; ++ } ++ // Purpur end - Make entity breeding times configurable + @Override + public boolean canBeLeashed() { + return true; diff --git a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index f1c09c202..8565e6f15 100644 --- a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -454,23 +454,27 @@ public class PurpurWorldConfig { public boolean armadilloControllable = true; public double armadilloMaxHealth = 12.0D; public double armadilloScale = 1.0D; + public int armadilloBreedingTicks = 6000; private void armadilloSettings() { armadilloRidable = getBoolean("mobs.armadillo.ridable", armadilloRidable); armadilloRidableInWater = getBoolean("mobs.armadillo.ridable-in-water", armadilloRidableInWater); armadilloControllable = getBoolean("mobs.armadillo.controllable", armadilloControllable); armadilloMaxHealth = getDouble("mobs.armadillo.attributes.max_health", armadilloMaxHealth); armadilloScale = Mth.clamp(getDouble("mobs.armadillo.attributes.scale", armadilloScale), 0.0625D, 16.0D); + armadilloBreedingTicks = getInt("mobs.armadillo.breeding-delay-ticks", armadilloBreedingTicks); } public boolean axolotlRidable = false; public boolean axolotlControllable = true; public double axolotlMaxHealth = 14.0D; public double axolotlScale = 1.0D; + public int axolotlBreedingTicks = 6000; private void axolotlSettings() { axolotlRidable = getBoolean("mobs.axolotl.ridable", axolotlRidable); axolotlControllable = getBoolean("mobs.axolotl.controllable", axolotlControllable); axolotlMaxHealth = getDouble("mobs.axolotl.attributes.max_health", axolotlMaxHealth); axolotlScale = Mth.clamp(getDouble("mobs.axolotl.attributes.scale", axolotlScale), 0.0625D, 16.0D); + axolotlBreedingTicks = getInt("mobs.axolotl.breeding-delay-ticks", axolotlBreedingTicks); } public boolean batRidable = false; @@ -513,6 +517,7 @@ public class PurpurWorldConfig { public double beeMaxY = 320D; public double beeMaxHealth = 10.0D; public double beeScale = 1.0D; + public int beeBreedingTicks = 6000; private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); @@ -525,6 +530,7 @@ public class PurpurWorldConfig { } beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth); beeScale = Mth.clamp(getDouble("mobs.bee.attributes.scale", beeScale), 0.0625D, 16.0D); + beeBreedingTicks = getInt("mobs.bee.breeding-delay-ticks", beeBreedingTicks); } public boolean blazeRidable = false; @@ -567,6 +573,7 @@ public class PurpurWorldConfig { public double camelJumpStrengthMax = 0.42D; public double camelMovementSpeedMin = 0.09D; public double camelMovementSpeedMax = 0.09D; + public int camelBreedingTicks = 6000; private void camelSettings() { camelRidableInWater = getBoolean("mobs.camel.ridable-in-water", camelRidableInWater); camelMaxHealthMin = getDouble("mobs.camel.attributes.max_health.min", camelMaxHealthMin); @@ -575,6 +582,7 @@ public class PurpurWorldConfig { camelJumpStrengthMax = getDouble("mobs.camel.attributes.jump_strength.max", camelJumpStrengthMax); camelMovementSpeedMin = getDouble("mobs.camel.attributes.movement_speed.min", camelMovementSpeedMin); camelMovementSpeedMax = getDouble("mobs.camel.attributes.movement_speed.max", camelMovementSpeedMax); + camelBreedingTicks = getInt("mobs.camel.breeding-delay-ticks", camelBreedingTicks); } public boolean catRidable = false; @@ -585,6 +593,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); @@ -599,6 +608,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; @@ -625,6 +635,7 @@ public class PurpurWorldConfig { public double chickenMaxHealth = 4.0D; public double chickenScale = 1.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); @@ -637,6 +648,7 @@ public class PurpurWorldConfig { chickenMaxHealth = getDouble("mobs.chicken.attributes.max_health", chickenMaxHealth); chickenScale = Mth.clamp(getDouble("mobs.chicken.attributes.scale", chickenScale), 0.0625D, 16.0D); chickenRetaliate = getBoolean("mobs.chicken.retaliate", chickenRetaliate); + chickenBreedingTicks = getInt("mobs.chicken.breeding-delay-ticks", chickenBreedingTicks); } public boolean codRidable = false; @@ -661,6 +673,7 @@ public class PurpurWorldConfig { public double cowMaxHealth = 10.0D; public double cowScale = 1.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); @@ -673,6 +686,7 @@ public class PurpurWorldConfig { cowMaxHealth = getDouble("mobs.cow.attributes.max_health", cowMaxHealth); cowScale = Mth.clamp(getDouble("mobs.cow.attributes.scale", cowScale), 0.0625D, 16.0D); cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms); + cowBreedingTicks = getInt("mobs.cow.breeding-delay-ticks", cowBreedingTicks); } public boolean creakingRidable = false; @@ -741,6 +755,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) { @@ -756,6 +771,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; @@ -886,6 +902,7 @@ public class PurpurWorldConfig { public double foxMaxHealth = 10.0D; public double foxScale = 1.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); @@ -898,17 +915,20 @@ public class PurpurWorldConfig { foxMaxHealth = getDouble("mobs.fox.attributes.max_health", foxMaxHealth); foxScale = Mth.clamp(getDouble("mobs.fox.attributes.scale", foxScale), 0.0625D, 16.0D); foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips); + foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks); } public boolean frogRidable = false; public boolean frogRidableInWater = true; public boolean frogControllable = true; public float frogRidableJumpHeight = 0.65F; + public int frogBreedingTicks = 6000; private void frogSettings() { frogRidable = getBoolean("mobs.frog.ridable", frogRidable); frogRidableInWater = getBoolean("mobs.frog.ridable-in-water", frogRidableInWater); frogControllable = getBoolean("mobs.frog.controllable", frogControllable); frogRidableJumpHeight = (float) getDouble("mobs.frog.ridable-jump-height", frogRidableJumpHeight); + frogBreedingTicks = getInt("mobs.frog.breeding-delay-ticks", frogBreedingTicks); } public boolean ghastRidable = false; @@ -983,12 +1003,14 @@ public class PurpurWorldConfig { public boolean goatControllable = true; public double goatMaxHealth = 10.0D; public double goatScale = 1.0D; + public int goatBreedingTicks = 6000; private void goatSettings() { goatRidable = getBoolean("mobs.goat.ridable", goatRidable); goatRidableInWater = getBoolean("mobs.goat.ridable-in-water", goatRidableInWater); goatControllable = getBoolean("mobs.goat.controllable", goatControllable); goatMaxHealth = getDouble("mobs.goat.attributes.max_health", goatMaxHealth); goatScale = Mth.clamp(getDouble("mobs.goat.attributes.scale", goatScale), 0.0625D, 16.0D); + goatBreedingTicks = getInt("mobs.goat.breeding-delay-ticks", goatBreedingTicks); } public boolean guardianRidable = false; @@ -1012,6 +1034,7 @@ public class PurpurWorldConfig { public boolean hoglinControllable = true; public double hoglinMaxHealth = 40.0D; public double hoglinScale = 1.0D; + public int hoglinBreedingTicks = 6000; private void hoglinSettings() { hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable); hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater); @@ -1023,6 +1046,7 @@ public class PurpurWorldConfig { } hoglinMaxHealth = getDouble("mobs.hoglin.attributes.max_health", hoglinMaxHealth); hoglinScale = Mth.clamp(getDouble("mobs.hoglin.attributes.scale", hoglinScale), 0.0625D, 16.0D); + hoglinBreedingTicks = getInt("mobs.hoglin.breeding-delay-ticks", hoglinBreedingTicks); } public boolean horseRidableInWater = false; @@ -1032,6 +1056,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) { @@ -1047,6 +1072,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; @@ -1130,6 +1156,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); @@ -1147,6 +1174,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; @@ -1176,6 +1204,7 @@ public class PurpurWorldConfig { public boolean mooshroomControllable = true; public double mooshroomMaxHealth = 10.0D; public double mooshroomScale = 1.0D; + public int mooshroomBreedingTicks = 6000; private void mooshroomSettings() { mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable); mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater); @@ -1187,6 +1216,7 @@ public class PurpurWorldConfig { } mooshroomMaxHealth = getDouble("mobs.mooshroom.attributes.max_health", mooshroomMaxHealth); mooshroomScale = Mth.clamp(getDouble("mobs.mooshroom.attributes.scale", mooshroomScale), 0.0625D, 16.0D); + mooshroomBreedingTicks = getInt("mobs.mooshroom.breeding-delay-ticks", mooshroomBreedingTicks); } public boolean muleRidableInWater = false; @@ -1196,6 +1226,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) { @@ -1211,6 +1242,7 @@ 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; @@ -1218,6 +1250,7 @@ public class PurpurWorldConfig { public boolean ocelotControllable = true; public double ocelotMaxHealth = 10.0D; public double ocelotScale = 1.0D; + public int ocelotBreedingTicks = 6000; private void ocelotSettings() { ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable); ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater); @@ -1229,6 +1262,7 @@ public class PurpurWorldConfig { } ocelotMaxHealth = getDouble("mobs.ocelot.attributes.max_health", ocelotMaxHealth); ocelotScale = Mth.clamp(getDouble("mobs.ocelot.attributes.scale", ocelotScale), 0.0625D, 16.0D); + ocelotBreedingTicks = getInt("mobs.ocelot.breeding-delay-ticks", ocelotBreedingTicks); } public boolean pandaRidable = false; @@ -1236,6 +1270,7 @@ public class PurpurWorldConfig { public boolean pandaControllable = true; public double pandaMaxHealth = 20.0D; public double pandaScale = 1.0D; + public int pandaBreedingTicks = 6000; private void pandaSettings() { pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable); pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater); @@ -1247,6 +1282,7 @@ public class PurpurWorldConfig { } pandaMaxHealth = getDouble("mobs.panda.attributes.max_health", pandaMaxHealth); pandaScale = Mth.clamp(getDouble("mobs.panda.attributes.scale", pandaScale), 0.0625D, 16.0D); + pandaBreedingTicks = getInt("mobs.panda.breeding-delay-ticks", pandaBreedingTicks); } public boolean parrotRidable = false; @@ -1333,6 +1369,7 @@ public class PurpurWorldConfig { public double pigMaxHealth = 10.0D; public double pigScale = 1.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); @@ -1345,6 +1382,7 @@ public class PurpurWorldConfig { pigMaxHealth = getDouble("mobs.pig.attributes.max_health", pigMaxHealth); pigScale = Mth.clamp(getDouble("mobs.pig.attributes.scale", pigScale), 0.0625D, 16.0D); pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack); + pigBreedingTicks = getInt("mobs.pig.breeding-delay-ticks", pigBreedingTicks); } public boolean piglinRidable = false; @@ -1408,6 +1446,7 @@ public class PurpurWorldConfig { public double polarBearScale = 1.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); @@ -1422,6 +1461,7 @@ public class PurpurWorldConfig { polarBearBreedableItemString = getString("mobs.polar_bear.breedable-item", polarBearBreedableItemString); Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(polarBearBreedableItemString)); if (item != Items.AIR) polarBearBreedableItem = item; + polarBearBreedingTicks = getInt("mobs.polar_bear.breeding-delay-ticks", polarBearBreedingTicks); } public boolean pufferfishRidable = false; @@ -1447,6 +1487,7 @@ public class PurpurWorldConfig { public double rabbitScale = 1.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); @@ -1460,6 +1501,7 @@ public class PurpurWorldConfig { rabbitScale = Mth.clamp(getDouble("mobs.rabbit.attributes.scale", rabbitScale), 0.0625D, 16.0D); 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; @@ -1501,6 +1543,7 @@ public class PurpurWorldConfig { public boolean sheepControllable = true; public double sheepMaxHealth = 8.0D; public double sheepScale = 1.0D; + public int sheepBreedingTicks = 6000; private void sheepSettings() { sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); @@ -1512,6 +1555,7 @@ public class PurpurWorldConfig { } sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth); sheepScale = Mth.clamp(getDouble("mobs.sheep.attributes.scale", sheepScale), 0.0625D, 16.0D); + sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks); } public boolean shulkerRidable = false; @@ -1648,12 +1692,14 @@ public class PurpurWorldConfig { public boolean snifferControllable = true; public double snifferMaxHealth = 14.0D; public double snifferScale = 1.0D; + public int snifferBreedingTicks = 6000; private void snifferSettings() { snifferRidable = getBoolean("mobs.sniffer.ridable", snifferRidable); snifferRidableInWater = getBoolean("mobs.sniffer.ridable-in-water", snifferRidableInWater); snifferControllable = getBoolean("mobs.sniffer.controllable", snifferControllable); snifferMaxHealth = getDouble("mobs.sniffer.attributes.max_health", snifferMaxHealth); snifferScale = Mth.clamp(getDouble("mobs.sniffer.attributes.scale", snifferScale), 0.0625D, 16.0D); + snifferBreedingTicks = getInt("mobs.sniffer.breeding-delay-ticks", snifferBreedingTicks); } public boolean squidRidable = false; @@ -1719,6 +1765,7 @@ public class PurpurWorldConfig { public boolean striderControllable = true; public double striderMaxHealth = 20.0D; public double striderScale = 1.0D; + public int striderBreedingTicks = 6000; private void striderSettings() { striderRidable = getBoolean("mobs.strider.ridable", striderRidable); striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater); @@ -1730,6 +1777,7 @@ public class PurpurWorldConfig { } striderMaxHealth = getDouble("mobs.strider.attributes.max_health", striderMaxHealth); striderScale = Mth.clamp(getDouble("mobs.strider.attributes.scale", striderScale), 0.0625D, 16.0D); + striderBreedingTicks = getInt("mobs.strider.breeding-delay-ticks", striderBreedingTicks); } public boolean tadpoleRidable = false; @@ -1750,6 +1798,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); @@ -1767,6 +1816,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; @@ -1790,6 +1840,7 @@ public class PurpurWorldConfig { public boolean turtleControllable = true; public double turtleMaxHealth = 30.0D; public double turtleScale = 1.0D; + public int turtleBreedingTicks = 6000; private void turtleSettings() { turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable); turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater); @@ -1801,6 +1852,7 @@ public class PurpurWorldConfig { } turtleMaxHealth = getDouble("mobs.turtle.attributes.max_health", turtleMaxHealth); turtleScale = Mth.clamp(getDouble("mobs.turtle.attributes.scale", turtleScale), 0.0625D, 16.0D); + turtleBreedingTicks = getInt("mobs.turtle.breeding-delay-ticks", turtleBreedingTicks); } public boolean vexRidable = false; @@ -1832,6 +1884,7 @@ public class PurpurWorldConfig { public double villagerTemptRange = 10.0D; public boolean villagerCanBeLeashed = false; 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); @@ -1847,6 +1900,7 @@ public class PurpurWorldConfig { villagerTemptRange = getDouble("mobs.villager.attributes.tempt_range", villagerTemptRange); villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed); villagerCanBreed = getBoolean("mobs.villager.can-breed", villagerCanBreed); + villagerBreedingTicks = getInt("mobs.villager.breeding-delay-ticks", villagerBreedingTicks); } public boolean vindicatorRidable = false; @@ -1971,6 +2025,7 @@ public class PurpurWorldConfig { public boolean wolfControllable = true; public double wolfMaxHealth = 8.0D; public double wolfScale = 1.0D; + public int wolfBreedingTicks = 6000; private void wolfSettings() { wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); @@ -1982,6 +2037,7 @@ public class PurpurWorldConfig { } wolfMaxHealth = getDouble("mobs.wolf.attributes.max_health", wolfMaxHealth); wolfScale = Mth.clamp(getDouble("mobs.wolf.attributes.scale", wolfScale), 0.0625D, 16.0D); + wolfBreedingTicks = getInt("mobs.wolf.breeding-delay-ticks", wolfBreedingTicks); } public boolean zoglinRidable = false;