Generate an access token using an username and password. Any existing
        client token is invalidated if not provided.

        Returns:
            dict: Response or error dict

def authenticate(self):
        """
        Generate an access token using an username and password. Any existing
        client token is invalidated if not provided.

        Returns:
            dict: Response or error dict
        """
        endpoint = '/authenticate'

        payload = {
            'agent': {
                'name': 'Minecraft',
                'version': self.ygg_version,
            },
            'username': self.username,
            'password': self.password,
            'clientToken': self.client_token,
        }
        rep = self._ygg_req(endpoint, payload)
        if not rep or 'error' in rep:
            return False
        self.access_token = rep['accessToken']
        self.client_token = rep['clientToken']
        self.available_profiles = rep['availableProfiles']
        self.selected_profile = rep['selectedProfile']
        return True