update dragonfly

This commit is contained in:
olebeck 2023-04-29 17:22:24 +02:00
parent b867221a66
commit bbf7cc1d75
6 changed files with 29 additions and 49 deletions

2
go.mod
View File

@ -6,7 +6,7 @@ go 1.20
replace github.com/sandertv/gophertunnel => github.com/olebeck/gophertunnel v1.28.2-1 replace github.com/sandertv/gophertunnel => github.com/olebeck/gophertunnel v1.28.2-1
//replace github.com/df-mc/dragonfly => ./dragonfly //replace github.com/df-mc/dragonfly => ./dragonfly
replace github.com/df-mc/dragonfly => github.com/olebeck/dragonfly v0.9.4-11 replace github.com/df-mc/dragonfly => github.com/olebeck/dragonfly v0.9.4-12
//replace gioui.org => ./gio //replace gioui.org => ./gio
replace gioui.org => github.com/olebeck/gio v0.0.0-20230427194143-c9c9d8bc704d replace gioui.org => github.com/olebeck/gio v0.0.0-20230427194143-c9c9d8bc704d

2
go.sum
View File

@ -87,6 +87,8 @@ github.com/nicksnyder/go-i18n/v2 v2.2.1 h1:aOzRCdwsJuoExfZhoiXHy4bjruwCMdt5otbYo
github.com/nicksnyder/go-i18n/v2 v2.2.1/go.mod h1:fF2++lPHlo+/kPaj3nB0uxtPwzlPm+BlgwGX7MkeGj0= github.com/nicksnyder/go-i18n/v2 v2.2.1/go.mod h1:fF2++lPHlo+/kPaj3nB0uxtPwzlPm+BlgwGX7MkeGj0=
github.com/olebeck/dragonfly v0.9.4-11 h1:FkDKWUT1Kz6WRRxCLmCcFsZiocu9/htkyyEfTgKaVio= github.com/olebeck/dragonfly v0.9.4-11 h1:FkDKWUT1Kz6WRRxCLmCcFsZiocu9/htkyyEfTgKaVio=
github.com/olebeck/dragonfly v0.9.4-11/go.mod h1:1XIP+EcgRnxAEkFEbqZE3T4vXyMufzdpnigwczMBbyo= github.com/olebeck/dragonfly v0.9.4-11/go.mod h1:1XIP+EcgRnxAEkFEbqZE3T4vXyMufzdpnigwczMBbyo=
github.com/olebeck/dragonfly v0.9.4-12 h1:jiD3Nr5SA/Asj6bdePAx25uMBkyUr9jxAwbjODHYgKM=
github.com/olebeck/dragonfly v0.9.4-12/go.mod h1:1XIP+EcgRnxAEkFEbqZE3T4vXyMufzdpnigwczMBbyo=
github.com/olebeck/gio v0.0.0-20230427194143-c9c9d8bc704d h1:D+Ryca52xv37/p0FsEWfGwAGUZ1vPWpvimA2eMfBijc= github.com/olebeck/gio v0.0.0-20230427194143-c9c9d8bc704d h1:D+Ryca52xv37/p0FsEWfGwAGUZ1vPWpvimA2eMfBijc=
github.com/olebeck/gio v0.0.0-20230427194143-c9c9d8bc704d/go.mod h1:8CFQM/4LurRd9G3NUYdacFb9j2pK0LrAyVO2mAZo4mw= github.com/olebeck/gio v0.0.0-20230427194143-c9c9d8bc704d/go.mod h1:8CFQM/4LurRd9G3NUYdacFb9j2pK0LrAyVO2mAZo4mw=
github.com/olebeck/gophertunnel v1.28.2-1 h1:+3LaX37suEjMUnUTUKJMetoBqSg5PUkUBJc5dW02WI4= github.com/olebeck/gophertunnel v1.28.2-1 h1:+3LaX37suEjMUnUTUKJMetoBqSg5PUkUBJc5dW02WI4=

View File

@ -5,7 +5,6 @@ import (
"github.com/df-mc/dragonfly/server/block/cube" "github.com/df-mc/dragonfly/server/block/cube"
"github.com/df-mc/dragonfly/server/world" "github.com/df-mc/dragonfly/server/world"
"github.com/df-mc/dragonfly/server/world/chunk"
"github.com/google/uuid" "github.com/google/uuid"
) )
@ -38,27 +37,12 @@ func (p *provider) SavePlayerSpawnPosition(uuid uuid.UUID, pos cube.Pos) error {
return nil return nil
} }
func (p *provider) LoadChunk(position world.ChunkPos, dim world.Dimension) (c *chunk.Chunk, exists bool, err error) { func (p *provider) LoadColumn(pos world.ChunkPos, dim world.Dimension) (*world.Column, error) {
c, ok := p.s.chunks[position] return &world.Column{
return c, ok, nil Chunk: p.s.chunks[pos],
}, nil
} }
func (p *provider) SaveChunk(position world.ChunkPos, c *chunk.Chunk, dim world.Dimension) error { func (p *provider) StoreColumn(pos world.ChunkPos, dim world.Dimension, col *world.Column) error {
return nil
}
func (p *provider) LoadEntities(position world.ChunkPos, dim world.Dimension, reg world.EntityRegistry) ([]world.Entity, error) {
return nil, nil
}
func (p *provider) SaveEntities(position world.ChunkPos, entities []world.Entity, dim world.Dimension) error {
return nil
}
func (p *provider) LoadBlockNBT(position world.ChunkPos, dim world.Dimension) ([]map[string]any, error) {
return nil, nil
}
func (p *provider) SaveBlockNBT(position world.ChunkPos, data []map[string]any, dim world.Dimension) error {
return nil return nil
} }

