Sign creation no longer scans the block it's mounted on. Instead,
placing a "[Stargate]" sign starts a pending link (shown as "Punch the
gate" on the sign) and the next block the owner left-clicks within
gate.link-timeout-seconds and gate.max-link-distance becomes the scan
seed. This lets the sign act like a DHD console standing apart from
the gate instead of being physically attached to the frame.
- Gate now stores the punched link block's coordinates (link_x/y/z)
so restarts re-scan from there instead of deriving a seed from the
sign's attachment, which no longer applies.
- New GateLinkListener handles the punch and reports scan failures
via the existing diagnostic messages; also clears pending state on
disconnect.
- Exit-location facing is now derived from the punched frame block's
position relative to the iris, since a WallSign facing is no longer
guaranteed to exist or be relevant.