@staticmethod
def world_string_to_filename(world_desc):
    """
        Converts a world description string (colon-delimited, starting with
        CelestialWorld, ClientShipWorld, or InstanceWorld) into a filename.
        Note that this does *not* return the data directory as well -- if
        you intend to open a file with this (as opposed to just checking
        filenames), be sure to check for `shipworld` in the file name, to
        know to load from the `player` dir instead of `universe`.
        """
    parts = world_desc.split(':')
    world_type = parts[0]
    if world_type == 'CelestialWorld':
        if len(parts) < 5:
            raise Exception('Not sure what to do with world string: {}'.
                format(world_desc))
        coords = parts[1], parts[2], parts[3]
        planet = parts[4]
        if len(parts) == 6:
            moon = parts[5]
            return '{}_{}_{}_{}_{}.world'.format(*coords, planet, moon)
        else:
            return '{}_{}_{}_{}.world'.format(*coords, planet)
    elif world_type == 'ClientShipWorld':
        return '{}.shipworld'.format(parts[1])
    elif world_type == 'InstanceWorld':
        if len(parts) < 4:
            raise Exception('Not sure what to do with world_string: {}'.
                format(world_desc))
        inner_desc = parts[1]
        target_uuid = parts[2]
        suffix = parts[3]
        if target_uuid != '-' and suffix != '-':
            return 'unique-{}-{}-{}.world'.format(inner_desc, target_uuid,
                suffix)
    else:
        print('Unknown world type: {}'.format(world_type))
    return None
