// Alpine cable car summit station
// station hall + platform + gondola + pylon
var x, y, z;
// ---- rocky ground with some snow on top
for (x = 0; x < 80; x++) {
for (z = 0; z < 72; z++) {
var h = 20 - Math.floor(x / 4);
if (h < 6) h = 6;
for (y = 0; y <= h; y++) {
pb(x, y, z, 'stone');
}
if (h > 14) {
pb(x, h, z, 'snow_block');
} else {
pb(x, h, z, 'gravel');
}
}
}
// ---- flatten a platform for the station
for (x = 10; x <= 40; x++) {
for (z = 20; z <= 50; z++) {
for (y = 18; y <= 24; y++) pb(x, y, z, 'air');
pb(x, 17, z, 'stone_bricks');
}
}
checkpoint('GROUND');
// ---- station hall: 20 x 16 box
var fy = 18; // floor
for (x = 14; x <= 34; x++) {
for (z = 24; z <= 40; z++) {
pb(x, fy, z, 'polished_andesite');
}
}
// walls
for (y = fy + 1; y <= fy + 6; y++) {
for (x = 14; x <= 34; x++) {
pb(x, y, 24, 'gray_concrete');
pb(x, y, 40, 'gray_concrete');
}
for (z = 24; z <= 40; z++) {
pb(14, y, z, 'gray_concrete');
pb(34, y, z, 'gray_concrete');
}
}
// windows on the south (panorama) wall
for (x = 16; x <= 32; x++) {
for (y = fy + 2; y <= fy + 4; y++) {
pb(x, y, 40, 'glass');
}
}
// windows on the east wall
for (z = 26; z <= 38; z++) {
pb(34, fy + 3, z, 'glass');
pb(34, fy + 4, z, 'glass');
}
// door to the platform on the west wall
pb(14, fy + 1, 32, 'air');
pb(14, fy + 2, 32, 'air');
pb(14, fy + 1, 33, 'air');
pb(14, fy + 2, 33, 'air');
checkpoint('HALL');
// ---- roof with an overhang
var ry = fy + 7;
for (x = 12; x <= 36; x++) {
for (z = 22; z <= 42; z++) {
pb(x, ry, z, 'spruce_planks');
}
}
for (x = 12; x <= 36; x++) {
for (z = 22; z <= 42; z++) {
if (x > 16 && x < 32 && z > 26 && z < 38) pb(x, ry + 1, z, 'spruce_planks');
}
}
for (x = 18; x <= 30; x++) {
for (z = 28; z <= 36; z++) {
pb(x, ry + 2, z, 'spruce_planks');
}
}
checkpoint('ROOF');
// ---- interior: benches and a ticket counter
for (z = 34; z <= 38; z = z + 2) {
for (x = 18; x <= 30; x++) {
ps(x, fy + 1, z, 'spruce_stairs[facing=north]');
}
}
for (x = 16; x <= 22; x++) {
pb(x, fy + 1, 26, 'oak_planks');
pb(x, fy + 2, 26, 'oak_slab');
}
pb(23, fy + 1, 26, 'chest');
pb(17, fy + 1, 27, 'barrel');
pb(20, fy + 5, 30, 'lantern');
pb(26, fy + 5, 30, 'lantern');
pb(20, fy + 5, 36, 'lantern');
pb(26, fy + 5, 36, 'lantern');
checkpoint('INTERIOR');
// ---- lower machinery floor + stairs down
for (x = 24; x <= 32; x++) {
for (z = 28; z <= 36; z++) {
for (y = 12; y <= 16; y++) pb(x, y, z, 'air');
pb(x, 11, z, 'stone_bricks');
}
}
// hole in the floor and a stair going down
for (x = 24; x <= 27; x++) {
for (z = 28; z <= 30; z++) pb(x, fy, z, 'air');
pb(x, 17, z, 'air');
}
var sy = fy;
var sx = 24;
while (sy > 12) {
ps(sx, sy, 29, 'spruce_stairs[facing=east]');
pb(sx, sy + 1, 29, 'air');
pb(sx, sy + 2, 29, 'air');
sx = sx + 1;
sy = sy - 1;
}
// machinery
pb(29, 12, 31, 'iron_block');
pb(29, 13, 31, 'iron_block');
pb(30, 12, 31, 'iron_block');
pb(29, 12, 33, 'iron_block');
pb(30, 12, 33, 'iron_block');
pb(28, 12, 32, 'anvil');
pb(31, 12, 32, 'barrel');
pb(26, 15, 32, 'lantern');
pb(30, 15, 32, 'lantern');
checkpoint('MACHINERY');
// ---- boarding platform west of the hall
for (x = 2; x <= 14; x++) {
for (z = 28; z <= 38; z++) {
pb(x, fy, z, 'smooth_stone');
}
}
for (x = 2; x <= 14; x++) {
pb(x, fy + 1, 28, 'iron_bars');
pb(x, fy + 1, 38, 'iron_bars');
}
// canopy
for (x = 4; x <= 14; x++) {
for (z = 28; z <= 38; z++) {
pb(x, fy + 6, z, 'smooth_stone_slab');
}
}
pb(6, fy + 1, 30, 'iron_block');
pb(6, fy + 2, 30, 'iron_block');
pb(6, fy + 3, 30, 'iron_block');
pb(6, fy + 4, 30, 'iron_block');
pb(6, fy + 5, 30, 'iron_block');
pb(6, fy + 1, 36, 'iron_block');
pb(6, fy + 2, 36, 'iron_block');
pb(6, fy + 3, 36, 'iron_block');
pb(6, fy + 4, 36, 'iron_block');
pb(6, fy + 5, 36, 'iron_block');
checkpoint('PLATFORM');
// ---- gantry with bull wheels over the platform
for (y = fy + 7; y <= fy + 12; y++) {
pb(10, y, 30, 'iron_block');
pb(10, y, 36, 'iron_block');
}
for (z = 30; z <= 36; z++) pb(10, fy + 12, z, 'iron_block');
// wheels
var a;
for (a = 0; a < 360; a = a + 10) {
var wx = 10 + Math.round(3 * Math.cos(a * Math.PI / 180));
var wy = fy + 9 + Math.round(3 * Math.sin(a * Math.PI / 180));
pb(wx, wy, 31, 'iron_block');
pb(wx, wy, 35, 'iron_block');
}
checkpoint('GANTRY');
// ---- gondola cabin at the platform
for (x = 3; x <= 7; x++) {
for (z = 31; z <= 35; z++) {
pb(x, fy + 1, z, 'smooth_stone');
pb(x, fy + 5, z, 'white_concrete');
}
}
for (y = fy + 2; y <= fy + 4; y++) {
for (x = 3; x <= 7; x++) {
pb(x, y, 31, 'red_concrete');
pb(x, y, 35, 'red_concrete');
}
for (z = 31; z <= 35; z++) {
pb(3, y, z, 'red_concrete');
pb(7, y, z, 'red_concrete');
}
}
for (x = 4; x <= 6; x++) {
pb(x, fy + 3, 31, 'glass');
pb(x, fy + 3, 35, 'glass');
pb(3, fy + 3, x + 28, 'glass');
pb(7, fy + 3, x + 28, 'glass');
}
pb(5, fy + 6, 33, 'chain');
pb(5, fy + 7, 33, 'chain');
checkpoint('GONDOLA');
// ---- cables running downslope and a pylon
for (x = 0; x <= 10; x++) {
var cy = fy + 9 + Math.floor((10 - x) / 3);
pb(x, cy, 31, 'chain');
pb(x, cy, 35, 'chain');
}
for (x = 46; x <= 78; x++) {
var cy2 = 30 - Math.floor((x - 46) / 3);
pb(x, cy2, 31, 'chain');
pb(x, cy2, 35, 'chain');
}
for (y = 8; y <= 30; y++) {
pb(60, y, 31, 'iron_block');
pb(60, y, 35, 'iron_block');
}
for (z = 31; z <= 35; z++) pb(60, 30, z, 'iron_bars');
checkpoint('CABLES');
// ---- a few trees lower down
placeTree(70, 9, 12, 'spruce');
placeTree(66, 10, 24, 'spruce');
placeTree(74, 8, 44, 'spruce');
placeTree(62, 11, 58, 'spruce');
checkpoint('TREES');