// windmill house
var i, j, x, y, z, r, d;
// ground
fill(-30, -2, -30, 30, -1, 30, "dirt");
fill(-30, 0, -30, 30, 0, 30, "grass_block");
// canal
fill(20, -2, -30, 30, 0, 30, "air");
fill(20, -2, -30, 30, -1, 30, "water");
// brick base, octagon-ish, radius 9, 8 blocks tall
for (y = 0; y <= 7; y++) {
for (x = -9; x <= 9; x++) {
for (z = -9; z <= 9; z++) {
if (Math.abs(x) <= 9 && Math.abs(z) <= 9 && (Math.abs(x) + Math.abs(z)) <= 12) {
var inner = (Math.abs(x) <= 8 && Math.abs(z) <= 8 && (Math.abs(x) + Math.abs(z)) <= 11);
if (!inner) {
pb(x, y, z, "white_concrete");
}
}
}
}
}
// floor
for (x = -9; x <= 9; x++) {
for (z = -9; z <= 9; z++) {
if ((Math.abs(x) + Math.abs(z)) <= 11 && Math.abs(x) <= 8 && Math.abs(z) <= 8) {
pb(x, 0, z, "oak_planks");
}
}
}
// tower, dark wood, tapering
for (y = 8; y <= 19; y++) {
r = 8 - (y - 8) * 0.25;
for (x = -9; x <= 9; x++) {
for (z = -9; z <= 9; z++) {
d = Math.sqrt(x * x + z * z);
if (d <= r && d > r - 1.2) {
pb(x, y, z, "dark_oak_planks");
}
}
}
}
// balcony platform around the tower
for (x = -11; x <= 11; x++) {
for (z = -11; z <= 11; z++) {
d = Math.sqrt(x * x + z * z);
if (d <= 11 && d > 7.5) {
pb(x, 8, z, "oak_planks");
}
if (d <= 11 && d > 10) {
pb(x, 9, z, "oak_fence");
}
}
}
// second floor
for (x = -8; x <= 8; x++) {
for (z = -8; z <= 8; z++) {
d = Math.sqrt(x * x + z * z);
if (d <= 7) pb(x, 8, z, "oak_planks");
}
}
// hollow out the inside
for (y = 1; y <= 19; y++) {
if (y == 8) continue;
for (x = -8; x <= 8; x++) {
for (z = -8; z <= 8; z++) {
d = Math.sqrt(x * x + z * z);
var rr = (y <= 7) ? 7.5 : (8 - (y - 8) * 0.25) - 1.2;
if (d <= rr) pb(x, y, z, "air");
}
}
}
// thatched roof cone
for (i = 0; i <= 10; i++) {
r = 7 - i * 0.7;
y = 20 + i;
for (x = -8; x <= 8; x++) {
for (z = -8; z <= 8; z++) {
d = Math.sqrt(x * x + z * z);
if (d <= r) pb(x, y, z, "hay_block");
}
}
}
pb(0, 31, 0, "hay_block");
// sails - four blades in a cross
fill(0, 26, -1, 0, 26, -5, "dark_oak_log[axis=z]");
for (i = 1; i <= 14; i++) {
pb(i, 26, -6, "oak_fence");
pb(-i, 26, -6, "oak_fence");
pb(0, 26 + i, -6, "oak_fence");
pb(0, 26 - i, -6, "oak_fence");
if (i <= 10) {
pb(i, 27, -6, "white_wool");
pb(-i, 25, -6, "white_wool");
pb(1, 26 + i, -6, "white_wool");
pb(-1, 26 - i, -6, "white_wool");
}
}
// door
fill(0, 1, 8, 0, 2, 9, "air");
ps(0, 1, 9, "oak_door[facing=south,half=lower,hinge=left]");
ps(0, 2, 9, "oak_door[facing=south,half=upper,hinge=left]");
// windows
pb(9, 3, 0, "glass_pane");
pb(9, 4, 0, "glass_pane");
pb(-9, 3, 0, "glass_pane");
pb(-9, 4, 0, "glass_pane");
pb(0, 3, -9, "glass_pane");
pb(0, 4, -9, "glass_pane");
pb(6, 13, 0, "glass_pane");
pb(-6, 13, 0, "glass_pane");
pb(0, 13, 6, "glass_pane");
pb(0, 13, -6, "glass_pane");
// ladder up to the second floor
for (y = 1; y <= 8; y++) {
ps(-6, y, -2, "ladder[facing=south]");
}
pb(-6, 8, -2, "air");
// furniture, ground floor
pb(2, 1, -5, "crafting_table");
pb(3, 1, -5, "furnace[facing=south]");
pb(4, 1, -5, "chest[facing=south]");
pb(-2, 1, 4, "oak_stairs[facing=north]");
pb(-1, 1, 4, "oak_stairs[facing=north]");
pb(0, 1, 2, "oak_fence");
pb(0, 2, 2, "oak_pressure_plate");
pb(3, 1, 3, "barrel");
pb(0, 6, 0, "lantern[hanging=true]");
pb(4, 1, 0, "red_bed[facing=north,part=foot]");
pb(4, 2, 0, "red_bed[facing=north,part=head]");
// furniture, grinding floor
pb(0, 9, -2, "smooth_stone");
pb(1, 9, -2, "smooth_stone");
pb(0, 9, -1, "smooth_stone");
pb(1, 9, -1, "smooth_stone");
pb(3, 9, 2, "hay_block");
pb(3, 9, 3, "hay_block");
pb(-3, 9, 2, "barrel");
pb(0, 17, 0, "lantern[hanging=true]");
// path
for (z = 10; z <= 18; z++) {
pb(-1, 0, z, "gravel");
pb(0, 0, z, "gravel");
pb(1, 0, z, "gravel");
}
// a couple of trees
for (i = 0; i < 5; i++) pb(15, 1 + i, 12, "oak_log[axis=y]");
for (x = 13; x <= 17; x++) for (z = 10; z <= 14; z++) for (y = 6; y <= 7; y++) pb(x, y, z, "oak_leaves[persistent=true]");
for (i = 0; i < 5; i++) pb(-15, 1 + i, -12, "oak_log[axis=y]");
for (x = -17; x <= -13; x++) for (z = -14; z <= -10; z++) for (y = 6; y <= 7; y++) pb(x, y, z, "oak_leaves[persistent=true]");