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/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 => 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/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-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/go.mod h1:8CFQM/4LurRd9G3NUYdacFb9j2pK0LrAyVO2mAZo4mw=
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/world"
"github.com/df-mc/dragonfly/server/world/chunk"
"github.com/google/uuid"
)
@ -38,27 +37,12 @@ func (p *provider) SavePlayerSpawnPosition(uuid uuid.UUID, pos cube.Pos) error {
return nil
}
func (p *provider) LoadChunk(position world.ChunkPos, dim world.Dimension) (c *chunk.Chunk, exists bool, err error) {
c, ok := p.s.chunks[position]
return c, ok, nil
func (p *provider) LoadColumn(pos world.ChunkPos, dim world.Dimension) (*world.Column, error) {
return &world.Column{
Chunk: p.s.chunks[pos],
}, nil
}
func (p *provider) SaveChunk(position world.ChunkPos, c *chunk.Chunk, dim world.Dimension) 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 {
func (p *provider) StoreColumn(pos world.ChunkPos, dim world.Dimension, col *world.Column) error {
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.chunks[pk.Position] = ch
w.worldState.chunks[(world.ChunkPos)(pk.Position)] = ch
max := w.worldState.dimension.Range().Height() / 16
switch pk.SubChunkCount {
@ -76,20 +76,20 @@ func (w *worldsHandler) processLevelChunk(pk *packet.LevelChunk) {
return sub.Empty()
})(ch.Sub())
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) {
posToRedraw := make(map[protocol.ChunkPos]bool)
posToRedraw := make(map[world.ChunkPos]bool)
for _, sub := range pk.SubChunkEntries {
var (
absX = pk.Position[0] + int32(sub.Offset[0])
absY = pk.Position[1] + int32(sub.Offset[1])
absZ = pk.Position[2] + int32(sub.Offset[2])
pos = protocol.ChunkPos{absX, absZ}
pos = world.ChunkPos{absX, absZ}
)
ch, ok := w.worldState.chunks[pos]
if !ok {
@ -137,7 +137,7 @@ func (w *worldsHandler) ProcessChunkPackets(pk packet.Packet) packet.Packet {
w.worldState.blockNBTs[pk.Position] = pk.NBTData
case *packet.UpdateBlock:
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]
if ok {
x, y, z := blockPosInChunk(pk.Position)
@ -147,7 +147,7 @@ func (w *worldsHandler) ProcessChunkPackets(pk packet.Packet) packet.Packet {
}
case *packet.UpdateSubChunkBlocks:
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]
if ok {
for _, bce := range pk.Blocks {

View File

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

View File

@ -54,7 +54,7 @@ type WorldSettings struct {
type worldState struct {
dimension world.Dimension
chunks map[protocol.ChunkPos]*chunk.Chunk
chunks map[world.ChunkPos]*chunk.Chunk
blockNBTs map[protocol.BlockPos]map[string]any
entities map[uint64]*entityState
openItemContainers map[byte]*itemContainer
@ -218,7 +218,7 @@ func (w *worldsHandler) currentName() string {
func (w *worldsHandler) Reset() {
w.worldState = worldState{
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),
entities: make(map[uint64]*entityState),
openItemContainers: make(map[byte]*itemContainer),
@ -228,11 +228,11 @@ func (w *worldsHandler) Reset() {
}
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 {
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 !sc.Empty()
})(w.chunks[cp].Sub())
@ -250,32 +250,25 @@ func (w *worldState) Save(folder string) (*mcdb.DB, error) {
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)
for bp, blockNBT := range w.blockNBTs { // 3d to 2d
cp := world.ChunkPos{bp.X() >> 4, bp.Z() >> 4}
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)
for _, es := range w.entities {
cp := world.ChunkPos{int32(es.Position.X()) >> 4, int32(es.Position.Z()) >> 4}
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 {
logrus.Error(err)
}