update dragonfly
This commit is contained in:
parent
b867221a66
commit
bbf7cc1d75
2
go.mod
2
go.mod
|
@ -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
2
go.sum
|
@ -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=
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue