Minecraft City Builder

MakeCode JavaScript for Minecraft Education Edition — type "buildcity" in chat to build a full city at your position.

City Buildings

  • House: 6x6 spruce-plank floor & roof, white concrete walls, door opening, glass windows on all sides
  • Apartment: 3-storey building (10x10), gray concrete floors & roof, double-row glass window strips, ground-floor entrance
  • Office: 12x8 office, 6 blocks tall, double-row glass windows, gray concrete roof, front door
  • Park: 15x15 grass with 4 oak trees (trunk + leaf canopy), stone path, and flowers
  • Garden: 8x8 flower garden with alternating yellow & red flowers and corner trees
  • Wind Turbines: 2 turbines — 12-block tower with 3-blade rotor
  • Solar Panels: Raised spruce-plank field on log supports
  • Road: 80-block long, 5-block wide gray concrete road connecting all buildings

MakeCode JavaScript

// === ECO CITY BUILDER ===
// Type "buildcity" in chat to build the whole city at your position

// Block references — using blockById for maximum reliability
// Concrete ID=251 (data: 0=white, 7=gray), Log ID=17, Leaves ID=18
let whiteConcrete = blocks.blockById(251)
let grayConcrete = blocks.blockWithData(blocks.blockById(251), 7)
let oakLog = blocks.blockById(17)                         // oak log
let spruceLog = blocks.blockWithData(blocks.blockById(17), 1)  // spruce log
let oakLeaves = blocks.blockById(18)                      // oak leaves

// Helper: build a tree with trunk and leaf canopy
function buildTree(x: number, y: number, z: number) {
    for (let dy = 1; dy <= 4; dy++) {
        blocks.place(oakLog, pos(x, y + dy, z))
    }
    for (let dx = -2; dx <= 2; dx++) {
        for (let dz = -2; dz <= 2; dz++) {
            blocks.place(oakLeaves, pos(x + dx, y + 5, z + dz))
        }
    }
    for (let dx = -1; dx <= 1; dx++) {
        for (let dz = -1; dz <= 1; dz++) {
            blocks.place(oakLeaves, pos(x + dx, y + 6, z + dz))
        }
    }
}

// SECTION 1 — ECO HOUSE (6x6)
function buildHouse(x: number, y: number, z: number) {
    // Floor
    for (let dx = 0; dx < 6; dx++) {
        for (let dz = 0; dz < 6; dz++) {
            blocks.place(PLANKS_SPRUCE, pos(x + dx, y, z + dz))
        }
    }
    // Walls (front & back)
    for (let dx = 0; dx < 6; dx++) {
        for (let dy = 1; dy < 5; dy++) {
            blocks.place(whiteConcrete, pos(x + dx, y + dy, z))
            blocks.place(whiteConcrete, pos(x + dx, y + dy, z + 5))
        }
    }
    // Walls (left & right)
    for (let dz = 0; dz < 6; dz++) {
        for (let dy = 1; dy < 5; dy++) {
            blocks.place(whiteConcrete, pos(x, y + dy, z + dz))
            blocks.place(whiteConcrete, pos(x + 5, y + dy, z + dz))
        }
    }
    // Door opening
    blocks.place(AIR, pos(x + 2, y + 1, z))
    blocks.place(AIR, pos(x + 2, y + 2, z))
    // Windows (front, back, and sides)
    blocks.place(GLASS, pos(x + 1, y + 2, z))
    blocks.place(GLASS, pos(x + 4, y + 2, z))
    blocks.place(GLASS, pos(x + 1, y + 2, z + 5))
    blocks.place(GLASS, pos(x + 4, y + 2, z + 5))
    blocks.place(GLASS, pos(x, y + 2, z + 2))
    blocks.place(GLASS, pos(x + 5, y + 2, z + 2))
    // Roof
    for (let dx = 0; dx < 6; dx++) {
        for (let dz = 0; dz < 6; dz++) {
            blocks.place(PLANKS_SPRUCE, pos(x + dx, y + 5, z + dz))
        }
    }
}

