Files
mc/server/player/dialogue/display.go
T
TarnaWijaya 26ed99fda6
Build and deploy / Build (push) Has been cancelled
Build and deploy / Update Contributors (push) Has been cancelled
Build and deploy / Deploy (push) Has been cancelled
up3
2026-07-09 08:33:57 +08:00

39 lines
1.3 KiB
Go

package dialogue
import (
"encoding/json"
"github.com/go-gl/mathgl/mgl64"
)
// DisplaySettings holds optional fields that change the way the dialogue,
// particularly the entity shown in it, is displayed.
type DisplaySettings struct {
// EntityScale specifies the scale of the entity displayed in the dialogue.
EntityScale mgl64.Vec3
// EntityOffset specifies the offset of the entity shown in the dialogue.
EntityOffset mgl64.Vec3
// EntityRotation is the rotation of the entity shown in the dialogue. This
// rotation functions a bit differently to the normal entity rotation in
// Minecraft: The values are still degrees, but pitch (rot[1]) values are
// whole-body pitch instead of head-specific, and rot[2] is whole-body roll.
EntityRotation mgl64.Vec3
}
// MarshalJSON encodes the DisplaySettings to JSON.
func (d DisplaySettings) MarshalJSON() ([]byte, error) {
// Yaw and pitch are swapped in this display.
d.EntityRotation[0], d.EntityRotation[1] = d.EntityRotation[1], d.EntityRotation[0]-32
m := map[string]any{
// Translate needs to be multiplied by -32 to get a rough block
// equivalent.
"translate": d.EntityOffset.Mul(-32),
// Entity is rotated by 32 degrees by default.
"rotate": d.EntityRotation,
"scale": [3]float64{1, 1, 1},
}
if (d.EntityScale != mgl64.Vec3{}) {
m["scale"] = d.EntityScale
}
return json.Marshal(m)
}