craftengine_set_quest_furniture
Type: action entry
Exact entry ID: craftengine_set_quest_furniture
Role
This TypeWriter entry is registered in code with the exact display name Hide or show one piece of the world's furniture, for one player, inside a quest zone.
It takes a piece of furniture the builder placed out of one player's view, or puts it back. The world keeps the furniture; this player's scope simply stops being shown it. Everyone else still sees it.
furnitureId says which furniture at the block is meant. Two pieces can share an anchor block —
the intact seal and the broken one placed at the same spot — and hiding by position alone hid both,
which read as the furniture vanishing altogether. Name the id, and the other piece stays in view.
Like every deviation in a quest zone, this is remembered — the player finds the same view when they come back — and the world is never written to.
Verified fields
| Exact field | Type | Field guidance |
|---|---|---|
artifact | Ref<QuestStateArtifactEntry> | Where this artifact's state is stored. Must be the artifact the zone uses. |
zoneId | String | The zone this deviation belongs to, as named on the zone audience. |
group | Ref<GroupEntry> | The group the zone shares its state with, if any. Must match the zone audience. |
location | Var<Position> | The block the furniture is anchored on — where it was placed, not where its model appears to sit. |
furnitureId | Var<String> | Which furniture at that block ('namespace:id'). Empty means every piece anchored there. |
visibility | QuestFurnitureVisibility | Whether this player is shown the furniture. |
visibility values
| Value | Behaviour |
|---|---|
HIDDEN | The player is not shown it. Everyone else still is. |
VISIBLE | The player is shown it again. With an empty furnitureId, everything hidden at that block is shown again. |
In practice
Empty a crate for whoever looted it, take down a barrier for whoever holds the key, or swap a cracked seal for an intact one as a quest step is undone.
To change what a player sees rather than remove it, pair this with craftengine_set_quest_block:
hide the world's intact seal here, and raise the broken one as a ghost on the same block there. The
ghost exists for that player only, and the world never changes.
Common issue
The furniture vanishes instead of changing. furnitureId was left empty while two pieces share
the block, so both were hidden. Name the one to hide.
A replaced piece stays hidden. The hiding is filed by block and by id and re-applied on a cadence,
so a furniture removed and placed again at the same spot is hidden again for that player. That is by
design — the player's state persists until craftengine_clear_quest_state drops it, or a VISIBLE
action lifts it.
A hidden piece still stops the player. Its collision belongs to the server, not to anyone's view. Hide furniture that is there to be looked at, not furniture that is in the way.
Technical reference
| Source module | Source file |
|---|---|
TypeWriter-CraftEngineExtension | queststate/QuestStateActions.kt |
TypeWriter-CraftEngineExtension | queststate/PlayerFurnitureView.kt |