List of blueprints which are accessible through C++

Here is some code snippet from my pickup spawner which spawns a random Blueprint out of a given folder path inside the editor of the class “ASomPickup”. Hope it helps.

           FString PickupSubPath = "None";
			int32 ChosenArrayIndex = -1;

			//Get Type of pickup
			while (PickupSubPath == "None")
			{
				//new randoms
				TempRandFloat = FMath::FRand();
				TempRandInt = FMath::RandRange(0, Probability_Array.Num() - 1);

				if (TempRandFloat <= Probability_Array[TempRandInt])
					ChosenArrayIndex = TempRandInt;


				if (ChosenArrayIndex > -1)
				{
					if (ChosenArrayIndex == 0)
						PickupSubPath = "Gear";
					if (ChosenArrayIndex == 1)
						PickupSubPath = "Food";
					if (ChosenArrayIndex == 2)
						PickupSubPath = "Drink";
					if (ChosenArrayIndex == 3)
						PickupSubPath = "Spellbook";
					if (ChosenArrayIndex == 4)
						PickupSubPath = "Weapon";
					if (ChosenArrayIndex == 5)
						PickupSubPath = "Misc";
				}
			}



			//Create object library 
			TArray<FAssetData> AssetDatas;
			TArray<FAssetData> RelevantAssetDatas;
			FAssetData ChosenAssetData;
			UObjectLibrary* ObjLib = UObjectLibrary::CreateLibrary(ASomPickup::StaticClass(), true, GIsEditor);

			//Load data of the "pickup" classes into the object library
			ObjLib->AddToRoot();
			ObjLib->LoadBlueprintAssetDataFromPath(TEXT("/Game/Pickups/" + PickupSubPath));

			ObjLib->GetAssetDataList(AssetDatas);


			if (AssetDatas.Num() > 0)
			{
				if (AssetDatas.Num() == 1)
				{
					//Get the only Asset in this folder
					ChosenAssetData = AssetDatas[0];
				}
				else
				{

					while (RelevantAssetDatas.Num() <= 0)
					{
						//new random float
						TempRandFloat = FMath::FRand();

						//Find relevant Assets (in terms of spawn probability)
						for (int32 iList = 0; iList < AssetDatas.Num(); iList++)
						{
							FAssetData& AssetData = AssetDatas[iList];

							const FString* FoundTypeNameString = AssetData.TagsAndValues.Find(GET_MEMBER_NAME_CHECKED(ASomPickup, SpawnProbability));

							if (FoundTypeNameString &&  TempRandFloat < FCString::Atof(**FoundTypeNameString))
							{
								RelevantAssetDatas.Add(AssetData);
							}
						}
					}

					//new random int
					TempRandInt = FMath::RandRange(0, RelevantAssetDatas.Num() - 1);

					//Choose random asset from suitable ones
					ChosenAssetData = RelevantAssetDatas[TempRandInt];
				}



				//Load class from chosen (unloaded) asset/class
				FString LoadClassString = ChosenAssetData.ToStringReference().ToString() + "_C";


				ChosenSpawnItemClass = LoadClass<ASomPickup>(NULL, *LoadClassString, NULL, LOAD_None, NULL);

			}


//SPAWN ITEM
	if (ChosenSpawnItemClass != nullptr)
	{
		FActorSpawnParameters SpawnInfo;

		ASomPickup* SpawnedActor =  GetWorld()->SpawnActor<ASomPickup>(ChosenSpawnItemClass, SpawnInfo);
		SpawnedActor->SetActorLocation(this->GetActorLocation());
	}