summaryrefslogtreecommitdiff
path: root/listmaps.go
diff options
context:
space:
mode:
Diffstat (limited to 'listmaps.go')
-rw-r--r--listmaps.go54
1 files changed, 54 insertions, 0 deletions
diff --git a/listmaps.go b/listmaps.go
new file mode 100644
index 0000000..ea43890
--- /dev/null
+++ b/listmaps.go
@@ -0,0 +1,54 @@
+package main
+
+import (
+ "fmt"
+ "os"
+ "path"
+ "runtime"
+)
+
+func allMaps() map[string]string {
+ savesDir := ""
+ switch runtime.GOOS {
+ case "linux":
+ savesDir = fmt.Sprintf("%s/.minecraft/saves", os.Getenv("HOME"))
+ case "darwin":
+ savesDir = fmt.Sprintf("%s/Library/Application Support/minecraft/saves", os.Getenv("HOME"))
+ case "windows":
+ savesDir = fmt.Sprintf(`%s\.minecraft`, os.Getenv("appdata"))
+ default:
+ return nil
+ }
+
+ f, err := os.Open(savesDir)
+ if err != nil {
+ return nil
+ }
+ defer f.Close()
+ fi, err := f.Stat()
+ if (err != nil) || (!fi.IsDir()) {
+ return nil
+ }
+
+ infos, err := f.Readdir(-1)
+ if err != nil {
+ return nil
+ }
+
+ maps := make(map[string]string)
+ for _, info := range infos {
+ if !info.IsDir() {
+ continue
+ }
+ p := path.Join(savesDir, info.Name())
+
+ fi, err := os.Stat(path.Join(p, "level.dat"))
+ if (err != nil) || (!fi.Mode().IsRegular()) {
+ continue
+ }
+
+ maps[info.Name()] = path.Join(p, "region")
+ }
+
+ return maps
+}