๐ช Furniture
Overviewโ
Furniture is CraftEngine's entity-based decoration system. Unlike vanilla blocks that lock to a grid, furniture uses Minecraft display entities โ giving you full control over position, rotation, scale, and alignment down to the pixel. Crucially, CraftEngine manages these entities entirely on its own without adding them to the server's ticker list, so furniture performs significantly better than vanilla display entities.
Anatomyโ
Every piece of furniture follows the same skeleton. Each top-level key answers one question:
furniture:
default:my_furniture: # the furniture id โ referenced everywhere as default:my_furniture
variants: # REQUIRED โ visual & physical presence (elements, hitboxes, seats)
...
settings: # optional โ basic properties (sounds, hit times, tools)
...
behaviors: # optional โ added functionality (storage, display, lighting)
...
loot: # optional โ what it drops when broken
...
events: # optional โ reactions to player interaction
...
Only one section is mandatory: variants โ it tells the plugin what the furniture looks like and how it occupies space. Everything else is optional layering.
Sections to Configureโ
Quick Startโ
1. The smallest possible furnitureโ
One variant, one element, one hitbox โ already a fully working piece of furniture:
furniture:
default:my_chair:
variants:
ground:
elements:
- item: default:my_chair_model # the item model to display
hitboxes:
- position: 0,0,0 # collision box at origin
2. Tune its physicsโ
Add a settings section so it feels right โ sounds when placed and broken, the right number of hits to destroy:
furniture:
default:my_chair:
settings:
item: default:my_chair # the item id this furniture maps to (for creative middle-click)
hit_times: 3 # hits needed to break (default 0 = instant)
sounds:
break: minecraft:block.bamboo_wood.break
place: minecraft:block.bamboo_wood.place
hit: minecraft:block.bamboo_wood.hit
variants:
ground:
elements:
- item: default:my_chair_model
hitboxes:
- position: 0,0,0
3. Add a seat and lootโ
Give it a seat position so players can sit, and a loot table so it drops the right item when broken:
furniture:
default:my_chair:
settings:
item: default:my_chair
hit_times: 3
sounds:
break: minecraft:block.bamboo_wood.break
place: minecraft:block.bamboo_wood.place
hit: minecraft:block.bamboo_wood.hit
variants:
ground:
elements:
- item: default:my_chair_model
translation: 0,0.5,0 # lift it up half a block
hitboxes:
- position: 0,0,0
type: shulker # shulker = hard collision with peek animation
peek: 100
blocks_building: true
interactive: true
interaction_entity: true
seats:
- 0.5,0.3,0 # seat position
loot:
template: default:loot_table/furniture
arguments:
item: default:my_chair
The default:loot_table/furniture template uses furniture_item as its entry type โ this drops the exact item the player used to place the furniture, preserving all its custom data (name, durability, NBT). The item argument is only a fallback for when no source item exists (e.g. furniture placed via API). Always use furniture_item for furniture loot.
Binding Items to Furnitureโ
A furniture definition and the item players hold to place it are two separate things in CraftEngine. You connect them from the item side โ the item carries a furniture_item behavior that points at the furniture id:
items:
default:my_chair:
behavior:
type: furniture_item
rules:
ground:
rotation: four # snap to 90ยฐ increments
alignment: center # snap to block center
furniture: default:my_chair # โ the furniture id this item places
The furniture field can also hold the entire furniture config inline instead of an id, when you'd rather keep them in one file:
items:
default:my_chair:
behavior:
type: furniture_item
rules:
ground:
rotation: four
alignment: center
furniture:
settings: ...
variants: ...
loot: ...
Placement variants
Plain furniture_item places furniture on the clicked surface. For placement on water or lava, use Liquid Collision Furniture Item with the same furniture field.
Where to Look When You're Stuckโ
Match what you're trying to do to the right page:
| You want toโฆ | Go to |
|---|---|
| Give it a 3D model, text display, or adjust position/rotation/scale | Furniture Variants |
| Make it sit-able (add seats) | Furniture Variants โ Hitboxes |
| Add sounds, hit durability, required tools | Furniture Settings |
| Make it emit light | Glowing Furniture |
| Control what it drops | Loot Table |
| React to clicks or breaks | Events ยท Conditions |
| Bind it to an item so players can place it | Binding Items ยท Furniture Item |
| Use the item for creative middle-click (1.21.4+) | Furniture Settings โ item |
| Use a BetterModel or ModelEngine model | Furniture Variants โ BetterModel ยท ModelEngine ยท External Models |
| Make a variant that changes on interaction (lit/unlit, open/closed) | Events โ set_furniture_variant |