I'm planning out a physics-based competitive multiplayer game, written in Java. It will involve plenty of collision detection and fluid simulation, which I want to do client-side for server load reasons. Each player has control of one vehicle, which can be simulated fairly independently from the others.
The accepted answer in Multiplayer billiards game physics simulation (simulate server-side!) is completely impractical in my case. Simulating just a few vehicles will eat up much of the resources of a mid-range PC.
I am thinking of letting the clients simulate their own vehicles, with the server broadcasting their results to other clients and mediating collisions. Cheating will be prevented to some degree by using the server's spare CPU to do occasional physics audits. Clients won't know when they are being audited because they are sending the required state anyways.
What would you do? This project will be just for fun, so I won't lose anything if people do cheat.