Voxel Shop beta is live. Expect occasional bugs. Learn more  
TW Extension - CraftEngine icon

TW Extension - CraftEngine v1.1

TW Extension - CraftEngine



🛠️ CraftEngine Integration


Custom blocks, furniture and items as quest material, with a private version of the world for each player.


A TypeWriter extension by BTC Studio


Your CraftEngine blocks and furniture look great, but quests cannot react to them, and a puzzle room that one player solves is solved for everyone.


CraftEngine Integration turns custom blocks, furniture and items into quest events, objectives and actions, and adds quest zones where each player (or each group) sees and changes their own copy of an area.



✨ What it does


The extension connects CraftEngine to TypeWriter. Quests react when a player breaks, places or clicks custom blocks and furniture, count them as objectives, read what the player holds or looks at, and place, replace or remove them.


The second half is the quest zone. What a player breaks, places or changes inside a zone is recorded for that player only, sent as packets, and given back when they return.


The real world is never written to: leaving a zone costs nothing, and nothing is left half done if the server stops in the middle of a quest. A group can share a zone, so a party clears a room together.



📡 Block and furniture events



  • Full lifecycle: events for custom blocks and furniture being placed, broken, interacted with, and hit (furniture), including refused placements.
  • Projectile dispensers: react when a custom block dispenses a projectile.
  • Placement rules: refuse a placement or a hit unless the player holds a permission or matches criteria, for example to keep a ritual altar for players who earned it.
  • Item events: react when a CraftEngine item is picked up, dropped or eaten.

🎯 Objectives and world actions



  • Counting objectives: break, place or replace custom blocks, and break or place furniture, as quest steps. Each position counts once per player, so the same block cannot be farmed.
  • Place and remove: put a block or a piece of furniture in the world, or take it away, from any trigger.
  • Replace: swap a block or furniture for another one. In a quest zone the swap can stay private to the player.
  • Furniture data: store your own data on placed furniture.
  • Items by id: give or remove CraftEngine items as a reward or a cost.

🧱 Quest zones



  • A private area per player: a Quest Zone Audience gives each player their own view of blocks and furniture, remembered between visits through a Quest State Artifact.
  • Shared by a group: let a party or any group share one zone, so teammates see each other's changes.
  • Set Quest Block and Set Quest Furniture: change what one player sees at a spot, hide a piece of furniture from one player, or show one that exists for that player only (a ghost that viewers can right-click and break).
  • Clear Quest State: wipe a player's state when the quest ends, so the room can be solved again.
  • Inventory swap: take a player's whole inventory, or only chosen items, when they enter a zone and give it back when they leave.
  • Fake Block Audience: show a fixed set of blocks and furniture to an audience, without recording anything.
  • Real collision: collision always follows the real world, so build zones where the change is something to see and use, not something to stand on.

🔎 Facts, variables and audiences



  • Item facts: is the player holding an item, how many do they carry, what is its cooldown.
  • Named cooldowns: check whether a cooldown is active and how much time is left.
  • Looking and standing: facts and variables tell which block or furniture the player looks at, and which block is under their feet, to build "inspect the statue" interactions.
  • Item variables: the id of the held item, and any property of an item, for use in dialogue text.
  • Registry IDs: list the ids known to CraftEngine, useful to check a block or furniture id.
  • Audiences by behaviour: group players who hold an item, sit on furniture or stand near furniture.

🧩 Entries


All 49 entries


Events



  • on_craftengine_block_place_event: custom block placed
  • on_craftengine_block_break_event: custom block broken
  • on_craftengine_block_interact_event: custom block clicked
  • on_craftengine_block_attempt_place_event: block placement attempted
  • on_craftengine_dispense_projectile_event: projectile dispensed from a block
  • on_craftengine_furniture_place_event: furniture placed
  • on_craftengine_furniture_break_event: furniture broken
  • on_craftengine_furniture_interact_event: furniture clicked
  • on_craftengine_furniture_attempt_place_event: furniture placement attempted
  • on_craftengine_furniture_hit_event: furniture hit
  • craftengine_on_item_pickup_event: CraftEngine item picked up
  • craftengine_on_item_drop_event: CraftEngine item dropped
  • craftengine_on_item_consume_event: CraftEngine item consumed

Objectives



  • break_craftengine_block_objective: break custom blocks
  • place_craftengine_block_objective: place custom blocks
  • replace_craftengine_block_objective: replace custom blocks
  • break_craftengine_furniture_objective: break furniture
  • place_craftengine_furniture_objective: place furniture

Actions



  • place_craftengine_block: place a block
  • remove_craftengine_block: remove a block
  • replace_craftengine_block: replace a block or furniture
  • place_craftengine_furniture: place furniture
  • remove_craftengine_furniture: remove furniture
  • craftengine_give_item_action: give a CraftEngine item
  • craftengine_remove_item_action: remove a CraftEngine item
  • craftengine_set_quest_block: change what one player sees at a spot in a quest zone
  • craftengine_set_quest_furniture: hide or show a piece of furniture for one player
  • craftengine_clear_quest_state: drop a player's state for a quest zone

Facts



  • craftengine_holding_item_fact: is the player holding a given item?
  • craftengine_item_count_fact: number of a given item in the inventory
  • craftengine_item_cooldown_fact: cooldown of a given item
  • craftengine_cooldown_active_fact: is a named cooldown active?
  • craftengine_cooldown_remaining_fact: time left on a named cooldown
  • craftengine_looking_at_block_fact: is the player looking at a given block?
  • craftengine_looking_at_furniture_fact: is the player looking at a given furniture?
  • craftengine_standing_on_block_fact: is the player standing on a given block?

Variables



  • craftengine_item_in_hand_id_variable: id of the held item
  • craftengine_item_property_variable: property of an item
  • craftengine_looking_at_block_id_variable: id of the block looked at
  • craftengine_looking_at_furniture_id_variable: id of the furniture looked at
  • craftengine_standing_on_block_id_variable: id of the block underfoot
  • craftengine_registry_ids_variable: list the ids known to CraftEngine

Audiences



  • craftengine_quest_zone_audience: per-player or per-group quest zone (optional inventory swap)
  • craftengine_fake_block_audience: show blocks and furniture to an audience alone
  • craftengine_holding_item_audience: players holding an item
  • craftengine_sitting_on_furniture_audience: players sitting on furniture
  • craftengine_furniture_proximity_audience: players near furniture

Artifact and sound



  • craftengine_quest_state_artifact: stores the per-player quest zone state
  • craftengine_sound: CraftEngine sound id

The text of the objective lines is editable with TypeWriter snippets (craftengine.objective.display and craftengine.objective.completed).



🚀 Set up in a few minutes



  • Drop the jar in plugins/Typewriter/extensions/ (CraftEngine and the TypeWriter Quest extension must be installed) and restart.
  • On a manifest page, add a Quest State Artifact and a Quest Zone Audience that points to it. Nest the zone under the audience that decides who is in the room.
  • On a sequence page, link an On Block Interact event to a Set Quest Block action, using the same artifact and zone id, and the block id to show.
  • Add a Clear Quest State action where the quest ends, publish, and test with two players: each one opens their own seal. The full walkthrough is in the documentation.

📋 Requirements



  • TypeWriter 0.9.0-beta-177 or newer, with the Quest extension
  • Paper server
  • CraftEngine (built against 26.8; the renames of 26.9 are handled)
Sign in
$7.00 USD
Sign in to purchase, save this product to your cart, and keep downloads tied to your account.
Stripe