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.
3.5 KiB
Stargate
A network-aware Stargate portal plugin for PaperMC, with sign-based dialing and cross-server travel over Velocity or BungeeCord.
Modules
| Module | What it is |
|---|---|
stargate-common |
Shared models + JDBC storage (SQLite / MySQL) used only by the Paper plugin |
stargate-paper |
The actual gate plugin — install this on every backend server |
stargate-velocity |
Proxy companion for Velocity — install on the proxy only if using cross-server gates |
stargate-bungee |
Same, for BungeeCord/Waterfall |
Build everything with ./gradlew build. Jars land in each module's build/libs/.
Building a gate
- Build a fully-enclosed ring out of any block(s) in
gate.frame-materials(default: obsidian, gold block, gilded blackstone, birch/oak planks). Leave the middle hollow. No gaps - the ring must be a sealed loop. - Nothing else to build for chevrons. On creation, the plugin automatically picks
gate.chevron-count(default 6) frame blocks, evenly spaced around the ring, and remembers what they looked like at rest. While dialing/open those blocks swap togate.chevron-lit-material(default gilded blackstone); closing the gate restores them to their original block, so a chevron can rest as plain obsidian and blend invisibly into the frame until it lights up. - Place a sign on the outside of the frame with:
- Line 1:
[Stargate] - Line 2: network name (blank = default network)
- Line 3: gate name (blank = auto-generated)
- Line 4:
hiddento keep it out of the cycle list,fixed:GateNameto lock this gate to always dialGateName(no right-click cycling), or blank
- Line 1:
The plugin flood-fills the frame from the block behind the sign, confirms it's a
fully enclosed ring, and registers the gate. If nothing happens, the ring isn't
sealed or none of its blocks match frame-materials.
Using a gate
- Right-click the sign: cycles the destination shown on line 3 among the other gates on the same network.
- Left-click the sign: dials the shown destination — chevrons light in sequence,
then the interior fills with
gate.iris-material(default water). Walk into it to teleport. It auto-closes afterdialing.open-seconds.
Multi-world
Gates are addressed by network name, not world — a gate on any loaded world can dial any other gate on the same network regardless of world, exactly like same-server cross-world travel in the original Stargate mod.
Cross-server (Velocity / Bungee)
- Set
storage.type: mysqlin every backend server'sconfig.ymland point them at the same database — this is how servers see each other's gates. - Give each backend a unique
server-idinconfig.ymlthat matches its name in the proxy config (velocity.toml/config.ymlservers list). - Set
cross-server.enabled: trueon every backend. - Drop
stargate-velocity(orstargate-bungee) into the proxy's plugin folder.
When a player dials a gate hosted on another backend, the Paper plugin asks the
proxy (over the stargate:teleport plugin channel) to connect the player to that
server; once they land, the proxy forwards a delivery message so the destination
server's Stargate instance teleports them to the gate's exit point.
Permissions
stargate.use(default: true) — dial/cycle gatesstargate.create(default: op) — build new gatesstargate.destroy(default: op) — break your own gatesstargate.admin(default: op) — reload, break/manage any gate
Commands
/sg list [network]/sg destroy(look at a gate's sign)/sg reload