// SECTION 2 — APARTMENT (10x10, 3 floors)
function buildApartment(x: number, y: number, z: number) {
    for (let floor = 0; floor < 3; floor++) {
        let fy = y + (floor * 6)
        // Floor slab
        for (let dx = 0; dx < 10; dx++) {
            for (let dz = 0; dz < 10; dz++) {
                blocks.place(grayConcrete, pos(x + dx, fy, z + dz))
            }
        }
        // Walls
        for (let dy = 1; dy < 5; dy++) {
            for (let i = 0; i < 10; i++) {
                blocks.place(whiteConcrete, pos(x + i, fy + dy, z))
                blocks.place(whiteConcrete, pos(x + i, fy + dy, z + 9))
                blocks.place(whiteConcrete, pos(x, fy + dy, z + i))
                blocks.place(whiteConcrete, pos(x + 9, fy + dy, z + i))
            }
        }
        // Window strips (2 rows tall)
        for (let i = 2; i < 8; i++) {
            blocks.place(GLASS, pos(x + i, fy + 2, z))
            blocks.place(GLASS, pos(x + i, fy + 2, z + 9))
            blocks.place(GLASS, pos(x + i, fy + 3, z))
            blocks.place(GLASS, pos(x + i, fy + 3, z + 9))
        }
        // Door on ground floor
        if (floor == 0) {
            blocks.place(AIR, pos(x + 4, fy + 1, z))
            blocks.place(AIR, pos(x + 4, fy + 2, z))
        }
    }
    // Roof
    for (let dx = 0; dx < 10; dx++) {
        for (let dz = 0; dz < 10; dz++) {
            blocks.place(grayConcrete, pos(x + dx, y + 18, z + dz))
        }
    }
}

// SECTION 3 — OFFICE BUILDING (12x8)
function buildOffice(x: number, y: number, z: number) {
    // Floor
    for (let dx = 0; dx < 12; dx++) {
        for (let dz = 0; dz < 8; dz++) {
            blocks.place(grayConcrete, pos(x + dx, y, z + dz))
        }
    }
    // Walls
    for (let dy = 1; dy <= 6; dy++) {
        for (let i = 0; i < 12; i++) {
            blocks.place(whiteConcrete, pos(x + i, y + dy, z))
            blocks.place(whiteConcrete, pos(x + i, y + dy, z + 7))
        }
        for (let i = 0; i < 8; i++) {
            blocks.place(whiteConcrete, pos(x, y + dy, z + i))
            blocks.place(whiteConcrete, pos(x + 11, y + dy, z + i))
        }
    }
    // Large glass windows (2 rows)
    for (let i = 2; i < 10; i++) {
        blocks.place(GLASS, pos(x + i, y + 3, z))
        blocks.place(GLASS, pos(x + i, y + 3, z + 7))
        blocks.place(GLASS, pos(x + i, y + 4, z))
        blocks.place(GLASS, pos(x + i, y + 4, z + 7))
    }
    // Door
    blocks.place(AIR, pos(x + 5, y + 1, z))
    blocks.place(AIR, pos(x + 5, y + 2, z))
    // Roof
    for (let dx = 0; dx < 12; dx++) {
        for (let dz = 0; dz < 8; dz++) {
            blocks.place(grayConcrete, pos(x + dx, y + 7, z + dz))
        }
    }
}

// SECTION 4 — GREEN PARK (15x15)
function buildPark(x: number, y: number, z: number) {
    // Grass ground
    for (let dx = 0; dx < 15; dx++) {
        for (let dz = 0; dz < 15; dz++) {
            blocks.place(GRASS, pos(x + dx, y, z + dz))
        }
    }
    // Four trees with real trunks and canopies
    buildTree(x + 3, y, z + 3)
    buildTree(x + 11, y, z + 3)
    buildTree(x + 3, y, z + 11)
    buildTree(x + 11, y, z + 11)
    // Stone path through middle
    for (let dz = 0; dz < 15; dz++) {
        blocks.place(STONE, pos(x + 7, y, z + dz))
    }
    // Flowers along the path
    for (let dz = 1; dz < 15; dz += 2) {
        blocks.place(YELLOW_FLOWER, pos(x + 6, y + 1, z + dz))
        blocks.place(POPPY, pos(x + 8, y + 1, z + dz))
    }
}

