82 lines
1.9 KiB
Go
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)
|
|
}
|
|
|
|
}
|