fix wrong skins being saved, save skins immediately
This commit is contained in:
parent
5485182135
commit
17572e8e94
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue