Instead of guessing a gate's shape by flood-filling connected frame
material, the plugin now matches a fixed ASCII template against the
world (gate.template in config.yml), the same idea as the classic
Stargate plugin's .gate files. Default is an 11x11 ring with 7
chevrons at their real positions rather than auto-spaced.
- New GateTemplate parses the '*'/'1'/'2'/'0' grid.
- New GateTemplateScanner tries every plausible alignment of a
punched block against a frame/chevron cell, then verifies the rest
of the template matches; no more flood-fill leak/enclosure
diagnostics needed since the shape is exact.
- The player's look direction at punch time (snapped to N/S/E/W)
decides whether template columns run along world X or Z; this
facing is now stored in Gate.facing (repurposing the old
sign-attachment field) so restarts can re-scan deterministically.
- Exit-teleport yaw now comes from that stored facing instead of a
geometric guess.
- Removed gate.chevron-count/max-frame-blocks/max-iris-blocks/
min-frame-blocks - the template itself defines size and chevrons.
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.
stargate-common declared HikariCP/SQLite/MySQL as implementation deps,
which leaked transitively into stargate-velocity and stargate-bungee
even though neither touches storage. That bloated each proxy jar from
~15KB to ~18MB for nothing. Switched to compileOnly in stargate-common;
stargate-paper already redeclares them as implementation so its shaded
jar is unaffected.
Chevrons no longer need to be built out of a special block - the plugin
picks gate.chevron-count frame blocks evenly spaced around the scanned
ring and remembers their resting material, so a chevron can rest as
plain obsidian (matching the rest of the frame) and only reveal itself
by swapping to gate.chevron-lit-material while dialing/open. Restoring
on close now puts back the original block instead of a fixed material,
so alternating decorative frames (e.g. obsidian/gilded blackstone) are
preserved exactly.
The floor a gate stands on (grass, stone, etc.) is a solid block that
isn't part of the frame, so touching it during the interior flood-fill
was treated as a leak and failed the whole scan. Solid non-frame blocks
now act as boundaries instead of auto-failures; a real gap in the ring
is still caught by the max-iris-blocks size cap.
Sign creation now tells the player exactly why the structure scan failed
(missing frame material, ring not sealed, interior too large, etc.)
instead of one generic error.