BLOCKFORGE BUILD SPEC

A reference for AI agents designing builds for BlockForge voxel worlds

OVERVIEW

BlockForge is an on-chain voxel world on Bitcoin. Each chunk is 32x64x32 blocks. Players can export their builds as JSON and inscribe them as child inscriptions. This spec describes the JSON format so that AI agents can generate valid build files.

The generated JSON can be pasted directly into the game via Chunk Options > Import Chunk JSON, or inscribed on-chain as a child of the chunk's parent inscription.

COORDINATE SYSTEM

All coordinates in the a (additions) and r (removals) arrays are local to the chunk (0-31 for X/Z, 1-63 for Y).

Y=0 is bedrock and cannot be overwritten. Start placing blocks at Y=1 or higher.

JSON FORMAT

Single Chunk Edit

{
  "t": "edit",
  "cx": 0,
  "cz": 0,
  "op": "erase_floor",
  "floorY": 10,
  "a": [
    [5, 11, 5, "stone"],
    [5, 12, 5, "glass"],
    [6, 11, 5, "brick"]
  ],
  "r": [
    [10, 15, 10]
  ],
  "signs": {
    "5,12,5": { "text": "Hello World", "author": "Builder" }
  },
  "tx": [],
  "author": "MyName"
}

Multi-Chunk Edit (Mega Chunks)

{
  "t": "multi-edit",
  "chunks": [
    { "cx": 0, "cz": 0, "op": "erase_floor", "floorY": 10, "a": [...] },
    { "cx": 1, "cz": 0, "a": [...], "r": [...] }
  ],
  "tx": [],
  "author": "MyName"
}

FIELD REFERENCE

FieldTypeRequiredDescription
tstringYes"edit" for single chunk, "multi-edit" for multiple
cxintYesChunk X coordinate (-16 to 15)
czintYesChunk Z coordinate (-16 to 15)
opstringNoChunk operation: "reset", "erase", or "erase_floor"
floorYintIf op=erase_floorY level for the floor (1-60)
aarrayYesBlocks to add: [[x, y, z, blockName], ...]
rarrayNoBlocks to remove: [[x, y, z], ...]
signsobjectNoSign text: {"x,y,z": {"text": "...", "author": "..."}}
txarrayNoCustom textures: [{"iid": "inscription_id", "name": "BlockName"}]
authorstringNoBuilder display name

CHUNK OPERATIONS

Operations are applied BEFORE additions. This lets you clear a chunk and then place your build on a clean canvas.

No operation (diff mode)

If op is omitted, the build is applied as a diff on top of the existing procedural terrain. Use a to add blocks and r to remove them.

erase

Clears all blocks above bedrock (Y=1 to Y=63). Only air remains. Then a additions are applied. Good for building in empty space.

{ "t": "edit", "cx": 0, "cz": 0, "op": "erase", "a": [...] }

erase_floor

Clears all blocks, then places a single floor layer at the specified Y level using biome-appropriate materials. This is the most common operation for builds.

{ "t": "edit", "cx": 0, "cz": 0, "op": "erase_floor", "floorY": 10, "a": [...] }

reset

Regenerates the original procedural terrain, then applies additions on top. Useful for undoing all changes and starting fresh with terrain.

{ "t": "edit", "cx": 0, "cz": 0, "op": "reset", "a": [...] }

BLOCK TYPES

Blocks are referenced by lowercase name in the a array. Here are all 90+ built-in blocks (state-managed variants of two-state blocks are shown for completeness, but you usually only need the base variant):

Terrain & Natural

IDNameNotes
1grassGreen top, dirt sides
2dirt
3stoneMost common structural block
4sand
5gravel
12snowWhite top, snow sides
51pure snowAll white
27iceTransparent
13waterTransparent, no collision
72lavaEmissive, animated

Building Materials

IDNameNotes
6woodLog block
7planksWooden planks
8cobblestone
9brick
10glassTransparent
11leavesTransparent
43clay
44sandstone
19obsidianDark purple/black
54dark wood
55thatchEmissive

Stained Glass

IDName
65red glass
66blue glass
67green glass
68yellow glass
69purple glass
70orange glass

Emissive / Glowing

IDNameNotes
14neon panelCyan glow
16crystalPurple, transparent
18energy coreOrange glow
22neon roadTeal glow
32magic leavesPink/purple glow
35alien spireOrange glow
36alien floraPurple glow
47coralPink glow
50lanternWarm light, emits point light
56portal blockPurple, transparent, no collision
61firefly jarYellow-green glow
62desert lampWarm glow
63ice crystalBlue glow
64warning lightOrange glow

Bitcoin-Themed

IDNameNotes
57bitcoinBTC logo, emissive
58satoshiSat logo, emissive
59chartGreen chart, emissive
60ordinalsOrdinals logo, emissive
73fee rateLive fee rate display, emissive

Cyberpunk Biome

IDName
17dark metal
21cyber ground
23cyber rock
24cyber sub
52cyber window
53cyber floor

Other Biome Blocks

IDNameBiome
15circuitCyberpunk
20cloudDecorative, no collision
25cactusDesert
26tundra leavesTundra
28snow leavesTundra
29ench. groundEnchanted
30ench. subEnchanted
31magic logEnchanted
33alien groundAlien
34alien rockAlien
37ruin groundRuins
38ruin stoneRuins
39ruin metalRuins
40ruin brickRuins
41flowerPlains, no collision
42tall grassPlains, no collision
48kelpOcean, no collision
49ocean floorOcean

Special

IDNameNotes
45bedrockCannot be broken
46signWritable sign block
71seedGrows into a tree over time

Interactive (v1.9)

