From 17572e8e9476939f258fd0674edbea08e00e8d57 Mon Sep 17 00:00:00 2001 From: olebeck <31539311+olebeck@users.noreply.github.com> Date: Sat, 4 Mar 2023 03:25:13 +0100 Subject: [PATCH] fix wrong skins being saved, save skins immediately --- subcommands/skins/skinpack.go | 10 +++++++--- subcommands/skins/skins-proxy.go | 8 ++++---- subcommands/skins/skins.go | 31 +++++++++++-------------------- 3 files changed, 22 insertions(+), 27 deletions(-) diff --git a/subcommands/skins/skinpack.go b/subcommands/skins/skinpack.go index d400fb7..6685c67 100644 --- a/subcommands/skins/skinpack.go +++ b/subcommands/skins/skinpack.go @@ -33,7 +33,7 @@ type skinEntry struct { Type string `json:"type"` } -func NewSkinPack(name string) *SkinPack { +func NewSkinPack(name, fpath string) *SkinPack { return &SkinPack{ skins: make(map[uuid.UUID]_skinWithIndex), Name: name, @@ -100,7 +100,9 @@ func (s *SkinPack) Save(fpath, serverName string) error { if err != nil { return err } - if err := json.NewEncoder(f).Encode(geometryJson); err != nil { + e := json.NewEncoder(f) + e.SetIndent("", "\t") + if err := e.Encode(geometryJson); err != nil { return err } } @@ -110,7 +112,9 @@ func (s *SkinPack) Save(fpath, serverName string) error { if err != nil { return err } - if err := json.NewEncoder(f).Encode(skinsJson); err != nil { + e := json.NewEncoder(f) + e.SetIndent("", "\t") + if err := e.Encode(skinsJson); err != nil { return err } } diff --git a/subcommands/skins/skins-proxy.go b/subcommands/skins/skins-proxy.go index 171df92..a999c10 100644 --- a/subcommands/skins/skins-proxy.go +++ b/subcommands/skins/skins-proxy.go @@ -49,7 +49,10 @@ func (c *SkinProxyCMD) Execute(ctx context.Context, f *flag.FlagSet, _ ...interf return 1 } - s := NewSkinsSession(proxy, hostname) + outPathBase := fmt.Sprintf("skins/%s", hostname) + os.MkdirAll(outPathBase, 0o755) + + s := NewSkinsSession(proxy, hostname, outPathBase) s.OnlyIfHasGeometry = c.only_with_geometry s.PlayerNameFilter = c.filter @@ -64,9 +67,6 @@ func (c *SkinProxyCMD) Execute(ctx context.Context, f *flag.FlagSet, _ ...interf logrus.Error(err) } - outPathBase := fmt.Sprintf("skins/%s", hostname) - os.MkdirAll(outPathBase, 0o755) - s.Save(outPathBase) return 0 } diff --git a/subcommands/skins/skins.go b/subcommands/skins/skins.go index 594172e..c81e0a1 100644 --- a/subcommands/skins/skins.go +++ b/subcommands/skins/skins.go @@ -36,15 +36,17 @@ type skinsSession struct { OnlyIfHasGeometry bool ServerName string Proxy *utils.ProxyContext + fpath string playerSkinPacks map[uuid.UUID]*SkinPack playerNames map[uuid.UUID]string } -func NewSkinsSession(proxy *utils.ProxyContext, serverName string) *skinsSession { +func NewSkinsSession(proxy *utils.ProxyContext, serverName, fpath string) *skinsSession { return &skinsSession{ ServerName: serverName, Proxy: proxy, + fpath: fpath, playerSkinPacks: make(map[uuid.UUID]*SkinPack), playerNames: make(map[uuid.UUID]string), @@ -57,7 +59,7 @@ func (s *skinsSession) AddPlayerSkin(playerID uuid.UUID, playerName string, skin creating := fmt.Sprintf("Creating Skinpack for %s", playerName) s.Proxy.SendPopup(creating) logrus.Info(creating) - p = NewSkinPack(playerName) + p = NewSkinPack(playerName, s.fpath) s.playerSkinPacks[playerID] = p } if p.AddSkin(skin) { @@ -67,6 +69,9 @@ func (s *skinsSession) AddPlayerSkin(playerID uuid.UUID, playerName string, skin logrus.Info(added) } } + if err := p.Save(path.Join(s.fpath, playerName), s.ServerName); err != nil { + logrus.Error(err) + } } func (s *skinsSession) AddSkin(playerName string, playerID uuid.UUID, playerSkin *protocol.Skin) { @@ -90,8 +95,6 @@ func (s *skinsSession) AddSkin(playerName string, playerID uuid.UUID, playerSkin func (s *skinsSession) ProcessPacket(pk packet.Packet) { switch pk := pk.(type) { - case *packet.PlayerSkin: - s.AddSkin("", pk.UUID, &pk.Skin) case *packet.PlayerList: if pk.ActionType == 1 { // remove return @@ -106,17 +109,6 @@ func (s *skinsSession) ProcessPacket(pk packet.Packet) { } } -func (s *skinsSession) Save(fpath string) error { - logrus.Infof("Saving %d players", len(s.playerSkinPacks)) - for id, sp := range s.playerSkinPacks { - err := sp.Save(path.Join(fpath, s.playerNames[id]), s.ServerName) - if err != nil { - logrus.Warn(err) - } - } - return nil -} - type SkinCMD struct { serverAddress string filter string @@ -153,7 +145,10 @@ func (c *SkinCMD) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{} return true } - s := NewSkinsSession(proxy, hostname) + outPathBase := fmt.Sprintf("skins/%s", hostname) + os.MkdirAll(outPathBase, 0o755) + + s := NewSkinsSession(proxy, hostname, outPathBase) proxy.PacketCB = func(pk packet.Packet, _ *utils.ProxyContext, toServer bool, _ time.Time) (packet.Packet, error) { if !toServer { @@ -165,10 +160,6 @@ func (c *SkinCMD) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{} err = proxy.Run(ctx, address) if err != nil { logrus.Error(err) - } else { - outPathBase := fmt.Sprintf("skins/%s", hostname) - os.MkdirAll(outPathBase, 0o755) - s.Save(outPathBase) } return 0 }