Can't override method in blueprint using BlueprintNativeEvent

I have a class Item and it has this logic
.h

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"

#include "Item.generated.h"

UCLASS()
class LEADOFF_API AItem : public AActor
{
	GENERATED_BODY()
	
public:	
	// Use item
	UFUNCTION(/*BlueprintImplementableEvent*/BlueprintNativeEvent, BlueprintCallable, Category = "Item")
	void Use();

	UFUNCTION(BlueprintCallable, Category = "Item")
	virtual void Use_Implementation();
};

.cpp

void AItem::Use_Implementation() {
	UE_LOG(LogTemp, Warning, TEXT("Base use using"));
}

and I have an heir
.h

#include "CoreMinimal.h"
#include "Inventory/Item.h"
#include "DroppedItem.generated.h"

class LEADOFF_API ADroppedItem : public AItem
{
	GENERATED_BODY()
	
protected:
    AItem* BodyUse; // For use

public:
    void Use();

    virtual void Use_Implementation() override;
};

.cpp

void ADroppedItem::Use_Implementation() {
    Super::Use_Implementation();

    if (BodyUse) {
        BodyUse->Use();
        //BodyUse();
        UE_LOG(LogTemp, Warning, TEXT("Good call BodyUse"));
    }
    else UE_LOG(LogTemp, Warning, TEXT("Bodyuse has nullptr"));
}

and also I have InputAction

UPROPERTY(EditAnywhere, Category = "EnhancedInput")
UInputAction* UseAction;

and bind them

Input->BindAction(UseAction,        ETriggerEvent::Started,   this, &AMainPlayer::UseItem);

in UseItem

if (InventoryComponent && InventoryComponent->HasInActiveSlot()) {

    AItem* ActiveItem = InventoryComponent->/*GetItemInActiveSlot()*/GetItemInActiveSlot();

    if (ActiveItem)
        ActiveItem->Use();

    UE_LOG(LogTemp, Warning, TEXT("Item use"));
}
else UE_LOG(LogTemp, Warning, TEXT("Bad item use"));

and the problem I have is that when I call ActiveItem->Use(); Nothing happens to me although it says UE_LOG(LogTemp, Warning, TEXT(“Item use”));
but the Use logic itself is not executed although it is overridden in Blueprint.
Blueprint has this logic:

why isn’t it called?

first of all when you create blueprint native events, you shouldn’t add specifiers to the implementation declaration
Technically you don’t even have to write the declaration, UHT will automatically generate it:

UFUNCTION(BlueprintNativeEvent)
void TestFunction();

...

UFUNCTION(BlueprintNativeEvent)
void TestFunction();
virtual void TestFunction_Implementation();

Both of these are valid and will work
In your .cpp you can define the _implementation as usual

Other than that, I’m guessing that AItem* ActiveItem = InventoryComponent->GetItemInActiveSlot(); is returning nullptr, which is why the Use function is not called

You can place a breakpoint in if (ActiveItem) to see if it’s a valid item or not

Lastly, when overriding a function in blueprint, if you don’t call parent (by right clicking the node and selecting add a call to parent function), then it won’t call the parent implementation (in your case the c++ implementation)

I added verification and output to the log

if (ActiveItem) {
    ActiveItem->Use();
    UE_LOG(LogTemp, Warning, TEXT("ActiveItem->Use(); call"));
}
else UE_LOG(LogTemp, Warning, TEXT("ActiveItem is null"));

I checked and it gives me “ActiveItem->Use(); call”, but the use body is not executed, that’s also what I did

nothing helped.

oh, that’s because you hid the parent Use in your child class, which is a mistake, and tbh I don’t even know how UBT let you do it

remove the redeclaration of use in your ADroppedItem, and only keep the Use_Implementation override