Getting problems with replicated inventory C++

I know there are a lot of inventory interaction systems out there that you can get even for free, but I’m looking into making it my own as this is the first time I’m trying replicated and I’m getting a problem that i just cant get fixed by my self. Its annoying that i have been hours into this just because of ignorance so know i require your help.

I have a character called AOccultCharacter with ALS community, custom player controller and character. I also have a pikcup class that i interact with a InteractInterface.

The problem here is simple, The inventory works, i already have the keybindings to the actions, an inventory array ( InventoryComponent ) and its everything working on the server side, i pickup the item, get the proper debug logs and shows on inventory, the destroy() works on the client side and even the movement replication.

Everything starts getting messed up when i try to pickup with the client side.

At first i had an error message like this:

Warning: UNetDriver::ProcessRemoteFunction: No owning connection for actor BP_PickupBase_C_UAID_74563C4F12F87C3402_1553552231

Then i used a log to check a couple things.

Pickup.cpp

if (PlayerCharacter)
				{
					UE_LOG(LogTemp, Warning, TEXT("Calling ServerTakePickup with: %s"), *PlayerCharacter->GetName());
					ServerTakePickup(PlayerCharacter);
				}

This showed me that both characters had the same name and i tried to change that by giving a unique name to every OccultCharacter Created.

AOccultCharacter.cpp BeginPlay()

static int32 UniqueID = 1;
	const FString UniqueName = FString::Printf(TEXT("OccultCharacter_%d"),
											   UniqueID++);
	this->AActor::Rename(*UniqueName);

This workedwith diffrent character names but had the same problem.
Then i wanted to fix it by giving an owner to the Pickup Class.

void AOccultCharacter::BeginInteract()
{

	PerformInteractionCheck();
	if (InteractionData.CurrentInteractable)
	{
		if (IsValid(TargetInteractable.GetObject()))
		{
			TargetInteractable->BeginInteract();
			if (FMath::IsNearlyZero(TargetInteractable->InteractableData.InteractionDuration, 0.1f))
			{
				InteractionData.CurrentInteractable->SetOwner(this);
				Interact();
				
			}
			else
			{
				GetWorldTimerManager().SetTimer(
					TimerHandleInteraction,
					this,
					&AOccultCharacter::Interact,
					TargetInteractable->InteractableData.InteractionDuration,
					false
				);
			}
		}
	}
} 

An this stoped the error:

Warning: UNetDriver::ProcessRemoteFunction: No owning connection for actor BP_PickupBase_C_UAID_74563C4F12F87C3402_1553552231

But still, no item is destroyed and no item added to the inventory, now the part where i have no idea what to do.

The pickup its called here:

APickup::Interact(AOccultCharacter PlayerCharacter)*

void APickup::Interact(AOccultCharacter* PlayerCharacter)
{
	

	if (PlayerCharacter)
	{
		UE_LOG(LogTemp, Warning, TEXT("Interact called by %s"), *PlayerCharacter->GetName());

		if (HasAuthority())
		{
			UE_LOG(LogTemp, Warning, TEXT("Has Authprity"));
			TakePickup(PlayerCharacter);
		}
		else 
		{
			if (!HasAuthority())
			{
				UE_LOG(LogTemp, Warning, TEXT("No Authority - trying to call ServerTakePickup"));
				if (PlayerCharacter)
				{
					UE_LOG(LogTemp, Warning, TEXT("Calling ServerTakePickup with: %s"), *PlayerCharacter->GetName());
					ServerTakePickup(PlayerCharacter);
				}
				else
				{
					UE_LOG(LogTemp, Warning, TEXT("PlayerCharacter is null!"));
				}
			}
		}
	}
	else
	{
		// Log if the player character is null
		UE_LOG(LogTemp, Warning, TEXT("Pickup:Interact Player Character is null!"));
	}
}

When client side calls the Interact it sends me to ServerTakePickup() and the nothing happens. Even logs are being called here, its like it just stops everything.

void APickup::ServerTakePickup_Implementation(const AOccultCharacter* Taker)
{
	UE_LOG(LogTemp, Warning, TEXT("ServerTakePickup_Implementation called with: %s"), Taker ? *Taker->GetName() : TEXT("null"));
	if (!bIsPickedUp)
	{
		UE_LOG(LogTemp, Warning, TEXT("Is not picked up"));

		bIsPickedUp = true;
		MulticastOnPickup(Taker);
	}
	else
	{
		UE_LOG(LogTemp, Warning, TEXT("It has been picked up"));
	}
}

bool APickup::ServerTakePickup_Validate(const AOccultCharacter* Taker)
{
	UE_LOG(LogTemp, Warning, TEXT("ServerTakePickup_Validate called"));
	return Taker != nullptr; // Ensure the player character is valid
}

I have the Replicated true and functions called :

APickup::APickup()
{
	PrimaryActorTick.bCanEverTick = false; 
	PickupMesh = CreateDefaultSubobject<UStaticMeshComponent>("Picup Mesh");
	PickupMesh->SetSimulatePhysics(true);
	PickupMesh->SetCollisionResponseToChannel(ECC_Pawn, ECR_Ignore);
	SetRootComponent(PickupMesh);

	//Replication ■■■■
	bReplicates = true;
	bIsPickedUp = false;
	
	
}
	//===============================================================
	// Replicaded neccessary Functions, properties and variables
	//===============================================================

	// Function to handle pickup logic
protected:
	UFUNCTION(Server, Reliable, WithValidation)
	void ServerTakePickup( const AOccultCharacter* Taker);

	void ServerTakePickup_Implementation(const AOccultCharacter* Taker);
	bool ServerTakePickup_Validate(const AOccultCharacter* Taker);

	UFUNCTION(NetMulticast, Reliable)
	void MulticastOnPickup(const AOccultCharacter* Taker);

	void MulticastOnPickup_Implementation(const AOccultCharacter* Taker);
	UFUNCTION()
	void OnRep_PickedUp();

	
public:
	UPROPERTY(ReplicatedUsing=OnRep_PickedUp)
	bool bIsPickedUp;