---
title: "Block state handle"
---

> Documentation Index
> Fetch the complete documentation index at: https://aesthetic-docs.pages.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Block state handle

From `world:block_state(pos)` or a block [raycast hit](/raycast)'s `state`. Live
handle — every method re-reads the world.

| Method | Meaning |
|--------|---------|
| `id`, `name` | Block id (`"minecraft:chest"`) and display name |
| `position` | Queried block position (floored) as [vec3](/vec3) |
| `air`, `liquid`, `solid`, `replaceable` | Kind flags (`replaceable` = can place over it) |
| `burnable` | Fire can consume it |
| `tool_required` | Drops only with the right tool |
| `opaque`, `full_cube`, `has_collision` | Shape flags |
| `has_block_entity` | Extra data (chest, furnace, …) |
| `random_ticks` | Receives random ticks |
| `emits_redstone` | Emits redstone power |
| `piston_behavior` | `"normal"`, `"destroy"`, `"block"`, `"push_only"`, … |
| `hardness`, `blast_resistance` | Mining / explosion resistance |
| `slipperiness` | Sliding (0.6 normal, 0.98 ice) |
| `velocity_multiplier`, `jump_velocity_multiplier` | Movement modifiers (soul sand, honey) |
| `luminance` | Light emitted, 0–15 |
| `opacity` | How much light it blocks |
| `map_color` | Map color as signed RGB integer — not `0xAARRGGBB` |
| `properties` | State properties as strings, e.g. `b:properties().facing == "north"` |
| `fluid` | `{id, level, still}` if the block holds fluid, or `nil` |
| `tags` | Block tag ids, e.g. `"minecraft:mineable/pickaxe"` |

```lua
local b = world:block_state(pos)
if b and b:properties().lit == "true" then  -- properties are strings, not booleans
print(b:name() .. " is lit")
end
```

Source: https://aesthetic-docs.pages.dev/block-state/index.md
