From 88589933eaadca7399ad6e57aeb65d17dbe6ff1a Mon Sep 17 00:00:00 2001 From: olebeck <31539311+olebeck@users.noreply.github.com> Date: Sun, 2 Apr 2023 00:22:50 +0200 Subject: [PATCH] format a bit --- go.mod | 3 +- go.sum | 11 ++-- subcommands/blind-proxy.go | 5 -- subcommands/capture.go | 21 ++---- subcommands/chat_log.go | 3 +- subcommands/resourcepack-d/resourcepack-d.go | Bin 5439 -> 5526 bytes subcommands/skins/skins.go | 10 +-- subcommands/world/chunk.go | 11 ++-- subcommands/world/chunk_render.go | 64 ++++++++++--------- subcommands/world/map_item.go | 6 +- subcommands/world/world.go | 60 ++++++----------- ui/gui.go | 8 +-- ui/gui/pages/page.go | 6 +- ui/gui/pages/settings/settings.go | 2 +- ui/gui/pages/skins/skins.go | 18 ++---- ui/gui/pages/worlds/map.go | 2 +- ui/gui/pages/worlds/worlds.go | 32 +++------- ui/gui/uis.go | 2 +- ui/messages/messages.go | 32 +++------- utils/behaviourpack/bp.go | 25 +++----- utils/iui.go | 4 +- utils/net.go | 17 ++--- utils/utils.go | 24 ------- 23 files changed, 137 insertions(+), 229 deletions(-) diff --git a/go.mod b/go.mod index cb65849..40aec41 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-4 +replace github.com/df-mc/dragonfly => github.com/olebeck/dragonfly v0.9.4-5 //replace gioui.org => ./gio replace gioui.org => github.com/olebeck/gio v0.0.0-20230321105529-d424f1a59af9 @@ -61,6 +61,7 @@ require ( github.com/mattn/go-isatty v0.0.17 // indirect github.com/muhammadmuzzammil1998/jsonc v1.0.0 // indirect github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect + github.com/repeale/fp-go v0.11.1 // indirect github.com/tklauser/go-sysconf v0.3.11 // indirect github.com/tklauser/numcpus v0.6.0 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect diff --git a/go.sum b/go.sum index ded041a..41f4706 100644 --- a/go.sum +++ b/go.sum @@ -10,6 +10,8 @@ git.wow.st/gmp/jni v0.0.0-20210610011705-34026c7e22d0 h1:bGG/g4ypjrCJoSvFrP5hafr git.wow.st/gmp/jni v0.0.0-20210610011705-34026c7e22d0/go.mod h1:+axXBRUTIDlCeE73IKeD/os7LoEnTKdkp8/gQOFjqyo= github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU= github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/TeaEntityLab/fpGo/v2 v2.3.2 h1:qlGjFzXukp9IgVQl32cz4PosbiFEnwXa2EpDbwddHS8= +github.com/TeaEntityLab/fpGo/v2 v2.3.2/go.mod h1:b06fRNLSnNiUwfSskBC3f3cocA4mAC2iySdtaP/T9uA= github.com/benoitkugler/pstokenizer v1.0.0/go.mod h1:l1G2Voirz0q/jj0TQfabNxVsa8HZXh/VMxFSRALWTiE= github.com/benoitkugler/textlayout v0.3.0 h1:2ehWXEkgb6RUokTjXh1LzdGwG4dRP6X3dqhYYDYhUVk= github.com/benoitkugler/textlayout v0.3.0/go.mod h1:o+1hFV+JSHBC9qNLIuwVoLedERU7sBPgEFcuSgfvi/w= @@ -83,10 +85,8 @@ github.com/muhammadmuzzammil1998/jsonc v1.0.0 h1:8o5gBQn4ZA3NBA9DlTujCj2a4w0tqWr github.com/muhammadmuzzammil1998/jsonc v1.0.0/go.mod h1:saF2fIVw4banK0H4+/EuqfFLpRnoy5S+ECwTOCcRcSU= github.com/nicksnyder/go-i18n/v2 v2.2.1 h1:aOzRCdwsJuoExfZhoiXHy4bjruwCMdt5otbYojM/PaA= github.com/nicksnyder/go-i18n/v2 v2.2.1/go.mod h1:fF2++lPHlo+/kPaj3nB0uxtPwzlPm+BlgwGX7MkeGj0= -github.com/olebeck/dragonfly v0.9.4-3 h1:zG6f7zBCM9HWx6eQ/O5VKUBxU6bjln+nDlfCF0vNZ/A= -github.com/olebeck/dragonfly v0.9.4-3/go.mod h1:k8OQvjmfj+JbrwQf1qHfMETlFHOp0WJLjILN+QVqh+c= -github.com/olebeck/dragonfly v0.9.4-4 h1:qe2pEasLpGdbOvz6DYE56AlxMCyidj60/i0ZbfdD+no= -github.com/olebeck/dragonfly v0.9.4-4/go.mod h1:k8OQvjmfj+JbrwQf1qHfMETlFHOp0WJLjILN+QVqh+c= +github.com/olebeck/dragonfly v0.9.4-5 h1:ixVX0Fe3wX8FryJiKC5gFVS4KDrKtd1dXJoBkzWhd1c= +github.com/olebeck/dragonfly v0.9.4-5/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= @@ -100,6 +100,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/repeale/fp-go v0.11.1 h1:Q/e+gNyyHaxKAyfdbBqvip3DxhVWH453R+kthvSr9Mk= +github.com/repeale/fp-go v0.11.1/go.mod h1:4KrwQJB1VRY+06CA+jTc4baZetr6o2PeuqnKr5ybQUc= github.com/sanbornm/go-selfupdate v0.0.0-20210106163404-c9b625feac49 h1:LuxslTBxJrrNeKfqoywIERWWhH43TgiVAiPEVlhgNBA= github.com/sanbornm/go-selfupdate v0.0.0-20210106163404-c9b625feac49/go.mod h1:fY313ZGG810aWruFYcyq3coFpHDrWJVoMfSRI81y1r4= github.com/sandertv/go-raknet v1.12.0 h1:olUzZlIJyX/pgj/mrsLCZYjKLNDsYiWdvQ4NIm3z0DA= @@ -198,6 +200,7 @@ google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175 google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inconshreveable/go-update.v0 v0.0.0-20150814200126-d8b0b1d421aa h1:drvf2JoUL1fz3ttkGNkw+rf3kZa2//7XkYGpSO4NHNA= diff --git a/subcommands/blind-proxy.go b/subcommands/blind-proxy.go index 366ff42..50947ca 100644 --- a/subcommands/blind-proxy.go +++ b/subcommands/blind-proxy.go @@ -54,11 +54,6 @@ func (c *BlindProxyCMD) Execute(ctx context.Context, ui utils.UI) error { listener.ID(), "Creative", 1, listener.Addr().(*net.UDPAddr).Port, listener.Addr().(*net.UDPAddr).Port, ))) - go func() { - <-ctx.Done() - listener.Close() - }() - clientConn, err := listener.Accept() if err != nil { return err diff --git a/subcommands/capture.go b/subcommands/capture.go index f24be93..c21a774 100644 --- a/subcommands/capture.go +++ b/subcommands/capture.go @@ -5,6 +5,7 @@ import ( "context" "encoding/binary" "flag" + "fmt" "io" "net" "os" @@ -15,7 +16,6 @@ import ( "github.com/bedrock-tool/bedrocktool/utils" "github.com/sandertv/gophertunnel/minecraft/protocol/packet" - "github.com/sirupsen/logrus" ) func init() { @@ -32,13 +32,7 @@ func dumpPacket(f io.WriteCloser, toServer bool, payload []byte) { binary.Write(f, binary.LittleEndian, packetSize) binary.Write(f, binary.LittleEndian, toServer) binary.Write(f, binary.LittleEndian, time.Now().UnixMilli()) - n, err := f.Write(payload) - if err != nil { - logrus.Error(err) - } - if n < int(packetSize) { - f.Write(make([]byte, int(packetSize)-n)) - } + f.Write(payload) f.Write([]byte{0xBB, 0xBB, 0xBB, 0xBB}) } @@ -59,7 +53,7 @@ func (c *CaptureCMD) Execute(ctx context.Context, ui utils.UI) error { } os.Mkdir("captures", 0o775) - fio, err := os.Create("captures/" + hostname + "-" + time.Now().Format("2006-01-02_15-04-05") + ".pcap2") + fio, err := os.Create(fmt.Sprintf("captures/%s-%s.pcap2", hostname, time.Now().Format("2006-01-02_15-04-05"))) if err != nil { return err } @@ -68,7 +62,7 @@ func (c *CaptureCMD) Execute(ctx context.Context, ui utils.UI) error { proxy, err := utils.NewProxy() if err != nil { - logrus.Fatal(err) + return err } proxy.PacketFunc = func(header packet.Header, payload []byte, src, dst net.Addr) { IsfromClient := src.String() == proxy.Client.LocalAddr().String() @@ -79,10 +73,5 @@ func (c *CaptureCMD) Execute(ctx context.Context, ui utils.UI) error { dumpPacket(fio, IsfromClient, buf.Bytes()) } - err = proxy.Run(ctx, address) - time.Sleep(2 * time.Second) - if err != nil { - return err - } - return nil + return proxy.Run(ctx, address) } diff --git a/subcommands/chat_log.go b/subcommands/chat_log.go index f05fcf6..4e69c09 100644 --- a/subcommands/chat_log.go +++ b/subcommands/chat_log.go @@ -59,8 +59,7 @@ func (c *ChatLogCMD) Execute(ctx context.Context, ui utils.UI) error { return pk, nil } - err = proxy.Run(ctx, address) - return err + return proxy.Run(ctx, address) } func init() { diff --git a/subcommands/resourcepack-d/resourcepack-d.go b/subcommands/resourcepack-d/resourcepack-d.go index e3480d52ef76075e931e97801fefeb69716a1c5e..cc08f3a94650cfecbfe1e82eb95ae88d22b68e00 100644 GIT binary patch literal 5526 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 0 { - blockColor = blockColorAt(c, x, heightBlock, z) - } - - // blend that blocks color with water depending on depth - waterColor := (&block.Water{}).Color() - waterColor.A = uint8(utils.Clamp(int(150+depth*7), 255)) - blockColor = utils.BlendColors(blockColor, waterColor) - blockColor.R -= uint8(depth * 2) - blockColor.G -= uint8(depth * 2) - blockColor.B -= uint8(depth * 2) - return blockColor - } else { - col := b.Color() - if col.A != 255 { - col = utils.BlendColors(blockColorAt(c, x, y-1, z), col) - } - return col - } - } else { - /* - name, nbt := b.EncodeBlock() - fmt.Printf("unknown color %d %s %s %s\n", rid, reflect.TypeOf(b), name, nbt) - */ + if !found { return blockColor } + + if _, isWater := b.(block.Water); isWater { + waterColor := block.Water{}.Color() + + // get the first non water block at the position + heightBlock := c.HeightMap().At(x, z) + depth := y - heightBlock + if depth > 0 { + blockColor = blockColorAt(c, x, heightBlock, z) + } + + // blend that blocks color with water depending on depth + waterColor.A = uint8(utils.Clamp(int(150+depth*7), 255)) + blockColor = utils.BlendColors(blockColor, waterColor) + blockColor.R -= uint8(depth * 2) + blockColor.G -= uint8(depth * 2) + blockColor.B -= uint8(depth * 2) + return blockColor + } else { + col := b.Color() + if col.A != 255 { + col = utils.BlendColors(blockColorAt(c, x, y-1, z), col) + } + + /* + a := color.RGBA{255, 0, 255, 255} + if col == a { + name, nbt := b.EncodeBlock() + fmt.Printf("unknown color %d %s %s %s\n", rid, reflect.TypeOf(b), name, nbt) + } + */ + + return col + } } func chunkGetColorAt(c *chunk.Chunk, x uint8, y int16, z uint8) color.RGBA { diff --git a/subcommands/world/map_item.go b/subcommands/world/map_item.go index ccf0800..b71cf60 100644 --- a/subcommands/world/map_item.go +++ b/subcommands/world/map_item.go @@ -95,7 +95,7 @@ func NewMapUI(w *worldsServer) *MapUI { } func (m *MapUI) Start() { - r := m.w.gui.Message("can_show_images", nil) + r := m.w.gui.Message(messages.CanShowImages{}) if r.Ok { m.showOnGui = true } @@ -182,7 +182,7 @@ func (m *MapUI) SchedRedraw() { // Redraw draws chunk images to the map image func (m *MapUI) Redraw() { m.l.Lock() - updatedChunks := []protocol.ChunkPos{} + updatedChunks := make([]protocol.ChunkPos, 0, m.renderQueue.Length()) for { r, ok := m.renderQueue.Dequeue().(*RenderElem) if !ok { @@ -225,7 +225,7 @@ func (m *MapUI) Redraw() { } if m.showOnGui { min, max := m.GetBounds() - m.w.gui.Message(messages.UpdateMap, messages.UpdateMapPayload{ + m.w.gui.Message(messages.UpdateMap{ ChunkCount: len(m.renderedChunks), Rotation: m.w.serverState.PlayerPos.Yaw, UpdatedTiles: updatedChunks, diff --git a/subcommands/world/world.go b/subcommands/world/world.go index dcdaa5d..d4988a4 100644 --- a/subcommands/world/world.go +++ b/subcommands/world/world.go @@ -25,6 +25,7 @@ import ( "github.com/df-mc/dragonfly/server/world/mcdb" "github.com/df-mc/goleveldb/leveldb/opt" "github.com/go-gl/mathgl/mgl32" + "github.com/repeale/fp-go" "github.com/sandertv/gophertunnel/minecraft" "github.com/sandertv/gophertunnel/minecraft/protocol" "github.com/sandertv/gophertunnel/minecraft/protocol/packet" @@ -104,8 +105,8 @@ func NewWorldsServer(ctx context.Context, proxy *utils.ProxyContext, ServerName w.mapUI = NewMapUI(w) w.Reset(w.CurrentName()) - w.gui.Message(messages.Init, messages.InitPayload{ - Handler: w.uiMessage, + w.gui.Message(messages.Init{ + Handler: nil, }) return w @@ -173,7 +174,7 @@ func (c *WorldCMD) Execute(ctx context.Context, ui utils.UI) error { } proxy.ConnectCB = w.OnConnect proxy.OnClientConnect = func(hasClient bool) { - w.gui.Message(messages.SetUIState, messages.UIStateConnecting) + w.gui.Message(messages.SetUIState(messages.UIStateConnecting)) } proxy.PacketCB = func(pk packet.Packet, toServer bool, _ time.Time) (packet.Packet, error) { forward := true @@ -200,32 +201,16 @@ func (c *WorldCMD) Execute(ctx context.Context, ui utils.UI) error { return pk, nil } - w.gui.Message(messages.SetUIState, messages.UIStateConnect) + w.gui.Message(messages.SetUIState(messages.UIStateConnect)) err = w.proxy.Run(ctx, serverAddress) if err != nil { return err } w.SaveAndReset() - ui.Message(messages.SetUIState, messages.UIStateFinished) + ui.Message(messages.SetUIState(messages.UIStateFinished)) return nil } -func (w *worldsServer) uiMessage(name string, data interface{}) messages.MessageResponse { - r := messages.MessageResponse{ - Ok: false, - Data: nil, - } - switch name { - case messages.SetVoidGen: - set_void_gen := data.(messages.SetVoidGenPayload) - r.Ok = w.setVoidGen(set_void_gen.Value, true) - case messages.SetWorldName: - set_world_name := data.(messages.SetWorldNamePayload) - r.Ok = w.setWorldName(set_world_name.WorldName, true) - } - return r -} - func (w *worldsServer) SetPlayerPos(Position mgl32.Vec3, Pitch, Yaw, HeadYaw float32) { last := w.serverState.PlayerPos current := TPlayerPos{ @@ -243,16 +228,14 @@ func (w *worldsServer) SetPlayerPos(Position mgl32.Vec3, Pitch, Yaw, HeadYaw flo func (w *worldsServer) setVoidGen(val bool, fromUI bool) bool { w.settings.voidGen = val - var s string + var s = locale.Loc("void_generator_false", nil) if w.settings.voidGen { s = locale.Loc("void_generator_true", nil) - } else { - s = locale.Loc("void_generator_false", nil) } w.proxy.SendMessage(s) if !fromUI { - w.gui.Message(messages.SetVoidGen, messages.SetVoidGenPayload{ + w.gui.Message(messages.SetVoidGen{ Value: w.settings.voidGen, }) } @@ -265,7 +248,7 @@ func (w *worldsServer) setWorldName(val string, fromUI bool) bool { w.proxy.SendMessage(locale.Loc("worldname_set", locale.Strmap{"Name": w.worldState.Name})) if !fromUI { - w.gui.Message(messages.SetWorldName, messages.SetWorldNamePayload{ + w.gui.Message(messages.SetWorldName{ WorldName: w.worldState.Name, }) } @@ -301,25 +284,22 @@ func (w *worldsServer) SaveAndReset() { for cp := range w.worldState.chunks { keys = append(keys, cp) } - for _, cp := range keys { - has_any := false - for _, sc := range w.worldState.chunks[cp].Sub() { - has_any = !sc.Empty() - if has_any { - break - } - } - if !has_any { - delete(w.worldState.chunks, cp) - } + + for _, cp := range fp.Filter(func(cp protocol.ChunkPos) bool { + return fp.Some(func(sc *chunk.SubChunk) bool { + return !sc.Empty() + })(w.worldState.chunks[cp].Sub()) + })(keys) { + delete(w.worldState.chunks, cp) } + if len(w.worldState.chunks) == 0 { w.Reset(w.CurrentName()) return } logrus.Infof(locale.Loc("saving_world", locale.Strmap{"Name": w.worldState.Name, "Count": len(w.worldState.chunks)})) - w.gui.Message(messages.SavingWorld, messages.SavingWorldPayload{ + w.gui.Message(messages.SavingWorld{ Name: w.worldState.Name, Chunks: len(w.worldState.chunks), }) @@ -558,11 +538,11 @@ func (w *worldsServer) SaveAndReset() { logrus.Info(locale.Loc("saved", locale.Strmap{"Name": filename})) //os.RemoveAll(folder) w.Reset(w.CurrentName()) - w.gui.Message(messages.SetUIState, messages.UIStateMain) + w.gui.Message(messages.SetUIState(messages.UIStateMain)) } func (w *worldsServer) OnConnect(err error) bool { - w.gui.Message(messages.SetUIState, messages.UIStateMain) + w.gui.Message(messages.SetUIState(messages.UIStateMain)) if err != nil { return false diff --git a/ui/gui.go b/ui/gui.go index 583baff..776678d 100644 --- a/ui/gui.go +++ b/ui/gui.go @@ -114,8 +114,8 @@ func (g *GUI) run(w *app.Window) error { } } -func (g *GUI) Message(name string, data interface{}) messages.MessageResponse { - r := g.router.Handler(name, data) +func (g *GUI) Message(data interface{}) messages.MessageResponse { + r := g.router.Handler(data) if r.Ok || r.Data != nil { return r } @@ -125,8 +125,8 @@ func (g *GUI) Message(name string, data interface{}) messages.MessageResponse { Data: nil, } - switch name { - case "can_show_images": + switch data.(type) { + case messages.CanShowImages: r.Ok = true } diff --git a/ui/gui/pages/page.go b/ui/gui/pages/page.go index 8b10711..d1046d1 100644 --- a/ui/gui/pages/page.go +++ b/ui/gui/pages/page.go @@ -13,7 +13,7 @@ import ( "github.com/bedrock-tool/bedrocktool/ui/messages" ) -type HandlerFunc = func(name string, data interface{}) messages.MessageResponse +type HandlerFunc = func(data interface{}) messages.MessageResponse type Page interface { Actions() []component.AppBarAction @@ -133,10 +133,10 @@ func (r *Router) Layout(gtx layout.Context, th *material.Theme) layout.Dimension return layout.Dimensions{Size: gtx.Constraints.Max} } -func (r *Router) Handler(name string, data interface{}) messages.MessageResponse { +func (r *Router) Handler(data interface{}) messages.MessageResponse { page, ok := r.pages[r.current] if ok { - return page.Handler()(name, 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 1c1c17f..5420967 100644 --- a/ui/gui/pages/settings/settings.go +++ b/ui/gui/pages/settings/settings.go @@ -176,7 +176,7 @@ func (p *Page) Layout(gtx C, th *material.Theme) D { } func (p *Page) Handler() pages.HandlerFunc { - return func(name string, data interface{}) messages.MessageResponse { + return func(data interface{}) 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 da24edd..0eed53c 100644 --- a/ui/gui/pages/skins/skins.go +++ b/ui/gui/pages/skins/skins.go @@ -24,7 +24,7 @@ type Page struct { State messages.UIState SkinsList widget.List l sync.Mutex - Skins []messages.NewSkinPayload + Skins []messages.NewSkin } func New(router *pages.Router) *Page { @@ -96,28 +96,20 @@ func (p *Page) Layout(gtx C, th *material.Theme) D { return layout.Flex{}.Layout(gtx) } -func (p *Page) handler(name string, data interface{}) messages.MessageResponse { +func (p *Page) handler(data interface{}) messages.MessageResponse { r := messages.MessageResponse{ Ok: false, Data: nil, } - switch name { + switch m := data.(type) { case messages.SetUIState: - state := data.(messages.UIState) - p.State = state + p.State = m p.Router.Invalidate() r.Ok = true - - case messages.Init: - init := data.(messages.InitPayload) - _ = init - r.Ok = true - case messages.NewSkin: p.l.Lock() - new_skin := data.(messages.NewSkinPayload) - p.Skins = append(p.Skins, new_skin) + p.Skins = append(p.Skins, m) p.l.Unlock() p.Router.Invalidate() r.Ok = true diff --git a/ui/gui/pages/worlds/map.go b/ui/gui/pages/worlds/map.go index 4f25341..b24bb62 100644 --- a/ui/gui/pages/worlds/map.go +++ b/ui/gui/pages/worlds/map.go @@ -90,7 +90,7 @@ func drawTile(img *image.RGBA, min, pos protocol.ChunkPos, tile *image.RGBA) { ), tile, image.Point{}, draw.Src) } -func (m *Map) Update(u *messages.UpdateMapPayload) { +func (m *Map) Update(u *messages.UpdateMap) { if m.MapImage == nil { m.scaleFactor = 1 } diff --git a/ui/gui/pages/worlds/worlds.go b/ui/gui/pages/worlds/worlds.go index 46933f1..ee96ee0 100644 --- a/ui/gui/pages/worlds/worlds.go +++ b/ui/gui/pages/worlds/worlds.go @@ -30,7 +30,7 @@ type Page struct { worldName string worldsList widget.List - worlds []messages.SavingWorldPayload + worlds []messages.SavingWorld l sync.Mutex } @@ -115,47 +115,33 @@ func (p *Page) Layout(gtx C, th *material.Theme) D { return layout.Dimensions{} } -func (u *Page) handler(name string, data interface{}) messages.MessageResponse { +func (u *Page) handler(data interface{}) messages.MessageResponse { r := messages.MessageResponse{ Ok: false, Data: nil, } - switch name { + switch m := data.(type) { case messages.SetUIState: - state := data.(messages.UIState) - u.State = state + u.State = m u.Router.Invalidate() r.Ok = true - - case messages.Init: - init := data.(messages.InitPayload) - _ = init - r.Ok = true - case messages.UpdateMap: - update_map := data.(messages.UpdateMapPayload) - u.chunkCount = update_map.ChunkCount - u.worldMap.Update(&update_map) + u.chunkCount = m.ChunkCount + u.worldMap.Update(&m) u.Router.Invalidate() r.Ok = true - case messages.SetVoidGen: - set_void_gen := data.(messages.SetVoidGenPayload) - u.voidGen = set_void_gen.Value + u.voidGen = m.Value u.Router.Invalidate() r.Ok = true - case messages.SetWorldName: - set_world_name := data.(messages.SetWorldNamePayload) - u.worldName = set_world_name.WorldName + u.worldName = m.WorldName u.Router.Invalidate() r.Ok = true - case messages.SavingWorld: u.l.Lock() - saving_world := data.(messages.SavingWorldPayload) - u.worlds = append(u.worlds, saving_world) + u.worlds = append(u.worlds, m) u.l.Unlock() u.Router.Invalidate() r.Ok = true diff --git a/ui/gui/uis.go b/ui/gui/uis.go index 3ab5f81..207d499 100644 --- a/ui/gui/uis.go +++ b/ui/gui/uis.go @@ -8,4 +8,4 @@ import ( type C = layout.Context type D = layout.Dimensions -type HandlerFunc = func(name string, data interface{}) messages.MessageResponse +type HandlerFunc = func(data interface{}) messages.MessageResponse diff --git a/ui/messages/messages.go b/ui/messages/messages.go index ae0fd65..8e24995 100644 --- a/ui/messages/messages.go +++ b/ui/messages/messages.go @@ -11,7 +11,7 @@ type MessageResponse struct { Data interface{} } -type UIState = int +type UIState int const ( UIStateConnect = iota @@ -24,39 +24,29 @@ type HandlerFunc = func(name string, data interface{}) MessageResponse // -const SetUIState = "set_ui_state" - -type SetUIStatePayload = UIState +type SetUIState = UIState // -const SetVoidGen = "set_void_gen" - -type SetVoidGenPayload struct { +type SetVoidGen struct { Value bool } // -const SetWorldName = "set_world_name" - -type SetWorldNamePayload struct { +type SetWorldName struct { WorldName string } // -var Init = "init" - -type InitPayload struct { +type Init struct { Handler HandlerFunc } // -var UpdateMap = "update_map" - -type UpdateMapPayload struct { +type UpdateMap struct { ChunkCount int Rotation float32 UpdatedTiles []protocol.ChunkPos @@ -67,16 +57,14 @@ type UpdateMapPayload struct { // -var NewSkin = "new_skin" - -type NewSkinPayload struct { +type NewSkin struct { PlayerName string Skin *protocol.Skin } -var SavingWorld = "saving_world" - -type SavingWorldPayload struct { +type SavingWorld struct { Name string Chunks int } + +type CanShowImages struct{} diff --git a/utils/behaviourpack/bp.go b/utils/behaviourpack/bp.go index c2a3c1b..b8621e5 100644 --- a/utils/behaviourpack/bp.go +++ b/utils/behaviourpack/bp.go @@ -8,6 +8,7 @@ import ( "strings" "github.com/bedrock-tool/bedrocktool/utils" + "github.com/repeale/fp-go" "github.com/sandertv/gophertunnel/minecraft/resource" "github.com/sirupsen/logrus" ) @@ -73,22 +74,16 @@ func (bp *BehaviourPack) CheckAddLink(pack utils.Pack) { hasEntitiesFolder := false if bp.HasEntities() { - for _, f := range z.File { - if f.Name == "entity" && f.FileInfo().IsDir() { - hasEntitiesFolder = true - break - } - } + hasEntitiesFolder = fp.Some(func(f *zip.File) bool { + return f.Name == "entity" && f.FileInfo().IsDir() + })(z.File) } hasItemsFolder := false if bp.HasItems() { - for _, f := range z.File { - if f.Name == "items" && f.FileInfo().IsDir() { - hasItemsFolder = true - break - } - } + hasItemsFolder = fp.Some(func(f *zip.File) bool { + return f.Name == "items" && f.FileInfo().IsDir() + })(z.File) } // has no assets needed @@ -139,7 +134,7 @@ func (bp *BehaviourPack) Save(fpath string) error { return e.Encode(thing) } - if len(bp.blocks) > 0 { // blocks + if bp.HasBlocks() { // blocks blocks_dir := path.Join(fpath, "blocks") os.Mkdir(blocks_dir, 0o755) for _, be := range bp.blocks { @@ -149,7 +144,7 @@ func (bp *BehaviourPack) Save(fpath string) error { } } } - if len(bp.items) > 0 { // items + if bp.HasItems() { // items items_dir := path.Join(fpath, "items") os.Mkdir(items_dir, 0o755) for _, ib := range bp.items { @@ -159,7 +154,7 @@ func (bp *BehaviourPack) Save(fpath string) error { } } } - if len(bp.entities) > 0 { // items + if bp.HasEntities() { // entities items_dir := path.Join(fpath, "entities") os.Mkdir(items_dir, 0o755) for _, eb := range bp.entities { diff --git a/utils/iui.go b/utils/iui.go index 49b37ad..ebd034e 100644 --- a/utils/iui.go +++ b/utils/iui.go @@ -17,7 +17,7 @@ import ( type UI interface { Init() bool Start(context.Context, context.CancelFunc) error - Message(name string, data interface{}) messages.MessageResponse + Message(data interface{}) messages.MessageResponse ServerInput(context.Context, string) (string, string, error) } @@ -25,7 +25,7 @@ type BaseUI struct { UI } -func (u *BaseUI) Message(name string, data interface{}) messages.MessageResponse { +func (u *BaseUI) Message(data interface{}) messages.MessageResponse { return messages.MessageResponse{ Ok: false, Data: nil, diff --git a/utils/net.go b/utils/net.go index 4622344..351b289 100644 --- a/utils/net.go +++ b/utils/net.go @@ -1,8 +1,12 @@ package utils -import "net" +import ( + "net" -var PrivateIPNetworks = []net.IPNet{ + "github.com/repeale/fp-go" +) + +var privateIPNetworks = []net.IPNet{ { IP: net.ParseIP("10.0.0.0"), Mask: net.CIDRMask(8, 32), @@ -19,12 +23,9 @@ var PrivateIPNetworks = []net.IPNet{ // IPPrivate checks if ip is private func IPPrivate(ip net.IP) bool { - for _, ipNet := range PrivateIPNetworks { - if ipNet.Contains(ip) { - return true - } - } - return false + return fp.Some(func(ipNet net.IPNet) bool { + return ipNet.Contains(ip) + })(privateIPNetworks) } // GetLocalIP returns the non loopback local IP of the host diff --git a/utils/utils.go b/utils/utils.go index 9cf90c6..fe6ec65 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -120,30 +120,6 @@ func spawnConn(ctx context.Context, clientConn *minecraft.Conn, serverConn *mine return nil } -// get longest line length -func maxLen(lines []string) int { - o := 0 - for _, line := range lines { - if o < len(line) { - o = len(line) - } - } - return o -} - -// MarginLines makes text centered -func MarginLines(lines []string) string { - ret := "" - max := maxLen(lines) - for _, line := range lines { - if len(line) != max { - ret += strings.Repeat(" ", max/2-len(line)/4) - } - ret += line + "\n" - } - return ret -} - // SplitExt splits path to filename and extension func SplitExt(filename string) (name, ext string) { name, ext = path.Base(filename), path.Ext(filename)