Перейти к основному содержимому

craftengine_set_quest_block

Type: action entry Exact entry ID: craftengine_set_quest_block

Role

This TypeWriter entry is registered in code with the exact display name Change what one player sees at a spot, inside a quest zone — a block or a piece of furniture.

It writes a deviation directly, for the triggering player — or their group — only. craftengine_quest_zone_audience already records what a player breaks or places; this action covers everything a generic break does not describe — a seal that becomes a broken seal rather than air, a rune that lights up, a crate that changes to its emptied model.

blockId names what to show, and it can be either kind of CraftEngine thing:

  • a block — the id is resolved through CraftEngine, so the player is shown the real custom block and not the vanilla state hiding underneath it. A vanilla material works too.
  • a piece of furniture — a ghost is raised on the block: a real, interactable piece of furniture that exists for this player alone. Right-clicking it fires the usual furniture events, sitting on it works, breaking it removes it for that player. It has no collision, for anyone. The yaw of location turns it.

An empty id clears the spot: air in place of a block, and no ghost.

The world is not touched. Only this player's view changes, and it lasts until they leave the zone or the state is cleared. In a zone that shares its state across a group, every member who is inside sees the change at once.

Verified fields

Exact fieldTypeField guidance
artifactRef<QuestStateArtifactEntry>Where this artifact's state is stored. Must be the artifact the zone uses.
zoneIdStringThe zone this deviation belongs to, as named on the zone audience.
groupRef<GroupEntry>The group the zone shares its state with, if any. Must match the zone audience.
locationVar<Position>The block to change. For furniture, the yaw orients it.
blockIdVar<String>A CraftEngine block or furniture id ('namespace:id'), or a vanilla material. Empty clears the spot.
variantVar<String>For furniture, the variant to show. Leave empty to let CraftEngine pick one.

In practice

Open a passage for whoever solved the puzzle, mark the chest each player has already looted, or light a rune per player as their quest advances.

blockId is read as a CraftEngine furniture first, as a CraftEngine block second and as a vanilla material last, so mynamespace:sealed_door, mynamespace:loot_crate and stone all work. Leave it empty to clear the spot for that player.

To change a piece of furniture the builder placed — an intact seal into a broken one — pair two actions: craftengine_set_quest_furniture hides the world's seal from the player, and this action raises the broken one as a ghost on the same block.

zoneId must match the zone audience exactly. The audience defaults it to its own entry id when the field is left empty there, so copy that id rather than inventing one. The same goes for group: a grouped zone files its state under the group, and an action without the group writes where nothing reads.

Common issue

If craftengine_set_quest_block is not available, check the installed extension version, the selected TypeWriter category, the exact identifier, and the extension dependencies. An entry from a Soon extension must not be used as an available feature.

Nothing happens and no error appears — the most common cause is a zoneId or a group that does not match the audience, or an artifact that is not the one the zone uses. The deviation is written, it is just filed where nothing reads it.

The action is skipped entirely when zoneId is empty. A warning naming the entry is written to the server log.

An unknown id is reported and nothing is shown. Check the id against CraftEngine's own registry; craftengine_registry_ids_variable lists what is loaded.

A ghost stops nobody. Its viewers walk through it, as does everyone else. Use ghosts for things to look at and to use, not for walls: the world's own furniture, hidden per player, still has its collision.

Technical reference

Source moduleSource file
TypeWriter-CraftEngineExtensionqueststate/QuestStateActions.kt
TypeWriter-CraftEngineExtensionqueststate/QuestFurnitureGhosts.kt