public MobSpawner spawnMob(Player player, int playerY, int heightRange, Location spawnLoc, boolean wideLoc, boolean tallLoc, int time, int lightLevel, Biome biome, Material materialBelow, Environment environment, boolean outsideSpawnLimits)
	{
		// Fetch all the mobs which we can spawn in this location 
		ArrayList<Mob> spawnableMobs = getSpawnableMobs(player, spawnLoc.getWorld(), spawnLoc, wideLoc, tallLoc, time, lightLevel, biome, materialBelow, environment, outsideSpawnLimits);
		
		// If no mobs can spawn here return false :'(
		if (spawnableMobs.isEmpty())
			return null;
		
		// Fetch a random mob from the list of spawnable mobs
		Mob mob = getMob(spawnableMobs, getTotalChance(spawnableMobs));
		
		// If the mob is null, or the entity type is invalid return false :'(
		if (mob == null || mob.getMobType().getBukkitEntityType() == null)
			return null;
		
		// If this mobs requirements check was delayed check it now
		if (mob.delayRequirementsCheck && !mob.requirementsMet(true, spawnLoc.getWorld(), spawnLoc, time, lightLevel, biome, materialBelow, environment))
			return null;
		
		// Return the mob spawner
		return new MobSpawner(this, player, spawnLoc, mob, playerY, heightRange);
	}