package main import ( "bytes" "encoding/json" "fmt" "io" "os" "path/filepath" ) type Instance struct { InstanceName string ModpackId string ModpackVersion string } type InstanceManager struct { instances []Instance app *App } func (i *InstanceManager)SearchInstances() { i.instances = []Instance{} dir := i.app.PrismLauncher.GetInstanceDir() if _, err := os.Stat(dir); err != nil { return } subdirs, _ := os.ReadDir(dir) for _, d := range subdirs { if !d.IsDir() { continue } if _, err := os.Stat(filepath.Join(dir, d.Name(), "instance.json")); err != nil { continue } f, _ := os.OpenFile(filepath.Join(dir, d.Name(), "instance.json"), os.O_RDONLY, 0755) defer f.Close() buff := new(bytes.Buffer) io.Copy(buff, f) instance := Instance{} json.Unmarshal(buff.Bytes(), &instance) fmt.Printf("Found Instance: %+v\n", instance) i.instances = append(i.instances, instance) } } func (i *InstanceManager)InstallModpack(modpack Modpack, instanceName string){ i.app.Status(fmt.Sprintf("Installing %s", modpack.Name)) version := modpack.Versions[len(modpack.Versions)-1] dname, _ := os.MkdirTemp("", "fclauncher-*") f, _ := os.OpenFile(filepath.Join(dname, instanceName+".mrpack"), os.O_CREATE|os.O_RDWR, 0755) defer f.Close() HttpDownload(modpack.Id + "/" + version.File, f, i.app.Ctx) i.app.PrismLauncher.ImportModpack(f.Name()) instance := Instance{InstanceName: instanceName, ModpackVersion: version.Version, ModpackId: modpack.Id} i.instances = append(i.instances, instance) f, _ = os.OpenFile(filepath.Join(i.app.PrismLauncher.GetInstanceDir(), instanceName, "instance.json"), os.O_CREATE|os.O_RDWR, 0755) defer f.Close() data, _ := json.Marshal(instance) f.Write(data) } func (i *InstanceManager)GetInstances() []Instance{ return i.instances }