Wiki 9Minecraft Wiki 9Minecraft

Structure Presentation and Multi-Block Model Rendering

How to display large architectural structures and multi-block visuals using models and animations.

5Sections
3Code examples
3Known errors

When building an add-on, you often need to show players a large structure before they place it, or render a complex machine that spans several blocks without hitting the strict size limits of block geometry. Because Bedrock Edition does not have a dedicated client-side renderer for raw `.mcstructure` files that you can attach directly to an item or entity, structure presentation relies on converting your builds into standard Bedrock geometry. By pairing exported models with entity animations or custom blocks, you can create ghostly placement previews, miniature table-top dioramas, or animated multi-block assemblies.

Block Geometry Limits vs Entity Models

Before deciding how to present a structure, you have to choose between a custom block model and an entity model. Custom blocks using the `minecraft:geometry` component are bound by a strict 30x30x30 pixel size limit, positioned within a narrow boundary around the block space. If your structure is a small shrine, a two-block-tall statue, or a compact crafting station, a single block geometry will handle it cleanly.

For anything larger—such as a house preview, a bridge, or a multi-block altar—block geometry will fail validation or clip out of existence. In these cases, you must use an entity. Entity models have no hard pixel dimension cap in their JSON definitions, allowing you to represent an entire building as a single `.geo.json` file anchored to an invisible, stationary dummy entity.

ApproachSize LimitBest Used For
Block (`minecraft:geometry`)30x30x30 model unitsSmall props, 1x2x1 machines, detailed single-block furniture
Entity (`minecraft:client_entity`)Unrestricted (bound by render distance)Building placement previews, large structures, animated gates
Structure Block Wireframe64x384x64 blocksIn-game debugging and exporting, not stylable via resource packs

Converting a Structure to Bedrock Geometry

To present a structure as an entity or item, you first need it in the `minecraft:geometry` format (`format_version` `1.12.0` or `1.16.0`). You cannot point a client entity definition at a `.mcstructure` file in a behavior pack. Instead, capture your build in-game using a Structure Block, export the `.mcstructure` file, and convert the block data into a `.geo.json` mesh using an external modeling tool like Blockbench, or reconstruct the simplified hull of the building by hand.

When converting a build into a single geometry file, keep face counts under control. An exported structure that retains every hidden interior block face will cause severe frame drops when rendered as an entity. Strip out unseen interior cubes, merge coplanar faces where possible, and group logical parts of the structure (such as roofs, walls, or moving doors) into distinct bones so they can be animated or toggled independently.

RP/models/entity/watchtower_preview.geo.json
{
  "format_version": "1.12.0",
  "minecraft:geometry": [
    {
      "description": {
        "identifier": "geometry.wiki.watchtower_preview",
        "texture_width": 128,
        "texture_height": 128,
        "visible_bounds_width": 8.0,
        "visible_bounds_height": 12.0,
        "visible_bounds_offset": [0.0, 5.0, 0.0]
      },
      "bones": [
        {
          "name": "root",
          "pivot": [0.0, 0.0, 0.0]
        },
        {
          "name": "foundation",
          "parent": "root",
          "pivot": [0.0, 0.0, 0.0],
          "cubes": [
            {
              "origin": [-24.0, 0.0, -24.0],
              "size": [48.0, 16.0, 48.0],
              "uv": [0, 0]
            }
          ]
        },
        {
          "name": "upper_tower",
          "parent": "foundation",
          "pivot": [0.0, 16.0, 0.0],
          "cubes": [
            {
              "origin": [-16.0, 16.0, -16.0],
              "size": [32.0, 64.0, 32.0],
              "uv": [0, 64]
            }
          ]
        }
      ]
    }
  ]
}

Setting Up a Hologram Preview Entity

A common gameplay pattern is showing a translucent preview of a structure before committing to placing the real blocks via `/structure load` or the Script API's `StructureManager`. To achieve the ghostly hologram look, assign your structure geometry to a client entity and use a translucent material such as `entity_alphablend`.

