package main import ( "flag" "fmt" "log" "os" "github.com/elvis972602/go-litematica-tools/schematic" ) func main() { // add flag for scale multiplier // add flag for output file name // add flag for input file name // flagScale := flag.Float64("scale", 1.0, "scale multiplier") flagInput := flag.String("input", "test.litematic", "input file name") flagOutput := flag.String("output", "output.xml", "output file name") flag.Parse() file, err := os.Open(*flagInput) if err != nil { panic(err) } defer file.Close() project, err := schematic.LoadFromFile(file) if err != nil { panic(err) } else { fmt.Println("Schematic loaded") } // log.Println("Project metadata:", project.MetaData) // log.Println("Project version:", project.Version) // log.Println("Project minecraft data version:", project.MinecraftDataVersion) // log.Println("Project region name:", project.RegionName) // Get the region size from the project.MetaData.EnclosingSize (vec3d) xSize := project.MetaData.EnclosingSize.X ySize := project.MetaData.EnclosingSize.Y zSize := project.MetaData.EnclosingSize.Z log.Println("Project region size:", xSize, ySize, zSize) loadDefinitions() convertColors() var blocklist string for x := 0; x < int(xSize); x++ { for y := 0; y < int(ySize); y++ { for z := 0; z < int(zSize); z++ { blockState := project.GetBlock(x, y, z) if blockState.Name == "minecraft:air" { continue } log.Println("Converting block:", blockState.Name) color, blockType := convertBlock(blockState) log.Println("> ", blockType, color) log.Println("> ", x, y, z) log.Println("") blocklist += writeBlock(blockType, color, []int{x, y, z}, blockState.Name) } } } // write the blueprint xmlOutput := xmlHeader + blocklist + xmlFooter // write the blueprint to file f, err := os.Create(*flagOutput) if err != nil { panic(err) } defer f.Close() _, err = f.WriteString(xmlOutput) if err != nil { panic(err) } }