What is the proper way to handle waiting for a reference to be valid?

At that point, I’d just recommend walking through the connection process starting from when your client attempts to connect all the way to your player being spawned in. You’d get a real feel for where you should put your initialization code.

Off-topic, but why do you keep your ASC in the PlayerState? I used it that way for some time and found it to be an inconvenience with no benefit compared to just plopping it on the character. Made possessing other characters a bit awkward as well.