Files
legacy-version/legacyver/legacypacket/interact.go
AkmalFairuz 151816f18d fix...
2025-12-11 08:08:58 +07:00

45 lines
1.7 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"
)
// Interact is sent by the client when it interacts with another entity in some way. It used to be used for
// normal entity and block interaction, but this is no longer the case now.
type Interact struct {
// Action type is the ID of the action that was executed by the player. It is one of the constants that
// may be found above.
ActionType byte
// TargetEntityRuntimeID is the runtime ID of the entity that the player interacted with. This is empty
// for the InteractActionOpenInventory action type.
TargetEntityRuntimeID uint64
// Position associated with the ActionType above. For the InteractActionMouseOverEntity, this is the
// position relative to the entity moused over over which the player hovered with its mouse/touch. For the
// InteractActionLeaveVehicle, this is the position that the player spawns at after leaving the vehicle.
Position protocol.Optional[mgl32.Vec3]
}
// ID ...
func (*Interact) ID() uint32 {
return packet.IDInteract
}
func (pk *Interact) Marshal(io protocol.IO) {
io.Uint8(&pk.ActionType)
io.Varuint64(&pk.TargetEntityRuntimeID)
if proto.IsProtoGTE(io, proto.ID898) {
protocol.OptionalFunc(io, &pk.Position, io.Vec3)
} else if pk.ActionType == packet.InteractActionMouseOverEntity || pk.ActionType == packet.InteractActionLeaveVehicle {
pos, _ := pk.Position.Value()
io.Vec3(&pos)
if pos != (mgl32.Vec3{}) {
pk.Position = protocol.Option(pos)
} else {
pk.Position = protocol.Optional[mgl32.Vec3]{}
}
}
}