/
find.go
72 lines (59 loc) · 1.38 KB
/
find.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package server
import (
"errors"
"os"
"path/filepath"
"github.com/billy4479/server-tool/config"
)
func FindServers() ([]Server, error) {
serverDirs, err := os.ReadDir(config.C.Application.WorkingDir)
if err != nil {
return nil, err
}
servers := []Server{}
for _, e := range serverDirs {
var s Server
s.BaseDir = filepath.Join(config.C.Application.WorkingDir, e.Name())
if !e.IsDir() {
continue
}
entries, err := os.ReadDir(s.BaseDir)
if err != nil {
return nil, err
}
s.Type = Vanilla
for _, entry := range entries {
if !entry.IsDir() {
if entry.Name() == VanillaJarName {
possibleServerJar := filepath.Join(s.BaseDir, entry.Name())
err = detectServerVersion(possibleServerJar, &s)
if err != nil {
return nil, err
}
if s.Version == nil {
// server.jar is not a Minecraft server
break
}
} else if entry.Name() == FabricJarName {
s.Type = Fabric
} else if entry.Name() == config.C.StartScript.Name {
s.HasStartScript = !config.C.StartScript.Disable
}
} else {
if entry.Name() == GitDirectoryName {
s.HasGit = !config.C.Git.Disable
}
}
}
if s.Version == nil && !s.HasStartScript {
continue
}
s.Name = e.Name()
setStartFn(&s)
servers = append(servers, s)
}
if len(servers) == 0 {
return servers, errors.New("No server were found!")
}
return servers, nil
}