Furniture - Simple
Tutorial on how to create your first furniture
A furniture is a decorative object which can be solid, emit light, used as chair and can have other features.
Limitations of all furnitures
non solid furnitures can't receive interact events, they can only be removed using mouse left click but cannot be interacted with (only solid furnitures can get interact events). This might not be true anymore on recent game versions.
max size of the hitbox is 3x3x3 for performance reasons
Furniture entity types
item_display
item_display
This type of furniture entity is useful for any type of furniture you want to create.
behaviours:
furniture:
entity: item_display # <---
display_transformation:
transform: HEAD
right_rotation:
axis_angle:
angle: 180
axis:
x: 0
y: 1
z: 0
translation:
x: 0
y: 0.92
z: 0
scale:
x: 0.45
y: 0.45
z: 0.45
Special properties
item_display
allows you to do some special adjustments to your furniture model using the display_transformation
property.
You can resize it, rotate it and move it freely.
This feature uses the native item_display
feature of Minecraft, you can read more here and online.
You can also use this tool to preview your changes.
armor_stand
armor_stand
This type of furniture entity is useful when you want to create chairs, plants, columns, lamps and similar environment decorations which don't need to rotate based on the surface on which you place them.
behaviours:
furniture:
entity: armor_stand # <--- (by default, not mandatory)
small: true
solid: true
small
allows to set the armor stand small. It will have a smaller hitbox by default and the model will look smaller.
item_frame
item_frame
This type of furniture entity is useful when you want to make the furniture rotate based on the surface on which you place it.
For example if you have a decorative lamp you can make it placeable on walls, ceiling and ground and and make it oriented automatically based on the surface inclination.

behaviours:
furniture:
entity: item_frame # <--- (by default, not mandatory)
light_level: 15
solid: false
Chair
To create a chair you just have to follow the furniture creation tutorial and add a simple attribute to the furniture to make it "sittable".
Just add the furniture_sit
behaviour and specify the sit_height
.
behaviours:
furniture:
# .....
furniture_sit:
sit_height: 0.5
sit_height
sit_height
Height of the sit position
opposite_direction
opposite_direction
Default: true. Enable if you want the player rotate of 180 degrees when they sit on this furniture.
passenger_front_view_on_sit
passenger_front_view_on_sit
Default: true. Rotate the player to face the front of the furniture when they sit on it.
passenger_rotate_body
passenger_rotate_body
Default: false. Rotate the player body while sitting on the furniture.
Limit placement location
You can limit the placement of the furniture using the placeable_on
property.
placeable_on:
walls: true
ceiling: true
floor: true
Hitbox
You can make a furniture solid adding the "solid" attribute and specifying a hitbox (if you want > 1x1x1)
table:
display_name: display-name-table
permission: table
lore:
- 'lore-decorative-item'
resource:
material: OAK_WOOD
generate: false
model_path: item/table
behaviours:
furniture:
small: true
solid: true
entity: armor_stand
hitbox:
length: 1
width: 1
height: 1
length_offset: 0
width_offset: 0
height_offset: 0

Hitbox has wrong location
Sometimes you need to also specify an "offset" to fix the hitbox location. This can happen if your furniture is 2x1x1 for example.

Correct location
I had to set a width offset
of 0.5
.
You can also use negative values if needed.
hitbox:
length: 1
width: 2
height: 1
width_offset: 0.5
Preview the hitbox


Hitboxes limitations
item_frame
limitations (doesn't affect armor_stand
)
Furnitures that use entity
item_frame
only support hitboxes with width
and length
of the same value.
Example: width: 2
, length: 2
, height: 1
.
If you want to have different width
and length
use entity
item_display
or armor_stand
.
Creating a simple furniture
Configuration file
The first step is to create a configuration file in your namespace folder.
In this example I called it furniture_example.yml
.
info:
namespace: myitems
items:
lamp:
display_name: "Lamp"
permission: myitems.decorative.lamp
lore:
- lore-decorative-item
resource:
material: PAPER
generate: false
model_path: lamp
behaviours:
furniture:
light_level: 13
As you can see I created the item with some special properties.
behaviours
attribute has a special sub-attribute called furniture
, this attribute tells ItemsAdder that this item is a placeable furniture model.
Let's add some more settings to it:
lamp:
display_name: "Lamp"
permission: myitems.decorative.lamp
lore:
- lore-decorative-item
resource:
material: PAPER
generate: false
model_path: lamp
behaviours:
furniture:
light_level: 13
solid: true
placeable_on:
floor: true
ceiling: false
walls: false
hitbox:
height: 1
sound:
place:
name: block.metal.fall
break:
name: block.metal.break
I added some properties, in this case I specified where the furniture can be placed (only on the floor
), the hitbox
size and place
/break
sounds.
info:
namespace: myitems
items:
lamp:
display_name: "Lamp"
permission: myitems.decorative.lamp
lore:
- lore-decorative-item
resource:
material: PAPER
generate: false
model_path: lamp
behaviours:
furniture:
light_level: 13
solid: true
placeable_on:
floor: true
ceiling: false
walls: false
hitbox:
height: 1
sound:
place:
name: block.metal.fall
break:
name: block.metal.break
Model file
Now open BlockBench and create a "Java Block/Item".

Now create your model, in this example I'm modelling an ugly minimal modern lamp.

Important: make sure the north is opposite of where you want the model to face.
Or add the property to the YML configuration opposite_direction: true
Edit how the model is shown on player hand:


Configure the in-game view
Using armor_stand
armor_stand
You have to select the head icon and then small armorstand:

Then you have to shift your model down until it matches the armorstand base:

Using item_display
item_display
Select Frame and Invisible Top. Adjust the model Z Translation (the blue arrow) until it matches the bottom of the white block perfectly.

Using item_frame
item_frame
Same thing of item_display
.
Export the model
Now let's save the model file into the correct folder, in this case I set this property in the yml configuration file: model_path: lamp
, so you have to save the .json file inside this path: contents/myitems/models/lamp.json
.
To achieve this, click on "File" followed by "Export Model" and finally "Export Block/Item Model". In the new window, head over to the path you want to save your model under, give it the right name and confirm the changes.
Saving changes
Now run /iazip
(and follow the hosting tutorial if needed).
To obtain the item use this command: /iaget myitems:lamp
.


Last updated
Was this helpful?