@@ -4,40 +4,102 @@ import (
44 "embed"
55 "fmt"
66 "os"
7+ "strconv"
78 s "strings"
89)
910
1011//go:embed templates/*
1112var templates embed.FS
1213
14+ // Gets text content from embedded template file
15+ func getTemplate (file string ) (text string ) {
16+ data , err := templates .ReadFile ("templates/" + file )
17+ Check (err )
18+ return string (data )
19+ }
20+
1321var version = "2.0.0"
1422
1523func main () {
16- fmt .Printf ("\n -- Welcome to Datapack Generator %s by RoarkCats --\n " , version )
24+ fmt .Printf ("\n -- Welcome to Datapack Generator %s by RoarkCats --\n \n " , version )
1725
26+ // --- Get datapack info
1827 pack_name := Input (" Datapack Name: " )
1928 pack_namespace := Input (" Datapack Namespace: " )
2029 pack_author := Input (" Datapack Author: " )
21- pack_ver := getVer ()
22- if pack_ver < 18 && s .ToLower (Input (" Import Rng? (y/n) " )) == "y" {
23- // make rng
30+ pack_ver := getVer (Input (" Version: " ))
31+
32+ pack_ver_min := 0
33+ if pack_ver >= 18 {
34+ inp := Input (" Supported Version Range? : " )
35+ if inp != "" {
36+ pack_ver_min = getVer (inp )
37+ if pack_ver_min > pack_ver {
38+ pack_ver , pack_ver_min = pack_ver_min , pack_ver
39+ }
40+ }
2441 }
25- fmt .Printf ("%s %s %s %d" , pack_name , pack_namespace , pack_author , pack_ver )
2642
27- dat , err := os .ReadFile ("./wah.txt" )
28- if err != nil {
29- // panic(err)
43+ // --- Create folders
44+ _s := "" // legacy folder name support
45+ if pack_ver < 48 {
46+ _s = "s"
47+ }
48+ Check (os .MkdirAll (pack_name + "/data/" + pack_namespace + "/function" + _s , 0755 ))
49+ Check (os .MkdirAll (pack_name + "/data/minecraft/tags/function" + _s , 0755 ))
50+
51+ // --- Create files from templates
52+ fillTemplate := func (template string ) string {
53+ template = s .ReplaceAll (template , "%name%" , pack_name )
54+ template = s .ReplaceAll (template , "%namespace%" , pack_namespace )
55+ template = s .ReplaceAll (template , "%author%" , pack_author )
56+ template = s .ReplaceAll (template , "%format%" , strconv .Itoa (pack_ver ))
57+ template = s .ReplaceAll (template , "%min_format%" , strconv .Itoa (pack_ver_min ))
58+ return template
59+ } // helper funcs to get, fill, and write templates
60+ makePackTemplate := func (filedir string , template string ) {
61+ Check (os .WriteFile (pack_name + "/" + filedir , []byte (fillTemplate (getTemplate (template ))), 0644 ))
62+ }
63+ makePackTemplate ("data/minecraft/tags/function" + _s + "/load.json" , "load.json" )
64+ makePackTemplate ("data/minecraft/tags/function" + _s + "/tick.json" , "tick.json" )
65+ makePackTemplate ("data/" + pack_namespace + "/function" + _s + "/load.mcfunction" , "load.mcfunction" )
66+ makePackTemplate ("data/" + pack_namespace + "/function" + _s + "/main.mcfunction" , "main.mcfunction" )
67+
68+ // --- New mcmeta formats
69+ if pack_ver_min == 0 {
70+ makePackTemplate ("pack.mcmeta" , "pack.mcmeta" )
3071 } else {
31- fmt .Println (string (dat ))
72+ makePackTemplate ("pack.mcmeta" , "pack-range.mcmeta" )
73+ }
74+
75+ // --- Import legacy RNG
76+ if pack_ver < 18 && s .ToLower (Input (" Import Rng? (y/n) " )) == "y" {
77+
78+ Check (os .MkdirAll (pack_name + "/data/" + pack_namespace + "/function" + _s + "/rng" , 0755 ))
79+
80+ AppendFile (pack_name + "/data/" + pack_namespace + "/function" + _s + "/load.mcfunction" , "\n \n function " + pack_namespace + ":rng/setup" )
81+
82+ makePackTemplate ("data/" + pack_namespace + "/function" + _s + "/rng/lcg.mcfunction" , "rng/lcg.mcfunction" )
83+ makePackTemplate ("data/" + pack_namespace + "/function" + _s + "/rng/next_int_lcg.mcfunction" , "rng/next_int_lcg.mcfunction" )
84+ makePackTemplate ("data/" + pack_namespace + "/function" + _s + "/rng/range_lcg.mcfunction" , "rng/range_lcg.mcfunction" )
85+ makePackTemplate ("data/" + pack_namespace + "/function" + _s + "/rng/setup.mcfunction" , "rng/setup.mcfunction" )
86+
87+ uuid_reset := fillTemplate (getTemplate ("rng/uuid_reset.mcfunction" ))
88+ if pack_ver < 6 { // uuid reset source (super)legacy support
89+ uuid_reset = s .Replace (uuid_reset , "UUID[0] 1" , "UUIDMost 0.00000000023283064365386962890625" , 1 )
90+ }
91+ Check (os .WriteFile (pack_name + "/" + "data/" + pack_namespace + "/function" + _s + "/rng/uuid_reset.mcfunction" , []byte (uuid_reset ), 0644 ))
3292 }
3393
94+ // --- Done!
95+ fmt .Print ("\n Done!\n " )
96+
3497 // for compilation
35- // fmt.Scanf("%s")
98+ fmt .Scanf ("%s" )
3699}
37100
38- // Get pack format from "version" (MC or format)
39- func getVer () (version int ) {
40- ver := Input (" Version: " )
101+ // Prompt pack format from "version" (MC or format)
102+ func getVer (ver string ) (version int ) {
41103
42104 // basic format number
43105 _ , err := fmt .Sscanf (ver , "%d " , & version )
@@ -87,6 +149,13 @@ func getVer() (version int) {
87149 }[minor * 100 + patch ]
88150 return version
89151 }
90-
152+ // else latest
153+ fmt .Println (" Invalid version! Selecting latest." )
91154 return 81
92155}
156+
157+ func Check (err error ) {
158+ if err != nil {
159+ panic (err )
160+ }
161+ }
0 commit comments