Finalized Modpack installation.

This commit is contained in:
= 2024-11-25 14:28:32 -07:00
parent f905d617a8
commit 2b372423eb

View File

@ -6,6 +6,7 @@ import (
"encoding/json"
"fmt"
"io"
"net/http"
"os"
"os/exec"
"path/filepath"
@ -488,6 +489,8 @@ func (i *InstanceManager) ImportModpack(modpack Modpack, name string) {
}
func (i *InstanceManager) ImportMrpack(data io.Reader, name string) {
dir, _ := os.UserConfigDir()
InstancePath := filepath.Join(dir, "FCLauncher", "instances", name, "minecraft")
zr := zipstream.NewReader(data)
mrdata := MrData{}
for {
@ -499,7 +502,22 @@ func (i *InstanceManager) ImportMrpack(data io.Reader, name string) {
file, _ := entry.Open()
data, _ := io.ReadAll(file)
json.Unmarshal(data, &mrdata)
break
} else {
prefix := strings.Split(entry.Name, "/")[0]
if prefix == "overrides" || prefix == "client-overrides" {
path := strings.SplitN(entry.Name, "/", 2)[1]
if entry.IsDir() {
if _, err := os.Stat(filepath.Join(InstancePath, path)); err != nil {
os.MkdirAll(filepath.Join(InstancePath, path), 0755)
}
} else {
zf, _ := entry.Open()
defer zf.Close()
file, _ := os.OpenFile(filepath.Join(InstancePath, path), os.O_CREATE|os.O_RDWR, 0755)
defer file.Close()
io.Copy(file, zf)
}
}
}
}
fmt.Printf("Installing minecraft %s\n", mrdata.Dependencies["minecraft"])
@ -517,4 +535,27 @@ func (i *InstanceManager) ImportMrpack(data io.Reader, name string) {
fmt.Printf("Installing quilt %s\n", mrdata.Dependencies["quilt-loader"])
i.InstallQuilt(name, mrdata.Dependencies["quilt-loader"])
}
for _, f := range mrdata.Files {
fmt.Printf("Downloading %s\n", f.Path)
resp, err := http.Get(f.Downloads[0])
if err != nil {
fmt.Printf("Unable to download file %s\n", err)
continue
}
defer resp.Body.Close()
fileDir := ""
tokens := strings.Split(f.Path, "/")
for ind, token := range tokens {
if ind != len(tokens)-1 {
fileDir = filepath.Join(fileDir, token)
}
}
if _, err := os.Stat(filepath.Join(InstancePath, fileDir)); err != nil {
os.MkdirAll(filepath.Join(InstancePath, fileDir), 0755)
}
file, _ := os.OpenFile(filepath.Join(InstancePath, f.Path), os.O_CREATE|os.O_RDWR, 0755)
defer file.Close()
io.Copy(file, resp.Body)
}
}