"Execute on Client" is run on Server

I want to call an RPC in the Player Character to move the execution pipeline from Server to Client. But when I call the Client event, it is run on Server which is wrong (the print log shows “Server”).

Why the heck this is working like that? Doesn’t this break the rules of the UE networking? Why is the Client event executed on Server side?

LogBlueprintUserMessages: [GearVR_Character_C_0] Server: This should run on Client

See Multiplayer in Blueprints | Unreal Engine Documentation under “Event Replication - Events”. For the option “Run on Owning Client”, like your custom event, it says:

“If invoked from the server, this event will run on the client who owns the target actor. Since the server can own actors itself, a “Run on Owning Client” event may actually run on the server, despite its name. If invoked from a client, the event will be treated as if it isn’t replicated, and it will only run on the client that invoked it.”

So a server can also be client in terms of authority. I would suggest reading the paragraph “Actor Replication - Authority”, too.

I met this problem.You should known who initiator is.It is very important.So,in your blueprint,only server is the initiator,and execute on the actor which is owned by client on server.You noticed this actor is on server, not on client self.
So,you should remove the switch has authority.Then the actor which on client will execute,the actor will also execute on server certainly.

If I understand correclty you mean that switch HasAuthority prevents event from firing on client?