Wiki 9Minecraft Wiki 9Minecraft

Fake Blocks (Entity-Backed Blocks and Ghost Blocks)

Create non-solid blocks, secret passages, and entity-driven furniture in Minecraft Bedrock.

5Sections
4Code examples
3Known errors

In Minecraft Bedrock add-ons, the term "fake block" refers to two distinct techniques: real custom blocks stripped of their physical collision to create secret walk-through walls, or stationary entities disguised with a 16x16x16 block model. You reach for collisionless blocks when building traps or hidden doors, and you reach for entity-backed blocks when you need features the block engine cannot natively handle, such as smooth skeletal animations, container inventories, or seatable furniture.

Two Approaches to Fake Blocks

Before writing JSON, decide which type of fake block solves your problem. If your block only needs to look like a vanilla or custom block while allowing players and mobs to pass through it—often called a ghost block or Illusion block—you should use a standard Behavior Pack block with its collision disabled. It costs almost nothing in performance, integrates naturally with commands like /setblock, and respects world lighting automatically.

If your block needs to smoothly open a lid, rotate continuously, hold an inventory like a chest, or let a player sit on it like a chair, a real block will hit engine limits. Instead, you create a custom entity that looks like a block, lock it to the voxel grid, and optionally pair it with an invisible barrier or structure void block so it feels solid. The table below outlines when to choose which method.

FeatureGhost Block (Real Block)Entity-Backed Fake Block
Walk-through secret passagesNative via collision_box: falsePossible, but wastes entity ticking budget
Smooth animations & MolangNo (limited to flipbook textures and state swapping)Yes (full Bedrock entity animation support)
Custom container GUINo native component without script workaroundsNative via minecraft:inventory
Player sitting / mountingRequires spawning a helper entity anywayNative via minecraft:rideable
Performance in large numbersExcellent (handled by chunk mesh)Poor (every block ticks and renders as an entity)

Method 1: Ghost Blocks (Collisionless Real Blocks)

Creating a pass-through block requires no entity tricks at all. In modern Bedrock format versions, the collision volume and the cursor hitbox are decoupled into two separate components: minecraft:collision_box and minecraft:selection_box. Setting the collision box to false lets entities walk, fall, or swim directly through the block space, while keeping the selection box enabled ensures players in Creative or Survival can still target and break it.

One immediate giveaway of a fake wall is lighting. By default, a custom geometry block might block skylight or cast dark ambient shadows on adjacent blocks, or conversely let light bleed through a supposedly solid stone wall. You control this with minecraft:light_dampening. A value of 15 makes the ghost block block light just like solid stone; a value of 0 lets light pass through unimpeded so players inside a hidden passage are not left in pitch darkness.

BP/blocks/fake_stone.json
{
  "format_version": "1.20.80",
  "minecraft:block": {
    "description": {
      "identifier": "wiki:fake_stone",
      "menu_category": {
        "category": "construction"
      }
    },
    "components": {
      "minecraft:geometry": "minecraft:geometry.full_block",
      "minecraft:material_instances": {
        "*": {
          "texture": "stone",
          "render_method": "opaque"
        }
      },
      "minecraft:collision_box": false,
      "minecraft:selection_box": true,
      "minecraft:light_dampening": 0,
      "minecraft:destructible_by_mining": {
        "seconds_to_destroy": 1.5
      }
    }
  }
}

Method 2: Entity-Backed Fake Blocks

When a block must animate smoothly, hold items, or act as a vehicle, you build an entity instead. The secret to making an entity behave like a stationary block is stripping out all movement goals, disabling gravity and pushing in minecraft:physics, and locking its body rotation. Without minecraft:pushable set to false in both directions, pistons, water currents, or bumping players will slide your block off the grid.

You also need to decide how the entity behaves when hit. A normal mob flashes red, takes knockback, and dies after several swings. To mimic a block, apply a high resistance to knockback using minecraft:knockback_resistance and configure minecraft:damage_sensor so the entity either ignores standard weapon swings or breaks instantly when struck with a specific tool, dropping its item via a loot table.

BP/entities/fake_crate.json
{
  "format_version": "1.20.80",
  "minecraft:entity": {
    "description": {
      "identifier": "wiki:fake_crate",
      "is_spawnable": true,
      "is_summonable": true,
      "is_experimental": false
    },
    "components": {
      "minecraft:type_family": {
        "family": ["inanimate", "fake_block"]
      },
      "minecraft:collision_box": {
        "width": 1.0,
        "height": 1.0
      },
      "minecraft:physics": {
        "has_gravity": false,
        "has_collision": true
      },
      "minecraft:pushable": {
        "is_pushable": false,
        "is_pushable_by_piston": false
      },
      "minecraft:knockback_resistance": {
        "value": 1.0
      },
      "minecraft:health": {
        "value": 1,
        "max": 1
      },
      "minecraft:Inventory": {
        "inventory_size": 27,
        "container_type": "minecart_chest",
        "private": false
      }
    }
  }
}

