Files
go-mc/server/world/world.go

52 lines
1.0 KiB
Go

package world
import (
_ "embed"
"github.com/Tnze/go-mc/server"
"io"
"unsafe"
"github.com/Tnze/go-mc/nbt"
pk "github.com/Tnze/go-mc/net/packet"
"github.com/Tnze/go-mc/server/ecs"
)
//go:embed DimensionCodec.snbt
var dimensionCodecSNBT nbt.StringifiedMessage
//go:embed Dimension.snbt
var dimensionSNBT nbt.StringifiedMessage
type Dimension struct {
storage
Name string
}
type DimensionList struct {
Dims []ecs.Index
DimNames []string
DimCodecSNBT, DimSNBT nbt.StringifiedMessage
}
func (d *DimensionList) WriteTo(w io.Writer) (n int64, err error) {
return pk.Array(*(*[]pk.Identifier)(unsafe.Pointer(&d.DimNames))).WriteTo(w)
}
func (d *DimensionList) Find(dim string) (ecs.Index, bool) {
for i, v := range d.DimNames {
if v == dim {
return d.Dims[i], true
}
}
return 0, false
}
func NewDimensionManager(g *server.Game) *DimensionList {
return ecs.SetResource(g.World, DimensionList{
Dims: nil,
DimNames: nil,
DimCodecSNBT: dimensionCodecSNBT,
DimSNBT: dimensionSNBT,
})
}