Created in Unreal 4. Coded in Blueprint and C++
The model I used was a host player model. The host player keeps the correct state server side. Every other player interacts with the world and their input and movement are sent to the server. In order for players to see immediate results, I start faking the interaction on the client side and use interpolation of the server results to smooth the process. In the event that the client is wrong, then the client would see much less smoothing on the client side that could create a rubber-banding effect. When the connection is smooth and results are correct, then everything on the client seems instantaneous and accurate.