Functional blocks that react to player input or modify physics. State-managed variants (open doors, active beacons, etc.) can be placed directly via JSON to start in any state.

IDNameNotes
105ladderVertical climb. Place against a wall; player holds W or Space to ascend, no-collision so player stands inside the cell.
106doorClosed door bottom half. Two cells tall — when placing via JSON, also place door top (ID 107) one block above. Place both halves at the same X,Z column.
107door topClosed door top half. Pair with ID 106 directly below.
108door (open)Open door bottom half. No-collision — use this + ID 109 above to start a door in the open state.
109door (open) topOpen door top half. Pair with ID 108 directly below.
110beaconBeacon Pillar, off. Dark column block.
111beacon (on)Beacon Pillar, on. Spawns a tall gold light pillar visible across the map; emissive.
112geyserGeyser, dormant. Cracked vent block.
113geyser (active)Geyser, active. Spawns 16-block steam column; pushes player upward when standing in column.
114boost padBoost Pad facing NORTH. Pushes player +Z when standing on it. Glowing cyan chevrons.
115boost pad (e)Boost Pad facing EAST. Pushes player -X.
116boost pad (s)Boost Pad facing SOUTH. Pushes player -Z.
117boost pad (w)Boost Pad facing WEST. Pushes player +X.
118wind ventWind Vent, off. Industrial grate block.
119wind vent (n)Wind Vent firing NORTH (pushes +Z). Spawns horizontal jet up to 16 blocks; pushes player along jet in air or on ground.
120wind vent (e)Wind Vent firing EAST (pushes -X).
121wind vent (s)Wind Vent firing SOUTH (pushes -Z).
122wind vent (w)Wind Vent firing WEST (pushes +X).
123painting cellPainting cell — wood frame block used as part of a 2×2 / 3×3 / 4×4 / 5×5 / 7×7 / 9×9 painting. Placing via JSON only creates the wood frame; the image plane only spawns when the painting is created interactively (player → place → modal → IID). For AI builds, use cells as wood frame decoration; pair with a sign nearby explaining the art.

CUSTOM TEXTURES

You can reference Bitcoin inscription images as block textures using the tx array:

{
  "tx": [
    { "iid": "abc123...i0", "name": "my_texture" }
  ],
  "a": [
    [5, 11, 5, "my_texture"]
  ]
}

The inscription ID must point to a valid image inscription on Bitcoin. The game will fetch and render it as a block texture.

Custom textures require network access to fetch the inscription image. They work when the game is loaded from blockforgebtc.com or ordinals.com, but not from a local file.

EXAMPLES

Simple Tower on Cleared Ground

{
  "t": "edit",
  "cx": 0, "cz": 0,
  "op": "erase_floor",
  "floorY": 10,
  "a": [
    [15, 11, 15, "stone"], [16, 11, 15, "stone"], [15, 11, 16, "stone"], [16, 11, 16, "stone"],
    [15, 12, 15, "stone"], [16, 12, 15, "stone"], [15, 12, 16, "stone"], [16, 12, 16, "stone"],
    [15, 13, 15, "stone"], [16, 13, 15, "stone"], [15, 13, 16, "stone"], [16, 13, 16, "stone"],
    [15, 14, 15, "stone"], [16, 14, 15, "stone"], [15, 14, 16, "stone"], [16, 14, 16, "stone"],
    [15, 15, 15, "lantern"]
  ]
}

Add Blocks to Existing Terrain (No Clear)

{
  "t": "edit",
  "cx": 2, "cz": -1,
  "a": [
    [10, 20, 10, "brick"], [11, 20, 10, "brick"], [12, 20, 10, "brick"],
    [10, 21, 10, "glass"], [11, 21, 10, "glass"], [12, 21, 10, "glass"]
  ],
  "r": [
    [10, 19, 10], [11, 19, 10]
  ]
}

Bitcoin Shrine

{
  "t": "edit",
  "cx": 0, "cz": 0,
  "op": "erase_floor",
  "floorY": 10,
  "a": [
    [14,11,14,"obsidian"],[15,11,14,"obsidian"],[16,11,14,"obsidian"],[17,11,14,"obsidian"],
    [14,11,17,"obsidian"],[15,11,17,"obsidian"],[16,11,17,"obsidian"],[17,11,17,"obsidian"],
    [14,11,15,"obsidian"],[14,11,16,"obsidian"],[17,11,15,"obsidian"],[17,11,16,"obsidian"],
    [14,12,14,"obsidian"],[17,12,14,"obsidian"],[14,12,17,"obsidian"],[17,12,17,"obsidian"],
    [14,13,14,"obsidian"],[17,13,14,"obsidian"],[14,13,17,"obsidian"],[17,13,17,"obsidian"],
    [15,13,14,"obsidian"],[16,13,14,"obsidian"],[15,13,17,"obsidian"],[16,13,17,"obsidian"],
    [14,13,15,"obsidian"],[14,13,16,"obsidian"],[17,13,15,"obsidian"],[17,13,16,"obsidian"],
    [15,13,15,"obsidian"],[16,13,15,"obsidian"],[15,13,16,"obsidian"],[16,13,16,"obsidian"],
    [15,14,15,"bitcoin"],[16,14,15,"bitcoin"],[15,14,16,"bitcoin"],[16,14,16,"bitcoin"],
    [15,15,15,"energy core"],[16,15,16,"energy core"],
    [14,11,13,"lantern"],[17,11,13,"lantern"],[14,11,18,"lantern"],[17,11,18,"lantern"]
  ]
}

TIPS FOR AI AGENTS

Testing: Open BlockForge, go to Chunk Options, and click "Import Chunk JSON" to paste and preview your build in-game before inscribing.

BlockForge by MDV · blockforgebtc.com