diff --git a/data/registry/template.go.tmpl b/data/registry/template.go.tmpl deleted file mode 100644 index f1778d4..0000000 --- a/data/registry/template.go.tmpl +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by {{Generator}}; DO NOT EDIT. - -package {{ .PackageName }} - -{{ $typeName := .TypeName}} -type {{$typeName}} int - -func (n {{$typeName}}) String() string { - if n < 0 || int(n) >= len(names) { - return "" - } - return names[n] -} - -const ( -{{- range $index, $elem := .Entries}} - {{$elem | ToGoTypeName}} {{if eq $index 0 -}} {{$typeName}} = iota {{- end}} -{{- end}} -) - -var names = []string{ -{{- range $index, $elem := .Entries}} - {{printf "%q" $elem}}, -{{- end}} -} \ No newline at end of file diff --git a/data/registry/generate.go b/data/registryid/generator/generate.go similarity index 74% rename from data/registry/generate.go rename to data/registryid/generator/generate.go index 17819f5..ea97f6a 100644 --- a/data/registry/generate.go +++ b/data/registryid/generator/generate.go @@ -8,6 +8,7 @@ import ( "log" "os" "path/filepath" + "strings" "text/template" "github.com/Tnze/go-mc/internal/generateutils" @@ -56,11 +57,15 @@ func main() { log.Fatal(err) } - generateRegistry(registries["minecraft:block_entity_type"], "BlockEntityType", "blockentitytype") - generateRegistry(registries["minecraft:entity_type"], "EntityType", "entitytype") + for key, reg := range registries { + registryName := strings.TrimPrefix(key, "minecraft:") + typeName := generateutils.ToGoTypeName(strings.ReplaceAll(registryName, "/", "_")) + filename := strings.NewReplacer("_", "", "/", "_").Replace(registryName) + generateRegistry(reg, typeName, filename) + } } -func generateRegistry(r registry, typeName, packageName string) { +func generateRegistry(r registry, typeName, filename string) { entries := make([]string, len(r.Entries)) for name, v := range r.Entries { entries[v.ProtocolID] = name @@ -68,7 +73,7 @@ func generateRegistry(r registry, typeName, packageName string) { var buff bytes.Buffer err := temp.Execute(&buff, tempData{ - PackageName: packageName, + PackageName: filename, Default: r.Default, Entries: entries, TypeName: typeName, @@ -79,10 +84,11 @@ func generateRegistry(r registry, typeName, packageName string) { formattedSource, err := format.Source(buff.Bytes()) if err != nil { - log.Fatal(err) + log.Print(filename, err) + formattedSource = buff.Bytes() } - err = os.WriteFile(filepath.Join(packageName, packageName+".go"), formattedSource, 0o666) + err = os.WriteFile(filepath.Join("..", filename+".go"), formattedSource, 0o666) if err != nil { log.Fatal(err) } diff --git a/data/registry/registries.json b/data/registryid/generator/registries.json similarity index 100% rename from data/registry/registries.json rename to data/registryid/generator/registries.json diff --git a/data/registryid/generator/template.go.tmpl b/data/registryid/generator/template.go.tmpl new file mode 100644 index 0000000..5ce0c7c --- /dev/null +++ b/data/registryid/generator/template.go.tmpl @@ -0,0 +1,11 @@ +// Code generated by {{Generator}}; DO NOT EDIT. + +package registryid + +{{ $typeName := .TypeName}} + +var {{$typeName}} = []string{ +{{- range $index, $elem := .Entries}} + {{printf "%q" $elem}}, +{{- end}} +} diff --git a/registry/registry.go b/registry/registry.go index 2413572..8cf3a2b 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -40,9 +40,9 @@ func (r *Registry[E]) GetByID(id int32) *E { return nil } -func (r *Registry[E]) Put(name string, data E) (id int32, val *E) { +func (r *Registry[E]) Put(key string, data E) (id int32, val *E) { id = int32(len(r.values)) - r.keys[name] = id + r.keys[key] = id r.values = append(r.values, data) val = &r.values[id] r.indices[val] = id