Make sure your texture file has an alpha channel set to partial opacity (around 40% to 60% opacity works well in most lighting conditions). When the player moves or rotates the preview marker, the entity renders the entire structure footprint in real time without modifying a single block in the world until they confirm placement.

RP/entity/watchtower_preview.entity.json
{
  "format_version": "1.10.0",
  "minecraft:client_entity": {
    "description": {
      "identifier": "wiki:watchtower_preview",
      "materials": {
        "default": "entity_alphablend"
      },
      "textures": {
        "default": "textures/entity/watchtower_preview"
      },
      "geometry": {
        "default": "geometry.wiki.watchtower_preview"
      },
      "animations": {
        "align_to_grid": "animation.wiki.watchtower_preview.align"
      },
      "scripts": {
        "animate": [
          "align_to_grid"
        ]
      },
      "render_controllers": [
        "controller.render.default"
      ]
    }
  }
}

Locking Structure Orientation with Animations

By default, entities can rotate smoothly across any yaw angle, and their bodies may interpolate rotation when spawned or teleported. Real block structures, however, only ever sit aligned to the world grid in 90-degree increments. If your preview entity turns smoothly with the player's head rotation, it will not match where the `.mcstructure` actually lands.

You can force a structure model to snap to the cardinal grid or scale it down into a miniature projection using a resource pack animation. Using Molang inside the animation's bone rotation, you can counteract the entity's natural body yaw or snap it to 90-degree steps using `math.round`. The example below locks the `root` bone to 90-degree increments based on the entity's `query.body_y_rotation`, ensuring the visual preview matches actual structure placement rules.

RP/animations/watchtower_preview.animation.json
{
  "format_version": "1.8.0",
  "animations": {
    "animation.wiki.watchtower_preview.align": {
      "loop": true,
      "bones": {
        "root": {
          "rotation": [
            0.0,
            "math.round(query.body_y_rotation / 90.0) * 90.0 - query.body_y_rotation",
            0.0
          ],
          "scale": 1.0
        }
      }
    }
  }
}

Preventing Frustum Culling on Large Models

The biggest hurdle when rendering a structure-sized model on an entity is frustum culling. Minecraft decides whether to draw an entity by checking if its bounding box is currently inside the player's camera view. If a player stands right next to a massive watchtower preview and looks up at the roof, the entity's foot position at the ground might leave the bottom of the screen, causing the entire structure to vanish instantly.

To prevent this, you must configure `visible_bounds_width`, `visible_bounds_height`, and `visible_bounds_offset` inside the `description` block of your `.geo.json` file. These values are measured in blocks (not model pixels; 1 unit equals 16 model pixels). Set the width and height large enough to enclose the entire structure, and raise the Y value of `visible_bounds_offset` to sit at the vertical center of your building.

Which versions this applies to

Applies to Bedrock Edition 1.16.0 and newer. Geometry format 1.12.0+ and Client Entity 1.10.0 are completely stable and do not require any experimental toggles.

When it does not work

What you seeWhyThe fix
The entire structure preview disappears when looking up or walking close to its edges.The `visible_bounds_width` and `visible_bounds_height` in the geometry description are too small, causing the rendering engine to cull the model when the entity's origin leaves the screen.Increase `visible_bounds_width` and `visible_bounds_height` in your `.geo.json` file to match the structure's size in blocks, and adjust the Y value of `visible_bounds_offset` to half the structure's height.
Content Log Error: [Blocks][error]-block_name | minecraft:geometry | Block geometry exceeds maximum allowed size.You attached a large structure model directly to a custom block using `minecraft:geometry`, exceeding the 30x30x30 pixel boundary rule for blocks.Move the large geometry onto a dummy entity for presentation, or slice the model into multiple 16x16x16 block geometries and place them adjacent to each other.
The hologram preview renders completely solid instead of semi-transparent, or flickers weirdly through itself.The client entity is using the `entity` or `entity_alphatest` material, which only supports fully opaque or fully invisible pixels, or interior cube faces are fighting for depth sorting.Change the material in the client entity definition to `entity_alphablend` and remove hidden interior faces from the geometry mesh.

Reference, straight from the game files

Read out of the game itself, so the ids match the version you are building for.