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/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
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/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=
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue