Files
legacy-version/legacyver/proto/attribute.go
AkmalFairuz 9677eef999 Add 1.21.20
2025-01-01 12:34:03 +07:00

59 lines
1.8 KiB
Go

package proto
import "github.com/sandertv/gophertunnel/minecraft/protocol"
// Attribute is an entity attribute, that holds specific data such as the health of the entity. Each attribute
// holds a default value, maximum and minimum value, name and its current value.
type Attribute struct {
protocol.AttributeValue
// DefaultMin is the default minimum value of the attribute. It's not clear why this field must be sent to
// the client, but it is required regardless.
DefaultMin float32
// DefaultMax is the default maximum value of the attribute. It's not clear why this field must be sent to
// the client, but it is required regardless.
DefaultMax float32
// Default is the default value of the attribute. It's not clear why this field must be sent to the
// client, but it is required regardless.
Default float32
// Modifiers is a slice of AttributeModifiers that are applied to the attribute.
Modifiers []protocol.AttributeModifier
}
func (x *Attribute) FromLatest(v protocol.Attribute) Attribute {
x.AttributeValue = v.AttributeValue
x.DefaultMin = v.DefaultMin
x.DefaultMax = v.DefaultMax
x.Default = v.Default
x.Modifiers = v.Modifiers
return *x
}
func (x *Attribute) ToLatest() protocol.Attribute {
return protocol.Attribute{
AttributeValue: protocol.AttributeValue{
Name: x.Name,
Value: x.Value,
Max: x.Max,
Min: x.Min,
},
DefaultMin: x.DefaultMin,
DefaultMax: x.DefaultMax,
Default: x.Default,
Modifiers: x.Modifiers,
}
}
// Marshal encodes/decodes an Attribute.
func (x *Attribute) Marshal(r protocol.IO) {
r.Float32(&x.Min)
r.Float32(&x.Max)
r.Float32(&x.Value)
if IsProtoGTE(r, ID729) {
r.Float32(&x.DefaultMin)
r.Float32(&x.DefaultMax)
}
r.Float32(&x.Default)
r.String(&x.Name)
protocol.Slice(r, &x.Modifiers)
}