View File

@ -48,7 +48,7 @@ func (w *worldsHandler) processLevelChunk(pk *packet.LevelChunk) {
w.worldState.blockNBTs[protocol.BlockPos{x, y, z}] = blockNBT w.worldState.blockNBTs[protocol.BlockPos{x, y, z}] = blockNBT
} }
w.worldState.chunks[pk.Position] = ch w.worldState.chunks[(world.ChunkPos)(pk.Position)] = ch
max := w.worldState.dimension.Range().Height() / 16 max := w.worldState.dimension.Range().Height() / 16
switch pk.SubChunkCount { switch pk.SubChunkCount {
@ -76,20 +76,20 @@ func (w *worldsHandler) processLevelChunk(pk *packet.LevelChunk) {
return sub.Empty() return sub.Empty()
})(ch.Sub()) })(ch.Sub())
if !empty { if !empty {
w.mapUI.SetChunk(pk.Position, ch, true) w.mapUI.SetChunk((world.ChunkPos)(pk.Position), ch, true)
} }
} }
} }
func (w *worldsHandler) processSubChunk(pk *packet.SubChunk) { func (w *worldsHandler) processSubChunk(pk *packet.SubChunk) {
posToRedraw := make(map[protocol.ChunkPos]bool) posToRedraw := make(map[world.ChunkPos]bool)
for _, sub := range pk.SubChunkEntries { for _, sub := range pk.SubChunkEntries {
var ( var (
absX = pk.Position[0] + int32(sub.Offset[0]) absX = pk.Position[0] + int32(sub.Offset[0])
absY = pk.Position[1] + int32(sub.Offset[1]) absY = pk.Position[1] + int32(sub.Offset[1])
absZ = pk.Position[2] + int32(sub.Offset[2]) absZ = pk.Position[2] + int32(sub.Offset[2])
pos = protocol.ChunkPos{absX, absZ} pos = world.ChunkPos{absX, absZ}
) )
ch, ok := w.worldState.chunks[pos] ch, ok := w.worldState.chunks[pos]
if !ok { if !ok {
@ -137,7 +137,7 @@ func (w *worldsHandler) ProcessChunkPackets(pk packet.Packet) packet.Packet {
w.worldState.blockNBTs[pk.Position] = pk.NBTData w.worldState.blockNBTs[pk.Position] = pk.NBTData
case *packet.UpdateBlock: case *packet.UpdateBlock:
if w.settings.BlockUpdates { if w.settings.BlockUpdates {
cp := protocol.ChunkPos{pk.Position.X() >> 4, pk.Position.Z() >> 4} cp := world.ChunkPos{pk.Position.X() >> 4, pk.Position.Z() >> 4}
c, ok := w.worldState.chunks[cp] c, ok := w.worldState.chunks[cp]
if ok { if ok {
x, y, z := blockPosInChunk(pk.Position) x, y, z := blockPosInChunk(pk.Position)
@ -147,7 +147,7 @@ func (w *worldsHandler) ProcessChunkPackets(pk packet.Packet) packet.Packet {
} }
case *packet.UpdateSubChunkBlocks: case *packet.UpdateSubChunkBlocks:
if w.settings.BlockUpdates { if w.settings.BlockUpdates {
cp := protocol.ChunkPos{pk.Position.X(), pk.Position.Z()} cp := world.ChunkPos{pk.Position.X(), pk.Position.Z()}
c, ok := w.worldState.chunks[cp] c, ok := w.worldState.chunks[cp]
if ok { if ok {
for _, bce := range pk.Blocks { for _, bce := range pk.Blocks {

View File

@ -13,6 +13,7 @@ import (
"github.com/go-gl/mathgl/mgl32" "github.com/go-gl/mathgl/mgl32"
"golang.design/x/lockfree" "golang.design/x/lockfree"
"github.com/df-mc/dragonfly/server/world"
"github.com/df-mc/dragonfly/server/world/chunk" "github.com/df-mc/dragonfly/server/world/chunk"
"github.com/sandertv/gophertunnel/minecraft/protocol" "github.com/sandertv/gophertunnel/minecraft/protocol"
"github.com/sandertv/gophertunnel/minecraft/protocol/packet" "github.com/sandertv/gophertunnel/minecraft/protocol/packet"
@ -262,8 +263,8 @@ func (m *MapUI) ToImage() *image.RGBA {
return img return img
} }
func (m *MapUI) SetChunk(pos protocol.ChunkPos, ch *chunk.Chunk, complete bool) { func (m *MapUI) SetChunk(pos world.ChunkPos, ch *chunk.Chunk, complete bool) {
m.renderQueue.Enqueue(&RenderElem{pos, ch}) m.renderQueue.Enqueue(&RenderElem{(protocol.ChunkPos)(pos), ch})
m.SchedRedraw() m.SchedRedraw()
} }

View File

@ -54,7 +54,7 @@ type WorldSettings struct {
type worldState struct { type worldState struct {
dimension world.Dimension dimension world.Dimension
chunks map[protocol.ChunkPos]*chunk.Chunk chunks map[world.ChunkPos]*chunk.Chunk
blockNBTs map[protocol.BlockPos]map[string]any blockNBTs map[protocol.BlockPos]map[string]any
entities map[uint64]*entityState entities map[uint64]*entityState
openItemContainers map[byte]*itemContainer openItemContainers map[byte]*itemContainer
@ -218,7 +218,7 @@ func (w *worldsHandler) currentName() string {
func (w *worldsHandler) Reset() { func (w *worldsHandler) Reset() {
w.worldState = worldState{ w.worldState = worldState{
dimension: w.worldState.dimension, dimension: w.worldState.dimension,
chunks: make(map[protocol.ChunkPos]*chunk.Chunk), chunks: make(map[world.ChunkPos]*chunk.Chunk),
blockNBTs: make(map[protocol.BlockPos]map[string]any), blockNBTs: make(map[protocol.BlockPos]map[string]any),
entities: make(map[uint64]*entityState), entities: make(map[uint64]*entityState),
openItemContainers: make(map[byte]*itemContainer), openItemContainers: make(map[byte]*itemContainer),
@ -228,11 +228,11 @@ func (w *worldsHandler) Reset() {
} }
func (w *worldState) cullChunks() { func (w *worldState) cullChunks() {
keys := make([]protocol.ChunkPos, 0, len(w.chunks)) keys := make([]world.ChunkPos, 0, len(w.chunks))
for cp := range w.chunks { for cp := range w.chunks {
keys = append(keys, cp) keys = append(keys, cp)
} }
for _, cp := range fp.Filter(func(cp protocol.ChunkPos) bool { for _, cp := range fp.Filter(func(cp world.ChunkPos) bool {
return !fp.Some(func(sc *chunk.SubChunk) bool { return !fp.Some(func(sc *chunk.SubChunk) bool {
return !sc.Empty() return !sc.Empty()
})(w.chunks[cp].Sub()) })(w.chunks[cp].Sub())
@ -250,32 +250,25 @@ func (w *worldState) Save(folder string) (*mcdb.DB, error) {
return nil, err return nil, err
} }
// save chunk data
for cp, c := range w.chunks {
provider.SaveChunk((world.ChunkPos)(cp), c, w.dimension)
}
// save block nbt data
chunkBlockNBT := make(map[world.ChunkPos][]map[string]any) chunkBlockNBT := make(map[world.ChunkPos][]map[string]any)
for bp, blockNBT := range w.blockNBTs { // 3d to 2d for bp, blockNBT := range w.blockNBTs { // 3d to 2d
cp := world.ChunkPos{bp.X() >> 4, bp.Z() >> 4} cp := world.ChunkPos{bp.X() >> 4, bp.Z() >> 4}
chunkBlockNBT[cp] = append(chunkBlockNBT[cp], blockNBT) chunkBlockNBT[cp] = append(chunkBlockNBT[cp], blockNBT)
} }
for cp, blockNBT := range chunkBlockNBT {
err = provider.SaveBlockNBT(cp, blockNBT, w.dimension)
if err != nil {
logrus.Error(err)
}
}
// save entities
chunkEntities := make(map[world.ChunkPos][]world.Entity) chunkEntities := make(map[world.ChunkPos][]world.Entity)
for _, es := range w.entities { for _, es := range w.entities {
cp := world.ChunkPos{int32(es.Position.X()) >> 4, int32(es.Position.Z()) >> 4} cp := world.ChunkPos{int32(es.Position.X()) >> 4, int32(es.Position.Z()) >> 4}
chunkEntities[cp] = append(chunkEntities[cp], es.ToServerEntity()) chunkEntities[cp] = append(chunkEntities[cp], es.ToServerEntity())
} }
for cp, v := range chunkEntities {
err = provider.SaveEntities(cp, v, w.dimension) // save chunk data
for cp, c := range w.chunks {
column := &world.Column{
Chunk: c,
Entities: chunkEntities[cp],
}
err = provider.StoreColumn(cp, w.dimension, column)
if err != nil { if err != nil {
logrus.Error(err) logrus.Error(err)
} }