44 lines
1.3 KiB
Go
44 lines
1.3 KiB
Go
package legacypacket
|
|
|
|
import (
|
|
"github.com/akmalfairuz/legacy-version/legacyver/proto"
|
|
"github.com/sandertv/gophertunnel/minecraft/protocol"
|
|
"github.com/sandertv/gophertunnel/minecraft/protocol/packet"
|
|
)
|
|
|
|
// Animate is sent by the server to send a player animation from one player to all viewers of that player. It
|
|
// is used for a couple of actions, such as arm swimming and critical hits.
|
|
type Animate struct {
|
|
// ActionType is the ID of the animation action to execute. It is one of the action type constants that
|
|
// may be found above.
|
|
ActionType int32
|
|
// EntityRuntimeID is the runtime ID of the player that the animation should be played upon. The runtime
|
|
// ID is unique for each world session, and entities are generally identified in packets using this
|
|
// runtime ID.
|
|
EntityRuntimeID uint64
|
|
// Data ...
|
|
Data float32
|
|
// RowingTime is the time for rowing actions.
|
|
RowingTime float32
|
|
}
|
|
|
|
// ID ...
|
|
func (*Animate) ID() uint32 {
|
|
return packet.IDAnimate
|
|
}
|
|
|
|
func (pk *Animate) Marshal(io protocol.IO) {
|
|
io.Varint32(&pk.ActionType)
|
|
io.Varuint64(&pk.EntityRuntimeID)
|
|
if proto.IsProtoGTE(io, proto.ID859) {
|
|
io.Float32(&pk.Data)
|
|
if pk.ActionType == packet.AnimateActionRowLeft || pk.ActionType == packet.AnimateActionRowRight {
|
|
io.Float32(&pk.RowingTime)
|
|
}
|
|
} else {
|
|
if pk.ActionType&0x80 != 0 {
|
|
io.Float32(&pk.RowingTime)
|
|
}
|
|
}
|
|
}
|