Skip to content

🧱 Crafting — Core

📦 Folder Overview

This folder contains the core runtime implementation of the Crafting system.

It defines the actual crafting behaviour, including:

  • preflight evaluation
  • input and currency consumption
  • job scheduling and execution
  • output delivery
  • failure handling
  • persistence and offline progress (job-based)

If something changes how crafting behaves at runtime, it belongs here.

This folder is not UI, not adapters, and not optional gameplay extensions.


🧩 What Lives Here

CraftingService

The orchestration engine for all crafting operations.

  • manages the job lifecycle (accept → run → deliver → complete/fail)
  • integrates with inventory, currency, authority, routing, RNG, time, and persistence
  • exposes the supported public API used by gameplay, UI, and teaching tools

Escrow Path (optional)

An opt-in, immediate-only path for atomic crafting using reservation semantics.

  • implemented as part of CraftingService
  • uses reservation/hold adapters when available
  • executes immediately (no job lifecycle)

This path:

  • does not replace the job system
  • does not support long-running or queued crafting
  • does not provide multi-container atomic guarantees

If reservation-capable adapters are not available, this path is not used.


Supporting Domains

  • Context/ Immutable context (CraftContext) and mutable adjustments (CraftAdjustments)

  • Contracts/ Public data contracts (jobs, requests, results, probes, enums)

  • Lifecycle/ Job lifecycle phase definitions and events

  • Recipe/ Runtime recipe data (RecipeCore) and resolution (RecipeResolve)

  • Internal/ Framework-only helpers and implementation details


🎯 Purpose

This folder defines the authoritative runtime behaviour of the Crafting system.

It provides:

  • a service-driven execution model
  • deterministic evaluation (subject to RNG configuration)
  • explicit failure handling and result reporting
  • persistence and offline progress support

🧠 Usage Guidance

  • Use CraftingService as the entry point for all crafting operations
  • Interact with the system through public contracts and abstractions
  • Extend behaviour using adapters, validators, modifiers, and routing

Do not modify or subclass core runtime types to extend behaviour.


⚠️ Important Notes

  • Crafting is service-driven, not recipe-driven
  • Recipes are treated as immutable runtime data
  • Mutation is gated and observable
  • Failure reasons are explicit and surfaced
  • Determinism depends on RNG configuration and call order

🚫 Not for Production Use

This folder does not include:

  • UI or editor tooling
  • concrete inventory or currency implementations
  • game-specific logic (levels, perks, tech trees)

These belong in adapters, modifiers, validators, or higher-level systems.


  • Crafting Abstractions (integration contracts)
  • Crafting Adapters (system integrations)
  • Integrations (module-specific implementations)

🧱 Public vs Internal

Public API

  • CraftingService
  • RecipeCore
  • RecipeResolve
  • Context types
  • Contract types
  • Lifecycle types

Internal

  • Internal/ contents
  • internal delegates and helpers

Teachables compile against the public surface only.


🧩 Supported Extension Points

Crafting is extensible without subclassing through:

  • adapters (ICraftingInventoryAdapter, ICraftingCurrencyAdapter, etc.)
  • modifiers (ICraftingModifier)
  • validators (ICraftingValidator)
  • routing (ICraftingOutputRouter)
  • authority (ICraftingAuthority)

Behaviour outside these seams is not part of the supported extension surface.


🧠 Design Notes

  • service-driven architecture
  • explicit and observable state transitions
  • failure-first design (no hidden partial success)
  • offline progress based on wall-clock time

This layer is designed to operate consistently across save/load cycles and different authority models, depending on integration setup.