2026-03-01 12:16:08 +08:00
# pragma once
using namespace std ;
class Material ;
class MobCategory
{
public :
// 4J - putting constants for xbox spawning in one place to tidy things up a bit - all numbers are per level
static const int CONSOLE_MONSTERS_HARD_LIMIT = 50 ; // Max number of enemies (skeleton, zombie, creeper etc) that the mob spawner will produce
static const int CONSOLE_ANIMALS_HARD_LIMIT = 50 ; // Max number of animals (cows, sheep, pigs) that the mob spawner will produce
2026-03-03 03:04:10 +08:00
static const int CONSOLE_AMBIENT_HARD_LIMIT = 20 ; // Ambient mobs
2026-03-01 12:16:08 +08:00
static const int MAX_XBOX_CHICKENS = 8 ; // Max number of chickens that the mob spawner will produce
static const int MAX_XBOX_WOLVES = 8 ; // Max number of wolves that the mob spawner will produce
static const int MAX_XBOX_MUSHROOMCOWS = 2 ; // Max number of mushroom cows that the mob spawner will produce
static const int MAX_XBOX_SNOWMEN = 16 ; // Max number of snow golems that can be created by placing blocks - 4J-PB increased limit due to player requests
static const int MAX_XBOX_IRONGOLEM = 16 ; // Max number of iron golems that can be created by placing blocks - 4J-PB increased limit due to player requests
static const int CONSOLE_SQUID_HARD_LIMIT = 5 ;
2026-03-03 03:04:10 +08:00
static const int MAX_CONSOLE_BOSS = 1 ; // Max number of bosses (enderdragon/wither)
2026-03-01 12:16:08 +08:00
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
static const int MAX_VILLAGERS_WITH_BREEDING = 35 ;
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 ;
2026-03-03 03:04:10 +08:00
static const int MAX_AMBIENT_WITH_SPAWN_EGG = CONSOLE_AMBIENT_HARD_LIMIT + 8 ;
2026-03-01 12:16:08 +08:00
/*
Maximum animals = 50 + 20 + 20 = 90
Maximum monsters = 50 + 20 = 70
Maximum chickens = 8 + 8 + 10 = 26
Maximum wolves = 8 + 8 + 10 = 26
Maximum mooshrooms = 2 + 20 + 8 = 30
Maximum snowmen = 16
Maximum iron golem = 16
Maximum squid = 5 + 8 = 13
Maximum villagers = 35 + 15 = 50
Maximum natural = 50 + 50 + 8 + 8 + 2 + 5 + 35 = 158
Total maxium = 90 + 70 + 26 + 26 + 30 + 16 + 16 + 13 + 50 = 337
*/
static MobCategory * monster ;
static MobCategory * creature ;
2026-03-03 03:04:10 +08:00
static MobCategory * ambient ;
2026-03-01 12:16:08 +08:00
static MobCategory * waterCreature ;
// 4J added extra categories, to break these out of general creatures & give us more control of levels
static MobCategory * creature_wolf ;
static MobCategory * creature_chicken ;
static MobCategory * creature_mushroomcow ;
// 4J Stu Sometimes we want to access the values by name, other times iterate over all values
// Added these arrays so we can static initialise a collection which we can iterate over
static MobCategoryArray values ;
private :
const int m_max ;
const int m_maxPerLevel ;
const Material * spawnPositionMaterial ;
const bool m_isFriendly ;
2026-03-03 03:04:10 +08:00
const bool m_isPersistent ;
2026-03-01 12:16:08 +08:00
const bool m_isSingleType ; // 4J Added
2026-03-03 03:04:10 +08:00
const eINSTANCEOF m_eBase ; // 4J added
2026-03-01 12:16:08 +08:00
2026-03-03 03:04:10 +08:00
MobCategory ( int maxVar , Material * spawnPositionMaterial , bool isFriendly , bool isPersistent , eINSTANCEOF eBase , bool isSingleType , int maxPerLevel ) ;
2026-03-01 12:16:08 +08:00
public :
const type_info getBaseClass ( ) ;
const eINSTANCEOF getEnumBaseClass ( ) ; // 4J added
int getMaxInstancesPerChunk ( ) ;
int getMaxInstancesPerLevel ( ) ; // 4J added
Material * getSpawnPositionMaterial ( ) ;
bool isFriendly ( ) ;
bool isSingleType ( ) ;
2026-03-03 03:04:10 +08:00
bool isPersistent ( ) ;
2026-03-01 12:16:08 +08:00
public :
static void staticCtor ( ) ;
} ;