Actually enforce the iris shield instead of only rendering it
The shield's closed/open state only ever controlled the iris block's appearance (bedrock vs water) - the teleport listener never checked it, only whether the gate was open+outgoing. A solid bedrock block stops normal walking, but nothing stopped a player who ended up standing there anyway (flight, elytra, a vehicle) from still getting teleported, which is what was reported: iris visibly closed, travel still worked. findOutgoingGateAt() now skips any gate whose iris is closed, and both teleportPlayer()/teleportEntity() also refuse the trip if the DESTINATION's shield is closed, matching a real iris blocking whatever hits it from either side. Same check added to the cross-server delivery path in CrossServerBridge for the race where the shield closes between the proxy request and the player landing.
This commit is contained in:
@@ -84,11 +84,16 @@ material, unsealed interior, too far from the sign, etc.
|
||||
- The **iris shield** is a separate, physical thing from the wormhole connection.
|
||||
**Right-click a button placed directly below the sign** to toggle it. Closed means
|
||||
closed - `gate.iris-shield-material` (default bedrock), solid, blocking everything -
|
||||
whether or not the gate is even connected right now. With the shield open, the
|
||||
interior just reflects the connection state: `gate.iris-idle-material` (default air)
|
||||
if idle, or the event horizon if actively dialed. Closing needs nothing extra;
|
||||
if the gate has a pin set (`/sg pin <code>`), opening a closed shield prompts you
|
||||
to type the code in chat within `gate.pin-timeout-seconds` before it'll open.
|
||||
whether or not the gate is even connected right now, and travel is refused even if
|
||||
something manages to occupy that space anyway (flight, an elytra, a vehicle - not
|
||||
just relying on block collision). It blocks in both directions: a closed shield on
|
||||
the gate you're dialing *from* stops you from ever stepping in, and a closed shield
|
||||
on the *destination* refuses the trip too, matching a real iris stopping anything
|
||||
that hits it from either side. With the shield open, the interior just reflects the
|
||||
connection state: `gate.iris-idle-material` (default air) if idle, or the event
|
||||
horizon if actively dialed. Closing needs nothing extra; if the gate has a pin set
|
||||
(`/sg pin <code>`), opening a closed shield prompts you to type the code in chat
|
||||
within `gate.pin-timeout-seconds` before it'll open.
|
||||
|
||||
## Multi-world
|
||||
|
||||
|
||||
Reference in New Issue
Block a user