mc2se/main.go
2025-05-06 11:29:20 -07:00

82 lines
1.9 KiB
Go

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)
}
}