content 03
Furniture
Every .yml file in furniture/ is loaded. Each top-level key is one furniture id.
Furniture is built from two entities: a display entity that carries the model, and an Interaction
entity that carries the hitbox. Both store the furniture id and a shared root id in their
PersistentDataContainer, which is how the pieces stay connected across restarts.
Keys
| Key | Type | Default | Notes |
|---|---|---|---|
item_id | item id | the furniture id | The custom item used for the model, for /tessera get and for the break drop. |
display_name | MiniMessage | the id | |
display_type | ITEM_DISPLAY, BLOCK_DISPLAY or ARMOR_STAND | ITEM_DISPLAY | Unknown values fall back to ITEM_DISPLAY. ARMOR_STAND spawns an invisible marker stand wearing the item; BLOCK_DISPLAY currently behaves like ITEM_DISPLAY. |
hitbox.width | number | 1.0 | Interaction width. hitbox_width is accepted as a flat key. |
hitbox.height | number | 1.0 | Interaction height. hitbox_height is accepted as a flat key. |
scale | number or x/y/z | 1.0 | A single number scales all three axes. Item displays only. |
translation.x/y/z | number | 0.0 | Offset applied to the display transform. |
seat | boolean | false | Whether players can sit on it. |
seat_height | number | 0.5 | Y offset of the seat above the furniture. |
sounds.place | sound name | BLOCK_WOOD_PLACE | place_sound is accepted as a flat key. |
sounds.break | sound name | BLOCK_WOOD_BREAK | break_sound is accepted as a flat key. |
drop | item id | the furniture id | Custom item dropped on break. A vanilla material name here drops nothing. |
cancel_drop | boolean | false | Break with no drop. |
cardinal_rotation | boolean | true | Snap the yaw to four directions. |
Example
# plugins/Tessera/furniture/oak_chair.yml
oak_chair:
item_id: oak_chair
display_name: "<gold>Oak Chair</gold>"
display_type: ITEM_DISPLAY
hitbox:
width: 0.8
height: 1.0
seat: true
seat_height: 0.4
cardinal_rotation: true
sounds:
place: BLOCK_WOOD_PLACE
break: BLOCK_WOOD_BREAK
Placement is keyed on the item id, so the item that places a piece of furniture has to carry the
same id as the furniture entry: define oak_chair in items/ as well. item_id is what the display
entity wears and what /tessera get oak_chair and the break drop hand out. If it resolves to
nothing, the display falls back to oak planks.
Placing and breaking
- Right clicking a block with the placer item spawns the furniture in the block next to the face you
clicked, centred on X and Z and turned to face you. With
cardinal_rotation: truethe yaw snaps to the nearest quarter turn. The item is consumed outside creative mode. - Hitting the interaction entity breaks the furniture. Both entities and any seat are removed, and
the item behind
dropis dropped unlesscancel_dropis set. - Furniture is made of entities, so it is not stored in the chunk container the way blocks are.
Seats
With seat: true, right clicking the furniture seats the player on a temporary armour stand spawned
at seat_height above the furniture. One player per seat. Dismounting removes the stand.
/tessera sit does the same on the block you are looking at, within five blocks.
Seats that survive a crash are cleaned up by /tessera cleartemp.
Management commands
/tessera furniture list [radius] # default radius 10
/tessera furniture remove [radius] # tessera.admin
/tessera killfurniture [radius] # tessera.admin, radius clamped to 1-50
/tessera cleartemp # tessera.admin, orphaned seats in all worlds