Dark Roleplay Medieval Logo

Blueprints


What are blueprint files used for?

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.

Why are those files necessary?

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.

How does this work?

Basicly this file format consist of a single gzipped NBT file.
The specification for the NBT composition can be found bellow.

What are the valid file extensions?

We decided to add this 3 file extensions to the specification, where the last one is the recommended one.

  1. .blpr
  2. .blprnt
  3. .blueprint

NBT Specifications


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