Lol, eventually I think this will turn into my prediction code. Which reminds me, I was thinking of punching people (in the game). It would cause problems with prediction, as if you hit someone you want knockout back (mortal combat style), but then the other player needs to apply knockout back in the past or something. 

Ex, if you jump and get hit while jumping (on the other player's side). On your side you already landed, but the fact that you were hit while in the air may make you land in a different place, so the simulate does need to be done in the past, and then the changes need to be smoothly applied to the present.

Anyway, it all gets very complicated to keep things feeling smooth, but my code would be able to handle it (as it keeps all the state). Basically you would need the add confirmed to be able to handle adding stuff in the past, and then maybe even deal with undoing stuff you did that is no longer valid.

Like maybe you got punched first, but on your side you think you punched first. Your punch needs to be rejected (maybe, we would probably add in some leniency) and if you shot them that would be rejected too. However the movement you caused to them won't necessarily get naturally corrected, as we don't want to send states per tick of moving due to be punched (we send the punch message and the server simulates it like gravity). So now you have stuff (player position) that depends on other predicted values (punching), so the predicted objects (which is what my code does, only 1 layer really knows about vectors) need to know about the other predicted objects and when handling a rejected state they need to proliferate the rollback through all their dependencies.

And this isn't just some really obscure feature... while we may not code this in for a while being able to have other values be changed instantly due to a predicted value is really useful (the whole mortal kombat thing would be awesome... as the only way they do it presently is by forcing all clients to have really low latency and then kicking them if their latency goes up).

Anyway, this code is good.