|
|
@ -6,7 +6,7 @@ use pomelo::pomelo; |
|
|
|
use rgb::*; |
|
|
|
use rgb::*; |
|
|
|
use std::collections::HashMap; |
|
|
|
use std::collections::HashMap; |
|
|
|
use std::fs; |
|
|
|
use std::fs; |
|
|
|
use std::io::{Error, ErrorKind, Read}; |
|
|
|
use std::io::{Error, ErrorKind, Read, Write}; |
|
|
|
|
|
|
|
|
|
|
|
mod astree; |
|
|
|
mod astree; |
|
|
|
mod error; |
|
|
|
mod error; |
|
|
@ -477,15 +477,15 @@ fn main() -> Result<(), error::Error> { |
|
|
|
let mut total_blocks: i32 = 0; |
|
|
|
let mut total_blocks: i32 = 0; |
|
|
|
let mut total_volume: i32 = 0; |
|
|
|
let mut total_volume: i32 = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let filled_in = RGBA8::new(0, 0, 0, 255); // Black
|
|
|
|
|
|
|
|
let empty = RGBA8::new(255, 255, 255, 255); // White
|
|
|
|
|
|
|
|
let multiple_filled_in = RGBA8::new(0, 0, 255, 255); // Blue
|
|
|
|
|
|
|
|
let multiple_empty = RGBA8::new(255, 255, 0, 255); // Yellow
|
|
|
|
|
|
|
|
let grid = RGBA8::new(255, 128, 128, 255); // Coral (Grid)
|
|
|
|
|
|
|
|
|
|
|
|
for z in min_z..=max_z { |
|
|
|
for z in min_z..=max_z { |
|
|
|
let name = format! {"{}/layer{:04}.png",output_folder,1 + z - min_z}; |
|
|
|
let name = format! {"{}/layer{:04}.png",output_folder,1 + z - min_z}; |
|
|
|
|
|
|
|
|
|
|
|
let filled_in = RGBA8::new(0, 0, 0, 255); // Black
|
|
|
|
|
|
|
|
let empty = RGBA8::new(255, 255, 255, 255); // White
|
|
|
|
|
|
|
|
let multiple_filled_in = RGBA8::new(0, 0, 255, 255); // Blue
|
|
|
|
|
|
|
|
let multiple_empty = RGBA8::new(255, 255, 0, 255); // Yellow
|
|
|
|
|
|
|
|
let grid = RGBA8::new(255, 128, 128, 255); // Coral (Grid)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let mut pixels: Vec<RGBA8> = Vec::with_capacity(pix_size); |
|
|
|
let mut pixels: Vec<RGBA8> = Vec::with_capacity(pix_size); |
|
|
|
|
|
|
|
|
|
|
|
pixels.resize(pix_size, grid); |
|
|
|
pixels.resize(pix_size, grid); |
|
|
@ -556,10 +556,93 @@ fn main() -> Result<(), error::Error> { |
|
|
|
} |
|
|
|
} |
|
|
|
lodepng::encode32_file(name, &pixels, pix_width, pix_height)?; |
|
|
|
lodepng::encode32_file(name, &pixels, pix_width, pix_height)?; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if counter != 0 { |
|
|
|
if counter != 0 { |
|
|
|
lite_block_data.push(working); |
|
|
|
lite_block_data.push(working); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let mut manif_file = fs::File::create(format! {"{}/manifest.txt",output_folder})?; |
|
|
|
|
|
|
|
let stacks = if total_blocks % 64 == 0 { |
|
|
|
|
|
|
|
total_blocks / 64 |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
1 + total_blocks / 64 |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
let chests = if stacks % 27 == 0 { |
|
|
|
|
|
|
|
stacks / 27 |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
1 + stacks / 27 |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
let doubles = if chests % 2 == 0 { |
|
|
|
|
|
|
|
chests / 2 |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
1 + chests / 2 |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
writeln!(manif_file, "Rounded up totals:")?; |
|
|
|
|
|
|
|
writeln!( |
|
|
|
|
|
|
|
manif_file, |
|
|
|
|
|
|
|
"{} double chest{}", |
|
|
|
|
|
|
|
doubles, |
|
|
|
|
|
|
|
if doubles == 1 { "" } else { "s" } |
|
|
|
|
|
|
|
)?; |
|
|
|
|
|
|
|
writeln!( |
|
|
|
|
|
|
|
manif_file, |
|
|
|
|
|
|
|
"or {} chest{}", |
|
|
|
|
|
|
|
chests, |
|
|
|
|
|
|
|
if chests == 1 { "" } else { "s" } |
|
|
|
|
|
|
|
)?; |
|
|
|
|
|
|
|
writeln!( |
|
|
|
|
|
|
|
manif_file, |
|
|
|
|
|
|
|
"or {} stack{}", |
|
|
|
|
|
|
|
stacks, |
|
|
|
|
|
|
|
if stacks == 1 { "" } else { "s" } |
|
|
|
|
|
|
|
)?; |
|
|
|
|
|
|
|
writeln!( |
|
|
|
|
|
|
|
manif_file, |
|
|
|
|
|
|
|
"or {} block{}\n", |
|
|
|
|
|
|
|
total_blocks, |
|
|
|
|
|
|
|
if total_blocks == 1 { "" } else { "s" } |
|
|
|
|
|
|
|
)?; |
|
|
|
|
|
|
|
let doubles = total_blocks / (64 * 54); |
|
|
|
|
|
|
|
let chests = (total_blocks % (64 * 54)) / (27 * 64); |
|
|
|
|
|
|
|
let stacks = (total_blocks % (64 * 27)) / 64; |
|
|
|
|
|
|
|
let blocks = total_blocks % 64; |
|
|
|
|
|
|
|
writeln!(manif_file, "Exact compound number of blocks:")?; |
|
|
|
|
|
|
|
writeln!( |
|
|
|
|
|
|
|
manif_file, |
|
|
|
|
|
|
|
"{} double chest{}", |
|
|
|
|
|
|
|
doubles, |
|
|
|
|
|
|
|
if doubles == 1 { "" } else { "s" } |
|
|
|
|
|
|
|
)?; |
|
|
|
|
|
|
|
writeln!( |
|
|
|
|
|
|
|
manif_file, |
|
|
|
|
|
|
|
"+ {} chest{}", |
|
|
|
|
|
|
|
chests, |
|
|
|
|
|
|
|
if chests == 1 { "" } else { "s" } |
|
|
|
|
|
|
|
)?; |
|
|
|
|
|
|
|
writeln!( |
|
|
|
|
|
|
|
manif_file, |
|
|
|
|
|
|
|
"+ {} stack{}", |
|
|
|
|
|
|
|
stacks, |
|
|
|
|
|
|
|
if stacks == 1 { "" } else { "s" } |
|
|
|
|
|
|
|
)?; |
|
|
|
|
|
|
|
writeln!( |
|
|
|
|
|
|
|
manif_file, |
|
|
|
|
|
|
|
"+ {} block{}\n", |
|
|
|
|
|
|
|
blocks, |
|
|
|
|
|
|
|
if blocks == 1 { "" } else { "s" } |
|
|
|
|
|
|
|
)?; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
writeln!( |
|
|
|
|
|
|
|
manif_file, |
|
|
|
|
|
|
|
"Definitions: |
|
|
|
|
|
|
|
1 double chest = 2 chests |
|
|
|
|
|
|
|
1 double chest = 54 stacks |
|
|
|
|
|
|
|
1 double chest = 3456 blocks |
|
|
|
|
|
|
|
1 chest = 27 stacks |
|
|
|
|
|
|
|
1 chest = 1728 blocks |
|
|
|
|
|
|
|
1 stack = 64 blocks" |
|
|
|
|
|
|
|
)?; |
|
|
|
|
|
|
|
|
|
|
|
// Litematica schematic
|
|
|
|
// Litematica schematic
|
|
|
|
let mut enclosing_size = CompoundTag::new(); |
|
|
|
let mut enclosing_size = CompoundTag::new(); |
|
|
|
enclosing_size.insert_i32("x", width as i32); |
|
|
|
enclosing_size.insert_i32("x", width as i32); |
|
|
|