This is possibly the strangest thing I’ve discovered in the engine to date.
bIsActive is a replicated property of UActorComponent.h - the fact that it’s replicated implies that the Server should be able to change this and clients should update something accordingly. Now, OnRep_IsActive() is PUBLIC, but not-virtual and actually only calls one other function? Very strange encapsulation choice.
Calling SetActive() on the Server will Broadcast the OnComponentActivated and OnComponentDeactivated delegates too - but NOT on the client. All related server-side functions are virtual. All OnRep_IsActive() does is disable the components tick? This essentially means there’s no way to check on the Client if the Server just decided to activate/deactivate a component AND the client won’t broadcast those delegates either.
TL;DR - This is silly. Please make it virtual. I would submit a Pull Request but it’s not worth the 18 month waiting time for 8 characters of code.