Spawn blueprint actor (deferred & from static)

AWorldPickupItem needs to spawn it’s own blueprint version. I tried many different approaches but none worked.

The other examples I could find all don’t work because they are not deferred and/or not static. The problem is that it is a static-blueprint-deferred-spawn.

Header:

static TSubclassOf<class UBlueprint> WorldPickupItem_BPClass;

static AWorldPickupItem* SpawnBlueprint(UWorld* World, ABaseItem* ItemToPickup, FTransform SpawnTransform);

CCP:

// not sure where to put this, putting it in the constructor gives me a linker-error. But FObjectFinder MUST be used inside a constructor... But how does that work for statics...
	if (!WorldPickupItem_BPClass)
	{
		static ConstructorHelpers::FObjectFinder<UBlueprint> WorldPickupItem_BPClassObj(TEXT("/Game/Blueprints/WorldPickupItem_BP"));
		if (WorldPickupItem_BPClassObj.Succeeded())
		{
			WorldPickupItem_BPClass = (UClass*)WorldPickupItem_BPClassObj.Object->GeneratedClass;
		}
		else
		{
			LOG_ERROR_STATIC("Failed to retrieve WorldPickupItem_BPClass.")
		}
	}


// Static method
AWorldPickupItem* AWorldPickupItem::SpawnBlueprint(UWorld* World, ABaseItem* ItemToPickup, FTransform SpawnTransform)
{
	AWorldPickupItem* SpawnedWorldPickupItem = World->SpawnActorDeferred<AWorldPickupItem>(WorldPickupItem_BPClass, SpawnTransform, nullptr, nullptr, ESpawnActorCollisionHandlingMethod::AlwaysSpawn);
	if (SpawnedWorldPickupItem != nullptr)
	{
		SpawnedWorldPickupItem->ItemToPickup = ItemToPickup;
		UGameplayStatics::FinishSpawningActor(SpawnedWorldPickupItem, SpawnTransform);
	}
	return SpawnedWorldPickupItem;
}