The code for handling `TOSERVER_INTERACT` packets has some style-related
problems:
* There are five places with mapblock-sending code to undo predictions in
the large `handleCommand_Interact` method in `serverpackethandler.cpp`,
so these can be abstracted away into a function to shorten the code.
* In `networkprotocol.h`, below `TOSERVER_INTERACT`,
there is an outdated copy of the `InteractAction` enum
documentation and the player position information is not mentioned.
* In `serverpackethandler.cpp`, there is a (newer) copy of the
`TOSERVER_INTERACT` documentation from `networkprotocol.h`.
Furthermore, the way the server undoes or confirms client-side node placement
or dig predictions looks inconsistent, thus erroneous:
* If a player tries to place a node in a distance too far away or if he/she
is dead,
only the mapblock containing `pointed.node_undersurface` is triggered to be
sent although the player may have placed the node at
`pointed.node_abovesurface` and this position may be in a different mapblock.
* Similarly, if a player without interact privilege tries to place a node,
only the mapblock containing `pointed.node_abovesurface` is triggered to be
sent although the player may have placed the node at
`pointed.node_undersurface` and this position may be in a different mapblock.
This change addresses the problems listed above:
* Fix the documentation comments related to the TOSERVER_INTERACT package
content
* Move mapblock sending code related to predictions to ClientInterface
* If the player tries to place but has no interact privilege, is dead,
or exceeds the permitted distance,
send both the mapblock corresponding to `pointed.node_undersurface` and
`pointed.node_abovesurface` if these mapblocks differ
* Detect air-only blocks instead day/night differences
* Write !is_air into the former day-night-diff bit on disk, so that old server can still read maps written by new servers
* Only set is_air bit when reading from disk