Blueprints are basicly just a simple file format to store areas of a Minecraft World. For example this format can be used to store a building. Similar formats that you might already know are World Edits Schematic files, or Minecrafts relativly new Structure files.
That's a good question, we do already have Minecrafts structure file format, however that one got one major flaw:
It does waste a lot of disk space. A simple 32x32x32 built, can already take up up to 65kb of disk space. That was the main reason we decided against Minecraft structure format.
However there is still World Edits format. It's way more efficient, and the same 32x32x32 built does only take around 500Bytes of disk space. This sounds nice, but has some major flaws, one of them is the nearly non existing mod support, in newer versions it works quite good with mods, but there is still room for improvements. Additionally, the format has become a mess. There are over 30 different versions at this point, and supporting all of them has become a lot of work.
That's what we want to fix with this format. Keep it space efficient, but also offer full mod compatibility. We also wanted to get away from the versioning mess other formats have. Therefore, each version will be treated like it's own format.
Basicly this file format consist of a single gzipped NBT file. The specification for the NBT composition can be found bellow.
We decided to add this 3 file extensions to the specification, where the last one is the recommended one.
Fields, which names are written italic or marked with a * are optional, and don't need to exist.
|Field Name||Data Type||Additional Information|
|version||NBTTagByte||For this version of the format the value should always be a "1"|
|name*||NBTTagString||A Human readable name for this structure|
|architects*||NBTTagList||A list of NBTTagStrings, that is supposed to contain credits for this structure|
|required_mods||NBTTagList||A list of NBTTagStrings, where each NBTTagString represent the modid of a required mod|
|size_x||NBTTagShort||Size of the structure on the X axis|
|size_y||NBTTagShort||Size of the structure on the Y axis|
|size_z||NBTTagShort||Size of the structure on the Z axis|
|pallete||NBTTagList||A list of NBTTagCompounds, resembling the BlockStates contained within this Structure. The NBTTagCompounds should have the same format as NBTUtil#writeBlockState() provides|
|blocks||NBTTagIntArray||The length of this array equals: Math.ceil((size_x * size_y * size_z)/2) A single entry in this array represents 2 blocks, blocks at an odd position occupy, the left 16 bits of the Integer. The entries are saved in this order: ((y * (z * x)) + (z * x) + x)|
|tile_entities||NBTTagList||A list of NBTTagCompounds, returned by TileEntity#serializeNBT(), the fields "x","y" and "z" are changed to be relative to the structure origin|
|entities*||NBTTagList||A list of NBTTagCompounds, returned by Entity#writeToNBTOptional(NBTTagComound), the "Pos" tag is adjusted to be relative to the structures origin|