A Minecraft datapack generator written in go.
1package generator
2
3import (
4 "os"
5 "path"
6 "path/filepath"
7 "strings"
8)
9
10// todo: transform this to use concurrency
11func Generate(namespace string, features []Feature, outputDirectory string) error {
12 for _, feature := range features {
13 file, err := feature.Emit()
14 if err != nil {
15 return err
16 }
17
18 path := path.Join(outputDirectory, namespace, strings.ReplaceAll(file.Path, "%namespace%",namespace))
19 if err := writeFile(path, file.Content); err != nil {
20 return err
21 }
22 }
23 return nil
24}
25
26func writeFile(path string, content []byte) error {
27 if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
28 return err
29 }
30
31 file, err := os.Create(path)
32 if err != nil {
33 return err
34 }
35
36 defer file.Close()
37
38 _, err = file.Write(content)
39 if err != nil {
40 return err
41 }
42
43 return nil
44}