Headless data + logic layer for recipe-based crafting. Manages a
recipe registry, performs match-checks against a container's
inventory contents, and atomically consumes inputs + creates outputs.
Surface:
define_recipe{id, inputs, output, name?, description?, is_known?}
list_recipes(), get_recipe(id)
is_known(recipe_id, ctx) -- per-recipe discovery gate
can_craft(recipe_id, container, ctx) -- non-mutating availability
craft(recipe_id, container, ctx) -- mutating action
Recipe-Schema: count-form inputs (array of {template, count}) +
single output {template, count} + optional is_known(ctx) hook
(default returns true). Match-result schema:
{ ok=true, crafted_items, consumed }
{ ok=false, error='unknown_recipe' }
{ ok=false, error='missing_inputs', missing={{template, needed, have}} }
Container is both inputs-source and output-destination (single-container
v0.1; multi-container deferred). craft re-runs can_craft internally
and returns the structured error if state changed since the last frame.
Depends on lib-core.composition 0.3.0 (template_of, create, destroy)
and lib-core.inventory-list 0.1.0 (contents, add, remove).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2 lines
169 B
Plaintext
2 lines
169 B
Plaintext
{"id":"lib-core.crafting","version":"0.1.0","api_min":"0.1","deps":[{"id":"lib-core.composition","version":"0.3.0"},{"id":"lib-core.inventory-list","version":"0.1.0"}]}
|