diff --git a/Minecraft.World/Level.cpp b/Minecraft.World/Level.cpp index 1a2c9b51..d06339e9 100644 --- a/Minecraft.World/Level.cpp +++ b/Minecraft.World/Level.cpp @@ -4699,19 +4699,19 @@ bool Level::canCreateMore(eINSTANCEOF type, ESPAWN_TYPE spawnType) break; case eTYPE_CHICKEN: count = countInstanceOf( eTYPE_CHICKEN, true); - max = MobCategory::MAX_XBOX_CHICKENS_WITH_SPAWN_EGG; + max = MobCategory::maxChickensWithSpawnEgg(); break; case eTYPE_WOLF: count = countInstanceOf( eTYPE_WOLF, true); - max = MobCategory::MAX_XBOX_WOLVES_WITH_SPAWN_EGG; + max = MobCategory::maxWolvesWithSpawnEgg(); break; case eTYPE_MUSHROOMCOW: count = countInstanceOf( eTYPE_MUSHROOMCOW, true); - max = MobCategory::MAX_XBOX_MUSHROOMCOWS_WITH_SPAWN_EGG; + max = MobCategory::maxMushroomCowsWithSpawnEgg(); break; case eTYPE_SQUID: count = countInstanceOf( eTYPE_SQUID, true); - max = MobCategory::MAX_XBOX_SQUIDS_WITH_SPAWN_EGG; + max = MobCategory::maxSquidsWithSpawnEgg(); break; case eTYPE_SNOWMAN: count = countInstanceOf( eTYPE_SNOWMAN, true); @@ -4729,18 +4729,18 @@ bool Level::canCreateMore(eINSTANCEOF type, ESPAWN_TYPE spawnType) if((type & eTYPE_ANIMALS_SPAWN_LIMIT_CHECK) == eTYPE_ANIMALS_SPAWN_LIMIT_CHECK) { count = countInstanceOf( eTYPE_ANIMALS_SPAWN_LIMIT_CHECK, false); - max = MobCategory::MAX_XBOX_ANIMALS_WITH_SPAWN_EGG; + max = MobCategory::maxAnimalsWithSpawnEgg(); } // 4J: Use eTYPE_ENEMY instead of monster (slimes and ghasts aren't monsters) else if(Entity::instanceof(type, eTYPE_ENEMY)) { count = countInstanceOf(eTYPE_ENEMY, false); - max = MobCategory::MAX_XBOX_MONSTERS_WITH_SPAWN_EGG; + max = MobCategory::maxMonstersWithSpawnEgg(); } else if( (type & eTYPE_AMBIENT) == eTYPE_AMBIENT) { count = countInstanceOf( eTYPE_AMBIENT, false); - max = MobCategory::MAX_AMBIENT_WITH_SPAWN_EGG; + max = MobCategory::maxAmbientWithSpawnEgg(); } // 4J: Added minecart and boats else if (Entity::instanceof(type, eTYPE_MINECART)) @@ -4765,21 +4765,21 @@ bool Level::canCreateMore(eINSTANCEOF type, ESPAWN_TYPE spawnType) break; case eTYPE_CHICKEN: count = countInstanceOf( eTYPE_CHICKEN, true); - max = MobCategory::MAX_XBOX_CHICKENS_WITH_BREEDING; + max = MobCategory::maxChickensWithBreeding(); break; case eTYPE_WOLF: count = countInstanceOf( eTYPE_WOLF, true); - max = MobCategory::MAX_XBOX_WOLVES_WITH_BREEDING; + max = MobCategory::maxWolvesWithBreeding(); break; case eTYPE_MUSHROOMCOW: count = countInstanceOf( eTYPE_MUSHROOMCOW, true); - max = MobCategory::MAX_XBOX_MUSHROOMCOWS_WITH_BREEDING; + max = MobCategory::maxMushroomCowsWithBreeding(); break; default: if((type & eTYPE_ANIMALS_SPAWN_LIMIT_CHECK) == eTYPE_ANIMALS_SPAWN_LIMIT_CHECK) { count = countInstanceOf( eTYPE_ANIMALS_SPAWN_LIMIT_CHECK, false); - max = MobCategory::MAX_XBOX_ANIMALS_WITH_BREEDING; + max = MobCategory::maxAnimalsWithBreeding(); } else if( (type & eTYPE_MONSTER) == eTYPE_MONSTER) { diff --git a/Minecraft.World/MobCategory.cpp b/Minecraft.World/MobCategory.cpp index fc45d844..cde98dc4 100644 --- a/Minecraft.World/MobCategory.cpp +++ b/Minecraft.World/MobCategory.cpp @@ -63,6 +63,19 @@ void MobCategory::setMaxInstancesPerLevel(int max) m_maxPerLevel = max; } +int MobCategory::maxAnimalsWithBreeding() { return creature->getMaxInstancesPerLevel() + 20; } +int MobCategory::maxChickensWithBreeding() { return creature_chicken->getMaxInstancesPerLevel() + 8; } +int MobCategory::maxMushroomCowsWithBreeding() { return creature_mushroomcow->getMaxInstancesPerLevel() + 20; } +int MobCategory::maxWolvesWithBreeding() { return creature_wolf->getMaxInstancesPerLevel() + 8; } + +int MobCategory::maxAnimalsWithSpawnEgg() { return maxAnimalsWithBreeding() + 20; } +int MobCategory::maxChickensWithSpawnEgg() { return maxChickensWithBreeding() + 10; } +int MobCategory::maxWolvesWithSpawnEgg() { return maxWolvesWithBreeding() + 10; } +int MobCategory::maxMonstersWithSpawnEgg() { return monster->getMaxInstancesPerLevel() + 20; } +int MobCategory::maxMushroomCowsWithSpawnEgg() { return maxMushroomCowsWithBreeding() + 8; } +int MobCategory::maxSquidsWithSpawnEgg() { return waterCreature->getMaxInstancesPerLevel() + 8; } +int MobCategory::maxAmbientWithSpawnEgg() { return ambient->getMaxInstancesPerLevel() + 8; } + Material *MobCategory::getSpawnPositionMaterial() { return (Material *) spawnPositionMaterial; diff --git a/Minecraft.World/MobCategory.h b/Minecraft.World/MobCategory.h index 1b33b9df..d5eab0c3 100644 --- a/Minecraft.World/MobCategory.h +++ b/Minecraft.World/MobCategory.h @@ -19,20 +19,25 @@ public: static const int CONSOLE_SQUID_HARD_LIMIT = 5; static const int MAX_CONSOLE_BOSS = 1; // Max number of bosses (enderdragon/wither) - static const int MAX_XBOX_ANIMALS_WITH_BREEDING = CONSOLE_ANIMALS_HARD_LIMIT + 20; // Max number of animals that we can produce (in total), when breeding - static const int MAX_XBOX_CHICKENS_WITH_BREEDING = MAX_XBOX_CHICKENS + 8; // Max number of chickens that we can produce (in total), when breeding/hatching - static const int MAX_XBOX_MUSHROOMCOWS_WITH_BREEDING = MAX_XBOX_MUSHROOMCOWS + 20; // Max number of mushroom cows that we can produce (in total), when breeding - static const int MAX_XBOX_WOLVES_WITH_BREEDING = MAX_XBOX_WOLVES + 8; // Max number of wolves that we can produce (in total), when breeding + // 4J Villager breeding/egg limits - villagers are not a MobCategory so these stay hardcoded static const int MAX_VILLAGERS_WITH_BREEDING = 35; + static const int MAX_XBOX_VILLAGERS_WITH_SPAWN_EGG = MAX_VILLAGERS_WITH_BREEDING + 15; - static const int MAX_XBOX_ANIMALS_WITH_SPAWN_EGG = MAX_XBOX_ANIMALS_WITH_BREEDING + 20; - static const int MAX_XBOX_CHICKENS_WITH_SPAWN_EGG = MAX_XBOX_CHICKENS_WITH_BREEDING + 10; - static const int MAX_XBOX_WOLVES_WITH_SPAWN_EGG = MAX_XBOX_WOLVES_WITH_BREEDING + 10; - static const int MAX_XBOX_MONSTERS_WITH_SPAWN_EGG = CONSOLE_MONSTERS_HARD_LIMIT + 20; - static const int MAX_XBOX_VILLAGERS_WITH_SPAWN_EGG = MAX_VILLAGERS_WITH_BREEDING + 15; // 4J-PB - increased this limit due to player requests - static const int MAX_XBOX_MUSHROOMCOWS_WITH_SPAWN_EGG = MAX_XBOX_MUSHROOMCOWS_WITH_BREEDING + 8; - static const int MAX_XBOX_SQUIDS_WITH_SPAWN_EGG = CONSOLE_SQUID_HARD_LIMIT + 8; - static const int MAX_AMBIENT_WITH_SPAWN_EGG = CONSOLE_AMBIENT_HARD_LIMIT + 8; + // Breeding headroom above the natural spawn cap. Read at call time so these + // respect max-* overrides from server.properties. + static int maxAnimalsWithBreeding(); + static int maxChickensWithBreeding(); + static int maxMushroomCowsWithBreeding(); + static int maxWolvesWithBreeding(); + + // Spawn-egg headroom above the natural (or breeding) cap. + static int maxAnimalsWithSpawnEgg(); + static int maxChickensWithSpawnEgg(); + static int maxWolvesWithSpawnEgg(); + static int maxMonstersWithSpawnEgg(); + static int maxMushroomCowsWithSpawnEgg(); + static int maxSquidsWithSpawnEgg(); + static int maxAmbientWithSpawnEgg(); /* Maximum animals = 50 + 20 + 20 = 90