56 lines
2.5 KiB
Go
56 lines
2.5 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"
|
|
)
|
|
|
|
// LevelSoundEvent is sent by the server to make any kind of built-in sound heard to a player. It is sent to,
|
|
// for example, play a stepping sound or a shear sound. The packet is also sent by the client, in which case
|
|
// it could be forwarded by the server to the other players online. If possible, the packets from the client
|
|
// should be ignored however, and the server should play them on its own accord.
|
|
type LevelSoundEvent struct {
|
|
// SoundType is the type of the sound to play. It is one of the constants above. Some of the sound types
|
|
// require additional data, which is set in the EventData field.
|
|
SoundType uint32
|
|
// Position is the position of the sound event. The player will be able to hear the direction of the sound
|
|
// based on what position is sent here.
|
|
Position mgl32.Vec3
|
|
// ExtraData is a packed integer that some sound types use to provide extra data. An example of this is
|
|
// the note sound, which is composed of a pitch and an instrument type.
|
|
ExtraData int32
|
|
// EntityType is the string entity type of the entity that emitted the sound, for example
|
|
// 'minecraft:skeleton'. Some sound types use this entity type for additional data.
|
|
EntityType string
|
|
// BabyMob specifies if the sound should be that of a baby mob. It is most notably used for parrot
|
|
// imitations, which will change based on if this field is set to true or not.
|
|
BabyMob bool
|
|
// DisableRelativeVolume specifies if the sound should be played relatively or not. If set to true, the
|
|
// sound will have full volume, regardless of where the Position is, whereas if set to false, the sound's
|
|
// volume will be based on the distance to Position.
|
|
DisableRelativeVolume bool
|
|
// EntityUniqueID is the unique ID of a source entity. The unique ID is a value that remains consistent across
|
|
// different sessions of the same world, but most servers simply fill the runtime ID of the entity out for
|
|
// this field.
|
|
EntityUniqueID int64
|
|
}
|
|
|
|
// ID ...
|
|
func (*LevelSoundEvent) ID() uint32 {
|
|
return packet.IDLevelSoundEvent
|
|
}
|
|
|
|
func (pk *LevelSoundEvent) Marshal(io protocol.IO) {
|
|
io.Varuint32(&pk.SoundType)
|
|
io.Vec3(&pk.Position)
|
|
io.Varint32(&pk.ExtraData)
|
|
io.String(&pk.EntityType)
|
|
io.Bool(&pk.BabyMob)
|
|
io.Bool(&pk.DisableRelativeVolume)
|
|
if proto.IsProtoGTE(io, proto.ID786) {
|
|
io.Int64(&pk.EntityUniqueID)
|
|
}
|
|
}
|