47 lines
2.1 KiB
Go
47 lines
2.1 KiB
Go
package legacypacket
|
|
|
|
import (
|
|
"github.com/akmalfairuz/legacy-version/legacyver/proto"
|
|
"github.com/go-gl/mathgl/mgl32"
|
|
"github.com/sandertv/gophertunnel/minecraft/protocol"
|
|
"github.com/sandertv/gophertunnel/minecraft/protocol/packet"
|
|
)
|
|
|
|
// ChangeDimension is sent by the server to the client to send a dimension change screen client-side. Once the
|
|
// screen is cleared client-side, the client will send a PlayerAction packet with
|
|
// PlayerActionDimensionChangeDone.
|
|
type ChangeDimension struct {
|
|
// Dimension is the dimension that the client should be changed to. The fog colour will change depending
|
|
// on the type of dimension, which is one of the constants above.
|
|
// Note that Dimension MUST be a different dimension than the one that the player is currently in. Sending
|
|
// a ChangeDimension packet with a Dimension that the player is currently in will result in a never-ending
|
|
// dimension change screen.
|
|
Dimension int32
|
|
// Position is the position in the new dimension that the player is spawned in.
|
|
Position mgl32.Vec3
|
|
// Respawn specifies if the dimension change was respawn based, meaning that the player died in one
|
|
// dimension and got respawned into another. The client will send a PlayerAction packet with
|
|
// PlayerActionDimensionChangeRequest if it dies in another dimension, indicating that it needs a
|
|
// DimensionChange packet with Respawn set to true.
|
|
Respawn bool
|
|
// LoadingScreenID is a unique ID for the loading screen that the player is currently in. The client will
|
|
// update the server on its state through the ServerBoundLoadingScreen packet, and it can be used to not
|
|
// send specific packets to the client if it is changing dimensions. This field should be unique for every
|
|
//ChangeDimension packet sent.
|
|
LoadingScreenID protocol.Optional[uint32]
|
|
}
|
|
|
|
// ID ...
|
|
func (*ChangeDimension) ID() uint32 {
|
|
return packet.IDChangeDimension
|
|
}
|
|
|
|
func (pk *ChangeDimension) Marshal(io protocol.IO) {
|
|
io.Varint32(&pk.Dimension)
|
|
io.Vec3(&pk.Position)
|
|
io.Bool(&pk.Respawn)
|
|
if proto.IsProtoGTE(io, proto.ID712) {
|
|
protocol.OptionalFunc(io, &pk.LoadingScreenID, io.Uint32)
|
|
}
|
|
}
|