Never mind, I figured it out just after posting this lol,
but for anyone with the same problem this is a good link that explains this-
https://docs.unrealengine.com/en-us/Programming/Tutorials/VariablesTimersEvents/2
basically you need to declare the function as virtual, add _Implementation() to the end of the function’s name and use UFUNCTION(BlueprintNativeEvent)
ex-
//instead of
void MyFunction();
//do this
UFUNCTION(BlueprintNativeEvent)
void MyFunction(); // do not implement
virtual void MyFunction_Implementation(); // implement default behavior in this function