From 7726c707c68c791a7d44c90a6901bb6801e68769 Mon Sep 17 00:00:00 2001 From: olebeck <31539311+olebeck@users.noreply.github.com> Date: Fri, 7 Apr 2023 16:24:38 +0200 Subject: [PATCH] small fixes --- go.mod | 2 +- go.sum | 2 + handlers/capture.go | 4 +- handlers/second-user/chunks.go | 13 +- handlers/worlds/items.go | 196 ----------------------------- handlers/worlds/player.go | 202 ++++++++++++++++++++++++++++++ handlers/worlds/world.go | 9 +- ui/gui/pages/page.go | 4 +- ui/gui/pages/settings/settings.go | 10 +- ui/gui/pages/skins/skins.go | 7 +- ui/gui/pages/worlds/worlds.go | 7 +- ui/gui/uis.go | 11 -- ui/messages/messages.go | 2 +- 13 files changed, 231 insertions(+), 238 deletions(-) create mode 100644 handlers/worlds/player.go delete mode 100644 ui/gui/uis.go diff --git a/go.mod b/go.mod index 8949a49..6627aaf 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ go 1.20 replace github.com/sandertv/gophertunnel => github.com/olebeck/gophertunnel v1.28.1-1 //replace github.com/df-mc/dragonfly => ./dragonfly -replace github.com/df-mc/dragonfly => github.com/olebeck/dragonfly v0.9.4-7 +replace github.com/df-mc/dragonfly => github.com/olebeck/dragonfly v0.9.4-9 //replace gioui.org => ./gio replace gioui.org => github.com/olebeck/gio v0.0.0-20230321105529-d424f1a59af9 diff --git a/go.sum b/go.sum index af663d1..d35b61b 100644 --- a/go.sum +++ b/go.sum @@ -94,6 +94,8 @@ github.com/olebeck/dragonfly v0.9.4-6 h1:Pom7oMbUA/kFu6PCwr3mWtTOSPvgzD2/71+mUsq github.com/olebeck/dragonfly v0.9.4-6/go.mod h1:k8OQvjmfj+JbrwQf1qHfMETlFHOp0WJLjILN+QVqh+c= github.com/olebeck/dragonfly v0.9.4-7 h1:xzSc9U9upx+mxayAHN1MxkD+PStVgqksJ4uls0o3g4w= github.com/olebeck/dragonfly v0.9.4-7/go.mod h1:k8OQvjmfj+JbrwQf1qHfMETlFHOp0WJLjILN+QVqh+c= +github.com/olebeck/dragonfly v0.9.4-9 h1:VgcYFAyEZMo2VSm68fkUZ68iye7xmOWttt6gvjAG6Uw= +github.com/olebeck/dragonfly v0.9.4-9/go.mod h1:k8OQvjmfj+JbrwQf1qHfMETlFHOp0WJLjILN+QVqh+c= github.com/olebeck/gio v0.0.0-20230321105529-d424f1a59af9 h1:TqDsMHwjW5ZYfh+RE8ussT62m0qXqo+QjzSXb7BCVA4= github.com/olebeck/gio v0.0.0-20230321105529-d424f1a59af9/go.mod h1:+W1Kpf96YcfissZocFqIp6O42FDTuphkObbEybp+Ffc= github.com/olebeck/gophertunnel v1.28.1-1 h1:bw2jeMz94YHF5qQYhq1Yq/6fALkklGu7k26YbPI4DSs= diff --git a/handlers/capture.go b/handlers/capture.go index a74ea6f..e80d48c 100644 --- a/handlers/capture.go +++ b/handlers/capture.go @@ -45,12 +45,10 @@ func (p *packetCapturer) AddressAndName(address, hostname string) error { } func (p *packetCapturer) PacketFunc(header packet.Header, payload []byte, src, dst net.Addr) { - IsfromClient := p.proxy.IsClient(src) - buf := bytes.NewBuffer(nil) header.Write(buf) buf.Write(payload) - dumpPacket(p.fio, IsfromClient, buf.Bytes()) + dumpPacket(p.fio, p.proxy.IsClient(src), buf.Bytes()) } func NewPacketCapturer() *utils.ProxyHandler { diff --git a/handlers/second-user/chunks.go b/handlers/second-user/chunks.go index 98c444f..b6acd78 100644 --- a/handlers/second-user/chunks.go +++ b/handlers/second-user/chunks.go @@ -80,9 +80,8 @@ func (s *secondaryUser) processLevelChunk(pk *packet.LevelChunk) { } func (s *secondaryUser) processSubChunk(pk *packet.SubChunk) { - offsets := make([]protocol.SubChunkOffset, 0, len(pk.SubChunkEntries)) + offsets := make(map[world.ChunkPos]bool, len(pk.SubChunkEntries)) for _, sub := range pk.SubChunkEntries { - offsets = append(offsets, sub.Offset) var ( absX = pk.Position[0] + int32(sub.Offset[0]) absY = pk.Position[1] + int32(sub.Offset[1]) @@ -90,6 +89,7 @@ func (s *secondaryUser) processSubChunk(pk *packet.SubChunk) { subPos = protocol.SubChunkPos{absX, absY, absZ} pos = world.ChunkPos{absX, absZ} ) + offsets[pos] = true ch, ok := s.chunks[pos] if !ok { logrus.Error(locale.Loc("subchunk_before_chunk", nil)) @@ -107,6 +107,13 @@ func (s *secondaryUser) processSubChunk(pk *packet.SubChunk) { } for _, p := range s.server.Players() { - p.Session().ViewSubChunks(world.SubChunkPos(pk.Position), offsets) + for pos := range offsets { + ch, ok := s.chunks[pos] + if !ok { + continue + } + p.Session().ViewChunk(pos, ch, nil) + } + } } diff --git a/handlers/worlds/items.go b/handlers/worlds/items.go index 56e23cf..eef6c46 100644 --- a/handlers/worlds/items.go +++ b/handlers/worlds/items.go @@ -190,199 +190,3 @@ func stackToItem(it protocol.ItemStack) item.Stack { s := item.NewStack(t, int(it.Count)) return nbtconv.Item(it.NBTData, &s) } - -func (w *worldsHandler) playerData() (ret map[string]any) { - ret = map[string]any{ - "format_version": "1.12.0", - "identifier": "minecraft:player", - } - - if len(w.serverState.playerInventory) > 0 { - inv := inventory.New(len(w.serverState.playerInventory), nil) - for i, ii := range w.serverState.playerInventory { - inv.SetItem(i, stackToItem(ii.Stack)) - } - ret["Inventory"] = nbtconv.InvToNBT(inv) - } - - ret["abilities"] = map[string]any{ - "doorsandswitches": true, - "op": true, - "opencontainers": true, - "teleport": true, - "attackmobs": true, - "instabuild": true, - "permissionsLevel": int32(3), - "flying": false, - "lightning": false, - "playerPermissionsLevel": int32(2), - "attackplayers": true, - "build": true, - "flySpeed": float32(0.05), - "invulnerable": true, - "mayfly": true, - "mine": true, - "walkSpeed": float32(0.1), - } - - type attribute struct { - Name string - Base float32 - Current float32 - DefaultMax float32 - DefaultMin float32 - Max float32 - Min float32 - } - - ret["Attributes"] = []attribute{ - { - Base: 0, - Current: 0, - DefaultMax: 1024, - DefaultMin: -1024, - Max: 1024, - Min: -1024, - Name: "minecraft:luck", - }, - { - Base: 20, - Current: 20, - DefaultMax: 20, - DefaultMin: 0, - Max: 20, - Min: 0, - Name: "minecraft:health", - }, - { - Base: 0, - Current: 0, - DefaultMax: 16, - DefaultMin: 0, - Max: 16, - Min: 0, - Name: "minecraft:absorption", - }, - { - Base: 0, - Current: 0, - DefaultMax: 1, - DefaultMin: 0, - Max: 1, - Min: 0, - Name: "minecraft:knockback_resistance", - }, - { - Base: 0.1, - Current: 0.1, - DefaultMax: 3.4028235e+38, - DefaultMin: 0, - Max: 3.4028235e+38, - Min: 0, - Name: "minecraft:movement", - }, - { - Base: 0.02, - Current: 0.02, - DefaultMax: 3.4028235e+38, - DefaultMin: 0, - Max: 3.4028235e+38, - Min: 0, - Name: "minecraft:underwater_movement", - }, - { - Base: 0.02, - Current: 0.02, - DefaultMax: 3.4028235e+38, - DefaultMin: 0, - Max: 3.4028235e+38, - Min: 0, - Name: "minecraft:lava_movement", - }, - { - Base: 16, - Current: 16, - DefaultMax: 2048, - DefaultMin: 0, - Max: 2048, - Min: 0, - Name: "minecraft:follow_range", - }, - { - Base: 1, - Current: 1, - DefaultMax: 1, - DefaultMin: 1, - Max: 1, - Min: 1, - Name: "minecraft:attack_damage", - }, - { - Base: 20, - Current: 20, - DefaultMax: 20, - DefaultMin: 0, - Max: 20, - Min: 0, - Name: "minecraft:player.hunger", - }, - { - Base: 0, - Current: 0, - DefaultMax: 20, - DefaultMin: 0, - Max: 20, - Min: 0, - Name: "minecraft:player.exhaustion", - }, - { - Base: 5, - Current: 5, - DefaultMax: 20, - DefaultMin: 0, - Max: 20, - Min: 0, - Name: "minecraft:player.saturation", - }, - { - Base: 0, - Current: 0, - DefaultMax: 24791, - DefaultMin: 0, - Max: 24791, - Min: 0, - Name: "minecraft:player.level", - }, - { - Base: 0, - Current: 0, - DefaultMax: 1, - DefaultMin: 0, - Max: 1, - Min: 0, - Name: "minecraft:player.experience", - }, - } - - ret["Tags"] = []string{} - ret["OnGround"] = true - - spawn := w.serverState.PlayerPos.Position - - ret["SpawnX"] = int32(spawn.X()) - ret["SpawnY"] = int32(spawn.Y()) - ret["SpawnZ"] = int32(spawn.Z()) - - ret["Pos"] = []float32{ - float32(spawn.X()), - float32(spawn.Y()), - float32(spawn.Z()), - } - - ret["Rotation"] = []float32{ - w.serverState.PlayerPos.Pitch, - w.serverState.PlayerPos.Yaw, - } - - return -} diff --git a/handlers/worlds/player.go b/handlers/worlds/player.go new file mode 100644 index 0000000..2feab2b --- /dev/null +++ b/handlers/worlds/player.go @@ -0,0 +1,202 @@ +package worlds + +import ( + "github.com/bedrock-tool/bedrocktool/utils/nbtconv" + "github.com/df-mc/dragonfly/server/item/inventory" +) + +func (w *worldsHandler) playerData() (ret map[string]any) { + ret = map[string]any{ + "format_version": "1.12.0", + "identifier": "minecraft:player", + } + + if len(w.serverState.playerInventory) > 0 { + inv := inventory.New(len(w.serverState.playerInventory), nil) + for i, ii := range w.serverState.playerInventory { + inv.SetItem(i, stackToItem(ii.Stack)) + } + ret["Inventory"] = nbtconv.InvToNBT(inv) + } + + ret["abilities"] = map[string]any{ + "doorsandswitches": true, + "op": true, + "opencontainers": true, + "teleport": true, + "attackmobs": true, + "instabuild": true, + "permissionsLevel": int32(3), + "flying": false, + "lightning": false, + "playerPermissionsLevel": int32(2), + "attackplayers": true, + "build": true, + "flySpeed": float32(0.05), + "invulnerable": true, + "mayfly": true, + "mine": true, + "walkSpeed": float32(0.1), + } + + type attribute struct { + Name string + Base float32 + Current float32 + DefaultMax float32 + DefaultMin float32 + Max float32 + Min float32 + } + + ret["Attributes"] = []attribute{ + { + Base: 0, + Current: 0, + DefaultMax: 1024, + DefaultMin: -1024, + Max: 1024, + Min: -1024, + Name: "minecraft:luck", + }, + { + Base: 20, + Current: 20, + DefaultMax: 20, + DefaultMin: 0, + Max: 20, + Min: 0, + Name: "minecraft:health", + }, + { + Base: 0, + Current: 0, + DefaultMax: 16, + DefaultMin: 0, + Max: 16, + Min: 0, + Name: "minecraft:absorption", + }, + { + Base: 0, + Current: 0, + DefaultMax: 1, + DefaultMin: 0, + Max: 1, + Min: 0, + Name: "minecraft:knockback_resistance", + }, + { + Base: 0.1, + Current: 0.1, + DefaultMax: 3.4028235e+38, + DefaultMin: 0, + Max: 3.4028235e+38, + Min: 0, + Name: "minecraft:movement", + }, + { + Base: 0.02, + Current: 0.02, + DefaultMax: 3.4028235e+38, + DefaultMin: 0, + Max: 3.4028235e+38, + Min: 0, + Name: "minecraft:underwater_movement", + }, + { + Base: 0.02, + Current: 0.02, + DefaultMax: 3.4028235e+38, + DefaultMin: 0, + Max: 3.4028235e+38, + Min: 0, + Name: "minecraft:lava_movement", + }, + { + Base: 16, + Current: 16, + DefaultMax: 2048, + DefaultMin: 0, + Max: 2048, + Min: 0, + Name: "minecraft:follow_range", + }, + { + Base: 1, + Current: 1, + DefaultMax: 1, + DefaultMin: 1, + Max: 1, + Min: 1, + Name: "minecraft:attack_damage", + }, + { + Base: 20, + Current: 20, + DefaultMax: 20, + DefaultMin: 0, + Max: 20, + Min: 0, + Name: "minecraft:player.hunger", + }, + { + Base: 0, + Current: 0, + DefaultMax: 20, + DefaultMin: 0, + Max: 20, + Min: 0, + Name: "minecraft:player.exhaustion", + }, + { + Base: 5, + Current: 5, + DefaultMax: 20, + DefaultMin: 0, + Max: 20, + Min: 0, + Name: "minecraft:player.saturation", + }, + { + Base: 0, + Current: 0, + DefaultMax: 24791, + DefaultMin: 0, + Max: 24791, + Min: 0, + Name: "minecraft:player.level", + }, + { + Base: 0, + Current: 0, + DefaultMax: 1, + DefaultMin: 0, + Max: 1, + Min: 0, + Name: "minecraft:player.experience", + }, + } + + ret["Tags"] = []string{} + ret["OnGround"] = true + + spawn := w.serverState.PlayerPos.Position + + ret["SpawnX"] = int32(spawn.X()) + ret["SpawnY"] = int32(spawn.Y()) + ret["SpawnZ"] = int32(spawn.Z()) + + ret["Pos"] = []float32{ + float32(spawn.X()), + float32(spawn.Y()), + float32(spawn.Z()), + } + + ret["Rotation"] = []float32{ + w.serverState.PlayerPos.Pitch, + w.serverState.PlayerPos.Yaw, + } + + return +} diff --git a/handlers/worlds/world.go b/handlers/worlds/world.go index 42aaaac..e22fa7c 100644 --- a/handlers/worlds/world.go +++ b/handlers/worlds/world.go @@ -217,7 +217,7 @@ func (w *worldsHandler) setWorldName(val string, fromUI bool) bool { func (w *worldsHandler) CurrentName() string { worldName := "world" - if w.serverState.worldCounter > 1 { + if w.serverState.worldCounter > 0 { worldName = fmt.Sprintf("world-%d", w.serverState.worldCounter) } return worldName @@ -249,8 +249,11 @@ func (w *worldState) cullChunks() { } } -func (w *worldState) Save(folder string) (*mcdb.Provider, error) { - provider, err := mcdb.New(logrus.StandardLogger(), folder, opt.DefaultCompression) +func (w *worldState) Save(folder string) (*mcdb.DB, error) { + provider, err := mcdb.Config{ + Log: logrus.StandardLogger(), + Compression: opt.DefaultCompression, + }.New(folder) if err != nil { return nil, err } diff --git a/ui/gui/pages/page.go b/ui/gui/pages/page.go index d1046d1..45d6187 100644 --- a/ui/gui/pages/page.go +++ b/ui/gui/pages/page.go @@ -22,7 +22,7 @@ type Page interface { NavItem() component.NavItem // handle events from program - Handler() HandlerFunc + Handler(data any) messages.MessageResponse } type Router struct { @@ -136,7 +136,7 @@ func (r *Router) Layout(gtx layout.Context, th *material.Theme) layout.Dimension func (r *Router) Handler(data interface{}) messages.MessageResponse { page, ok := r.pages[r.current] if ok { - return page.Handler()(data) + return page.Handler(data) } return messages.MessageResponse{} } diff --git a/ui/gui/pages/settings/settings.go b/ui/gui/pages/settings/settings.go index f50ee2a..68c47ac 100644 --- a/ui/gui/pages/settings/settings.go +++ b/ui/gui/pages/settings/settings.go @@ -174,11 +174,9 @@ func (p *Page) Layout(gtx C, th *material.Theme) D { }) } -func (p *Page) Handler() pages.HandlerFunc { - return func(data interface{}) messages.MessageResponse { - return messages.MessageResponse{ - Ok: false, - Data: nil, - } +func (p *Page) Handler(any) messages.MessageResponse { + return messages.MessageResponse{ + Ok: false, + Data: nil, } } diff --git a/ui/gui/pages/skins/skins.go b/ui/gui/pages/skins/skins.go index 0eed53c..2f52b43 100644 --- a/ui/gui/pages/skins/skins.go +++ b/ui/gui/pages/skins/skins.go @@ -8,7 +8,6 @@ import ( "gioui.org/widget" "gioui.org/widget/material" "gioui.org/x/component" - "github.com/bedrock-tool/bedrocktool/ui/gui" "github.com/bedrock-tool/bedrocktool/ui/gui/pages" "github.com/bedrock-tool/bedrocktool/ui/messages" ) @@ -96,7 +95,7 @@ func (p *Page) Layout(gtx C, th *material.Theme) D { return layout.Flex{}.Layout(gtx) } -func (p *Page) handler(data interface{}) messages.MessageResponse { +func (p *Page) Handler(data interface{}) messages.MessageResponse { r := messages.MessageResponse{ Ok: false, Data: nil, @@ -116,7 +115,3 @@ func (p *Page) handler(data interface{}) messages.MessageResponse { } return r } - -func (p *Page) Handler() gui.HandlerFunc { - return p.handler -} diff --git a/ui/gui/pages/worlds/worlds.go b/ui/gui/pages/worlds/worlds.go index ee96ee0..815251f 100644 --- a/ui/gui/pages/worlds/worlds.go +++ b/ui/gui/pages/worlds/worlds.go @@ -10,7 +10,6 @@ import ( "gioui.org/widget" "gioui.org/widget/material" "gioui.org/x/component" - "github.com/bedrock-tool/bedrocktool/ui/gui" "github.com/bedrock-tool/bedrocktool/ui/gui/pages" "github.com/bedrock-tool/bedrocktool/ui/messages" ) @@ -115,7 +114,7 @@ func (p *Page) Layout(gtx C, th *material.Theme) D { return layout.Dimensions{} } -func (u *Page) handler(data interface{}) messages.MessageResponse { +func (u *Page) Handler(data any) messages.MessageResponse { r := messages.MessageResponse{ Ok: false, Data: nil, @@ -148,7 +147,3 @@ func (u *Page) handler(data interface{}) messages.MessageResponse { } return r } - -func (p *Page) Handler() gui.HandlerFunc { - return p.handler -} diff --git a/ui/gui/uis.go b/ui/gui/uis.go deleted file mode 100644 index 207d499..0000000 --- a/ui/gui/uis.go +++ /dev/null @@ -1,11 +0,0 @@ -package gui - -import ( - "gioui.org/layout" - "github.com/bedrock-tool/bedrocktool/ui/messages" -) - -type C = layout.Context -type D = layout.Dimensions - -type HandlerFunc = func(data interface{}) messages.MessageResponse diff --git a/ui/messages/messages.go b/ui/messages/messages.go index 8e24995..3c93afa 100644 --- a/ui/messages/messages.go +++ b/ui/messages/messages.go @@ -20,7 +20,7 @@ const ( UIStateFinished ) -type HandlerFunc = func(name string, data interface{}) MessageResponse +type HandlerFunc = func(data interface{}) MessageResponse //