// SECTION 5 — FLOWER GARDEN (8x8)
function buildGarden(x: number, y: number, z: number) {
    // Grass ground
    for (let dx = 0; dx < 8; dx++) {
        for (let dz = 0; dz < 8; dz++) {
            blocks.place(GRASS, pos(x + dx, y, z + dz))
        }
    }
    // Alternating flower rows
    for (let dx = 1; dx < 7; dx++) {
        for (let dz = 1; dz < 7; dz += 2) {
            if (dx % 2 == 0) {
                blocks.place(YELLOW_FLOWER, pos(x + dx, y + 1, z + dz))
            } else {
                blocks.place(POPPY, pos(x + dx, y + 1, z + dz))
            }
        }
    }
    // Corner trees
    buildTree(x, y, z)
    buildTree(x + 7, y, z + 7)
}

// SECTION 6 — WIND TURBINE
function buildWindTurbine(x: number, y: number, z: number) {
    // Tower (12 blocks tall)
    for (let dy = 0; dy < 12; dy++) {
        blocks.place(whiteConcrete, pos(x, y + dy, z))
    }
    // Hub
    blocks.place(PLANKS_SPRUCE, pos(x, y + 12, z))
    // Blade 1 (right)
    for (let i = 1; i <= 3; i++) {
        blocks.place(whiteConcrete, pos(x + i, y + 12, z))
    }
    // Blade 2 (upper-left)
    for (let i = 1; i <= 3; i++) {
        blocks.place(whiteConcrete, pos(x - i, y + 12 + i, z))
    }
    // Blade 3 (lower-left)
    for (let i = 1; i <= 3; i++) {
        blocks.place(whiteConcrete, pos(x - i, y + 12 - i, z))
    }
}

// SECTION 7 — ROAD (5 blocks wide)
function buildRoad(x: number, y: number, z: number, length: number) {
    for (let dx = 0; dx < length; dx++) {
        for (let dz = 0; dz < 5; dz++) {
            blocks.place(grayConcrete, pos(x + dx, y, z + dz))
        }
    }
}

// SECTION 8 — SOLAR PANEL FIELD
function buildSolarPanels(x: number, y: number, z: number) {
    // Support poles (spruce logs)
    for (let dx = 0; dx < 8; dx += 3) {
        blocks.place(spruceLog, pos(x + dx, y + 1, z))
        blocks.place(spruceLog, pos(x + dx, y + 1, z + 5))
    }
    // Panel surface (raised platform)
    for (let dx = 0; dx < 8; dx++) {
        for (let dz = 0; dz < 6; dz++) {
            blocks.place(PLANKS_SPRUCE, pos(x + dx, y + 2, z + dz))
        }
    }
}

// SECTION 9 — FULL ECO CITY
player.onChat("buildcity", function () {
    let px = player.position().getValue(Axis.X)
    let py = player.position().getValue(Axis.Y)
    let pz = player.position().getValue(Axis.Z)

    // Buildings (behind the road)
    buildHouse(px + 2, py, pz + 8)
    buildApartment(px + 12, py, pz + 7)
    buildOffice(px + 26, py, pz + 8)

    // Green spaces
    buildPark(px + 42, py, pz + 6)
    buildGarden(px + 60, py, pz + 8)

    // Green energy
    buildWindTurbine(px + 70, py, pz + 10)
    buildWindTurbine(px + 76, py, pz + 10)
    buildSolarPanels(px + 60, py, pz + 20)

    // Main road connecting everything
    buildRoad(px, py, pz, 80)
})

How to Use

  1. Open Minecraft Education Edition and create a new world.
  2. Press C to open the Code Builder.
  3. Switch to JavaScript mode in MakeCode.
  4. Copy the code above and paste it into the editor.
  5. Click the green play button to run the code.
  6. Type buildcity in the chat to build the entire city at your position!