Grid Alignment and the Hybrid Block-Entity Pattern

Even with collision enabled and pushing disabled, an entity's minecraft:collision_box only approximates a solid block. Players standing on top of a 1x1 entity may experience slight jittering, and other blocks cannot be placed directly against the sides of an entity hitbox without clicking the floor or wall behind it. Furthermore, spawning an entity with a spawn egg places it at the exact cursor hit coordinate rather than snapping it to the center of the voxel (X.5, Y.0, Z.5).

To solve both alignment and solidity, experienced creators use a hybrid pattern: place a real custom block with an empty or invisible geometry, and spawn the visual entity at the exact center of that block. Because the real block occupies the grid space, players get crisp block-To-block collision, proper mining cracks, and normal block placement against its faces, while the entity handles the animations, seats, or container UI.

RP/models/entity/fake_crate.geo.json
{
  "format_version": "1.12.0",
  "minecraft:geometry": [
    {
      "description": {
        "identifier": "geometry.wiki.fake_crate",
        "texture_width": 64,
        "texture_height": 64,
        "visible_bounds_width": 2,
        "visible_bounds_height": 2,
        "visible_bounds_offset": [0, 0.5, 0]
      },
      "bones": [
        {
          "name": "block_root",
          "pivot": [0, 0, 0],
          "cubes": [
            {
              "origin": [-8, 0, -8],
              "size": [16, 16, 16],
              "uv": [0, 0]
            }
          ]
        }
      ]
    }
  ]
}

Spawning and Cleanup via @minecraft/server

In modern Bedrock add-ons, the cleanest way to link a real block shell to a fake block entity is a custom component registered with the @minecraft/server Script API. When the player places the invisible shell block, the onPlace callback spawns the entity at the block's center bottom coordinate. When the block is broken, the onPlayerDestroy callback locates the matching entity at that coordinate and removes it so the world is not littered with floating models.

Always add + 0.5 to the X and Z block coordinates when spawning the entity, because block coordinates reference the northwest bottom corner of a voxel while entity positions reference the center of the entity's feet.

BP/scripts/fake_block_link.js
import { world } from "@minecraft/server";

world.beforeEvents.worldInitialize.subscribe((initEvent) => {
  initEvent.blockComponentRegistry.registerCustomComponent("wiki:entity_link", {
    onPlace(event) {
      const { block, dimension } = event;
      const center = {
        x: block.location.x + 0.5,
        y: block.location.y,
        z: block.location.z + 0.5
      };
      dimension.spawnEntity("wiki:fake_crate", center);
    },
    onPlayerDestroy(event) {
      const { block, dimension } = event;
      const center = {
        x: block.location.x + 0.5,
        y: block.location.y,
        z: block.location.z + 0.5
      };
      const entities = dimension.getEntities({
        type: "wiki:fake_crate",
        location: center,
        maxDistance: 0.5
      });
      for (const entity of entities) {
        entity.remove();
      }
    }
  });
});

Which versions this applies to

Applies to Minecraft Bedrock 1.20.80 and newer. No experimental toggles are required for collisionless custom blocks, standard entity components, or block custom components in @minecraft/server.

When it does not work

What you seeWhyThe fix
The ghost block shows the purple-and-black missing texture checkerboard when using a vanilla texture like "stone".minecraft:material_instances looks up shortnames defined in RP/textures/terrain_texture.json. While many vanilla shortnames exist, custom blocks utilizing minecraft:geometry.full_block still require a valid terrain_texture.json entry or a known vanilla terrain key, and any typo falls back to the missing texture.Define your own shortname in RP/textures/terrain_texture.json pointing to "textures/blocks/stone" and reference that custom shortname inside minecraft:material_instances.
The entity-backed fake block slowly rotates its head or body after spawning, breaking alignment with the world grid.By default, Bedrock entities inherit base mob body control and may rotate slightly upon spawning or when interacted with unless explicitly locked in the Resource Pack.Add a client animation to the entity in the Resource Pack that sets "rotation": [0.0, "-query.body_y_rotation", 0.0] on the root bone, and run it continuously in scripts.animate so the model stays locked to world north regardless of the entity's internal yaw.
Adjacent blocks turn black or lose their faces when the ghost block is placed next to them.A block using "minecraft:geometry.full_block" and an "opaque" render method tells the chunk mesher to cull adjacent block faces, and default light dampening blocks light completely.Set "minecraft:light_dampening": 0 in the block components, and if players can see inside or through the block, switch to a custom geometry file so adjacent solid blocks do not cull their touching faces.

Reference, straight from the game files

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