diff --git a/internal/pkg/game/version.go b/internal/pkg/game/version.go index e8b9d69..d68442b 100644 --- a/internal/pkg/game/version.go +++ b/internal/pkg/game/version.go @@ -83,8 +83,9 @@ type ( // Version manager type VersionManager struct { - cacheFile string - manifestV2 *VersionManifestV2 + cacheFile string + manifestV2 *VersionManifestV2 + triedToUpdate bool } func NewVersionManager(dataDir string) (*VersionManager, error) { @@ -117,8 +118,14 @@ func NewVersionManager(dataDir string) (*VersionManager, error) { func (m *VersionManager) FindVanilla(name string) (*gameModel.VersionInfo, error) { v, ok := m.manifestV2.Vanilla.Versions[strings.ToLower(name)] if !ok { - return nil, ErrUnknownVersion + if m.triedToUpdate { + return nil, ErrUnknownVersion + } + m.triedToUpdate = true + m.updateManifest() + return m.FindVanilla(name) } + m.triedToUpdate = false return v, nil } @@ -129,8 +136,14 @@ func (m *VersionManager) FindFabric(name, loader string) (*gameModel.VersionInfo partial, ok := m.manifestV2.Fabric.Versions[strings.ToLower(name)] if !ok { - return nil, ErrUnknownFabricVersion + if m.triedToUpdate { + return nil, ErrUnknownFabricVersion + } + m.triedToUpdate = true + m.updateManifest() + return m.FindFabric(name, loader) } + m.triedToUpdate = false return &gameModel.VersionInfo{ Id: fmt.Sprintf(partial.Id, loader),