Got separate Client/Server working correctly (+some minor cleanup). The main issue was that PlayableCharacter.Server would assign a new PlayerState to currentState every tick, even if there were no inputs to process. This meant that often states were getting sent with an ID of zero, which freaked the client out. Also made server only send state when there's new state to send (i.e. <0 inputs have been processed since last time).