explicitly marked SidedEnvironment.canConnect as client side; changed treatment of forge's Block.validRotations implementation to return what it actually should and adjusted a couple of things accordingly; no longer allowing to rotate keyboard since that could lead to invalid facings with no solid block beneath them; allowing to place keyboards anywhere, adding some special rules where to check for screens (in front of them, and when on the wall below them) to allow input on