mirror of
https://github.com/packwiz/packwiz.git
synced 2025-04-19 21:16:30 +02:00
Add support for CF files marked with Quilt (fixes #127)
This commit is contained in:
parent
57b554d5e3
commit
d34728f347
@ -214,7 +214,7 @@ func createModFile(modInfo modInfo, fileInfo modFileInfo, index *core.Index, opt
|
||||
return index.RefreshFileWithHash(path, format, hash, true)
|
||||
}
|
||||
|
||||
func getLoader(pack core.Pack) int {
|
||||
func getSearchLoaderType(pack core.Pack) int {
|
||||
dependencies := pack.Versions
|
||||
|
||||
_, hasFabric := dependencies["fabric"]
|
||||
@ -222,8 +222,12 @@ func getLoader(pack core.Pack) int {
|
||||
_, hasForge := dependencies["forge"]
|
||||
if (hasFabric || hasQuilt) && hasForge {
|
||||
return modloaderTypeAny
|
||||
} else if hasFabric || hasQuilt { // Backwards-compatible; for now (could be configurable later)
|
||||
} else if hasFabric || hasQuilt {
|
||||
return modloaderTypeFabric
|
||||
} else if hasQuilt {
|
||||
// Backwards-compatible with Fabric for now (could be configurable later)
|
||||
// since we can't filter by more than one loader, just accept any and filter the response
|
||||
return modloaderTypeAny
|
||||
} else if hasForge {
|
||||
return modloaderTypeForge
|
||||
} else {
|
||||
@ -231,23 +235,41 @@ func getLoader(pack core.Pack) int {
|
||||
}
|
||||
}
|
||||
|
||||
func matchLoaderType(packLoaderType int, modLoaderType int) bool {
|
||||
if packLoaderType == modloaderTypeAny || modLoaderType == modloaderTypeAny {
|
||||
func getLoaders(pack core.Pack) (loaders []string) {
|
||||
_, hasFabric := pack.Versions["fabric"]
|
||||
if hasFabric {
|
||||
loaders = append(loaders, "fabric")
|
||||
}
|
||||
if _, hasQuilt := pack.Versions["quilt"]; hasQuilt {
|
||||
// Backwards-compatible with Fabric for now (could be configurable later)
|
||||
if !hasFabric {
|
||||
loaders = append(loaders, "fabric")
|
||||
}
|
||||
loaders = append(loaders, "quilt")
|
||||
}
|
||||
if _, hasForge := pack.Versions["forge"]; hasForge {
|
||||
loaders = append(loaders, "forge")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func matchLoaderType(packLoaders []string, modLoaderType int) bool {
|
||||
if len(packLoaders) == 0 || modLoaderType == modloaderTypeAny {
|
||||
return true
|
||||
} else {
|
||||
return packLoaderType == modLoaderType
|
||||
return slices.Contains(packLoaders, modloaderIds[modLoaderType])
|
||||
}
|
||||
}
|
||||
|
||||
func matchLoaderTypeFileInfo(packLoaderType int, fileInfoData modFileInfo) bool {
|
||||
if packLoaderType == modloaderTypeAny {
|
||||
func matchLoaderTypeFileInfo(packLoaders []string, fileInfoData modFileInfo) bool {
|
||||
if len(packLoaders) == 0 {
|
||||
return true
|
||||
} else {
|
||||
containsLoader := false
|
||||
for i, name := range modloaderNames {
|
||||
if slices.Contains(fileInfoData.GameVersions, name) {
|
||||
containsLoader = true
|
||||
if i == packLoaderType {
|
||||
if slices.Contains(packLoaders, modloaderIds[i]) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
@ -339,7 +361,7 @@ func (u cfUpdater) CheckUpdate(mods []core.Mod, mcVersion string, pack core.Pack
|
||||
}
|
||||
}
|
||||
|
||||
packLoaderType := getLoader(pack)
|
||||
packLoaders := getLoaders(pack)
|
||||
|
||||
for i, v := range mods {
|
||||
projectRaw, ok := v.GetParsedUpdateData("curseforge")
|
||||
@ -358,7 +380,7 @@ func (u cfUpdater) CheckUpdate(mods []core.Mod, mcVersion string, pack core.Pack
|
||||
// For snapshots, curseforge doesn't put them in GameVersionLatestFiles
|
||||
for _, v := range modInfos[i].LatestFiles {
|
||||
// Choose "newest" version by largest ID
|
||||
if matchGameVersions(mcVersion, v.GameVersions) && v.ID > fileID && matchLoaderTypeFileInfo(packLoaderType, v) {
|
||||
if matchGameVersions(mcVersion, v.GameVersions) && v.ID > fileID && matchLoaderTypeFileInfo(packLoaders, v) {
|
||||
updateAvailable = true
|
||||
fileID = v.ID
|
||||
fileInfoData = v
|
||||
@ -371,7 +393,7 @@ func (u cfUpdater) CheckUpdate(mods []core.Mod, mcVersion string, pack core.Pack
|
||||
// TODO: change to timestamp-based comparison??
|
||||
// TODO: manage alpha/beta/release correctly, check update channel?
|
||||
// Choose "newest" version by largest ID
|
||||
if matchGameVersion(mcVersion, file.GameVersion) && file.ID > fileID && matchLoaderType(packLoaderType, file.Modloader) {
|
||||
if matchGameVersion(mcVersion, file.GameVersion) && file.ID > fileID && matchLoaderType(packLoaders, file.Modloader) {
|
||||
updateAvailable = true
|
||||
fileID = file.ID
|
||||
fileName = file.Name
|
||||
|
@ -89,9 +89,9 @@ var installCmd = &cobra.Command{
|
||||
var cancelled bool
|
||||
if slug == "" {
|
||||
searchTerm := strings.Join(args, " ")
|
||||
cancelled, modInfoData = searchCurseforgeInternal(searchTerm, false, game, category, mcVersion, getLoader(pack))
|
||||
cancelled, modInfoData = searchCurseforgeInternal(searchTerm, false, game, category, mcVersion, getSearchLoaderType(pack))
|
||||
} else {
|
||||
cancelled, modInfoData = searchCurseforgeInternal(slug, true, game, category, mcVersion, getLoader(pack))
|
||||
cancelled, modInfoData = searchCurseforgeInternal(slug, true, game, category, mcVersion, getSearchLoaderType(pack))
|
||||
}
|
||||
if cancelled {
|
||||
return
|
||||
@ -114,7 +114,7 @@ var installCmd = &cobra.Command{
|
||||
}
|
||||
|
||||
var fileInfoData modFileInfo
|
||||
fileInfoData, err = getLatestFile(modInfoData, mcVersion, fileID, getLoader(pack))
|
||||
fileInfoData, err = getLatestFile(modInfoData, mcVersion, fileID, getLoaders(pack))
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to get file for project: %v\n", err)
|
||||
os.Exit(1)
|
||||
@ -187,7 +187,7 @@ var installCmd = &cobra.Command{
|
||||
depIDPendingQueue = depIDPendingQueue[:0]
|
||||
|
||||
for _, currData := range depInfoData {
|
||||
depFileInfo, err := getLatestFile(currData, mcVersion, 0, getLoader(pack))
|
||||
depFileInfo, err := getLatestFile(currData, mcVersion, 0, getLoaders(pack))
|
||||
if err != nil {
|
||||
fmt.Printf("Error retrieving dependency data: %s\n", err.Error())
|
||||
continue
|
||||
@ -278,7 +278,7 @@ func (r modResultsList) Len() int {
|
||||
return len(r)
|
||||
}
|
||||
|
||||
func searchCurseforgeInternal(searchTerm string, isSlug bool, game string, category string, mcVersion string, packLoaderType int) (bool, modInfo) {
|
||||
func searchCurseforgeInternal(searchTerm string, isSlug bool, game string, category string, mcVersion string, searchLoaderType int) (bool, modInfo) {
|
||||
if isSlug {
|
||||
fmt.Println("Looking up CurseForge slug...")
|
||||
} else {
|
||||
@ -351,7 +351,7 @@ func searchCurseforgeInternal(searchTerm string, isSlug bool, game string, categ
|
||||
} else {
|
||||
search = searchTerm
|
||||
}
|
||||
results, err := cfDefaultClient.getSearch(search, slug, gameID, classID, categoryID, filterGameVersion, packLoaderType)
|
||||
results, err := cfDefaultClient.getSearch(search, slug, gameID, classID, categoryID, filterGameVersion, searchLoaderType)
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to search for project: %v\n", err)
|
||||
os.Exit(1)
|
||||
@ -409,7 +409,7 @@ func searchCurseforgeInternal(searchTerm string, isSlug bool, game string, categ
|
||||
}
|
||||
}
|
||||
|
||||
func getLatestFile(modInfoData modInfo, mcVersion string, fileID int, packLoaderType int) (modFileInfo, error) {
|
||||
func getLatestFile(modInfoData modInfo, mcVersion string, fileID int, packLoaders []string) (modFileInfo, error) {
|
||||
if fileID == 0 {
|
||||
var fileInfoData modFileInfo
|
||||
fileInfoObtained := false
|
||||
@ -419,7 +419,7 @@ func getLatestFile(modInfoData modInfo, mcVersion string, fileID int, packLoader
|
||||
for _, v := range modInfoData.LatestFiles {
|
||||
anyFileObtained = true
|
||||
// Choose "newest" version by largest ID
|
||||
if matchGameVersions(mcVersion, v.GameVersions) && v.ID > fileID && matchLoaderTypeFileInfo(packLoaderType, v) {
|
||||
if matchGameVersions(mcVersion, v.GameVersions) && v.ID > fileID && matchLoaderTypeFileInfo(packLoaders, v) {
|
||||
fileID = v.ID
|
||||
fileInfoData = v
|
||||
fileInfoObtained = true
|
||||
@ -429,7 +429,7 @@ func getLatestFile(modInfoData modInfo, mcVersion string, fileID int, packLoader
|
||||
for _, v := range modInfoData.GameVersionLatestFiles {
|
||||
anyFileObtained = true
|
||||
// Choose "newest" version by largest ID
|
||||
if matchGameVersion(mcVersion, v.GameVersion) && v.ID > fileID && matchLoaderType(packLoaderType, v.Modloader) {
|
||||
if matchGameVersion(mcVersion, v.GameVersion) && v.ID > fileID && matchLoaderType(packLoaders, v.Modloader) {
|
||||
fileID = v.ID
|
||||
fileInfoObtained = false // Make sure we get the file info
|
||||
}
|
||||
|
@ -110,6 +110,7 @@ const (
|
||||
modloaderTypeCauldron
|
||||
modloaderTypeLiteloader
|
||||
modloaderTypeFabric
|
||||
modloaderTypeQuilt
|
||||
)
|
||||
|
||||
var modloaderNames = [...]string{
|
||||
@ -118,6 +119,16 @@ var modloaderNames = [...]string{
|
||||
"Cauldron",
|
||||
"Liteloader",
|
||||
"Fabric",
|
||||
"Quilt",
|
||||
}
|
||||
|
||||
var modloaderIds = [...]string{
|
||||
"",
|
||||
"forge",
|
||||
"cauldron",
|
||||
"liteloader",
|
||||
"fabric",
|
||||
"quilt",
|
||||
}
|
||||
|
||||
//noinspection GoUnusedConst
|
||||
|
Loading…
x
Reference in New Issue
Block a user