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 73 built-in blocks:

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

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