Skip to content

📦 Crafting — Inventory Integration

This folder contains optional integration bridges between the Crafting system and the RevFramework Inventory system.

These integrations allow Crafting to:

  • resolve inventory containers
  • count items
  • check available space
  • consume inputs
  • deliver outputs

All interaction happens through a clean adapter seam, keeping Crafting independent from any specific inventory implementation.


🎯 Purpose

Inventory integration exists to connect Crafting to an external inventory backend without introducing hard dependencies into the core crafting model.

Key goals:

  • Keep Crafting independent of inventory implementation details
  • Allow projects to plug in their own inventory systems
  • Provide safe, predictable behaviour when inventory systems are missing
  • Support both simple and advanced inventory models via adapters

🔗 Adapter seam

All inventory integrations are built around:

Interface Purpose
ICraftingInventoryAdapter Container resolution, counting, space checks, and mutations
ICraftingInventoryReservationAdapter Optional strong/escrow reservation support

Adapters live in the Adapters/ subfolder and translate Crafting operations into inventory-system calls.


⚙️ Script defines

Inventory integrations are conditionally compiled:

Define Enables
REV_INVENTORY_PRESENT Inventory adapter integration and Unity-facing recipe conversion

Notes:

  • Crafting works without this define
  • Inventory-dependent behaviour is unavailable when not present
  • Adapters fail safely instead of throwing

🛡️ Current behaviour (important)

Direct inventory support

When an inventory adapter is present:

  • Crafting can:
  • resolve containers
  • count items
  • check space availability
  • consume inputs
  • add outputs

All operations are:

  • defensive
  • non-throwing
  • dependent on adapter/service behaviour

❗ Reservation / escrow support

Although the adapter interface includes:

  • ICraftingInventoryReservationAdapter

The current built-in inventory integration does NOT provide reservation primitives.

This means:

  • TryReserveInputs → always fails safely
  • TryReserveOutputs → always fails safely
  • reservation objects never commit successfully

As a result:

👉 Strong / escrow crafting paths that rely on inventory reservations will refuse to run

This is intentional and prevents partial or undefined state changes.


🧠 Design philosophy

Inventory integration follows strict rules:

  • Adapters are thin bridges, not logic owners
  • The inventory system remains authoritative
  • Crafting does not assume:
  • atomic transactions
  • reservation guarantees
  • container persistence behaviour
  • Space checks are non-reserving
  • Mutation success depends on the underlying inventory system

🔄 Typical flow

When an inventory adapter is present:

  1. Preflight:
  2. resolve container
  3. count inputs
  4. check space for outputs

  5. Accept:

  6. consume inputs via adapter

  7. Completion:

  8. add outputs via adapter

  9. Failure:

  10. optional refunds may occur depending on CraftingService configuration
  11. success of refunds depends on inventory adapter behaviour

🧩 Unity-facing recipe integration

When REV_INVENTORY_PRESENT is enabled:

  • RecipeDefinition becomes available as a Unity authoring helper
  • It allows designers to use ItemDefinition assets
  • It converts to RecipeCore at runtime via RecipeResolve

Without this define:

  • Only RecipeCore assets are supported
  • Unity-facing recipe wrappers are not available

💡 Notes

  • Inventory integration is optional
  • Safe to remove if your project does not use an inventory system
  • Fully replaceable with a custom adapter
  • Does not affect the core crafting model or recipe evaluation logic

Summary:
Inventory integration connects Crafting to the RevFramework Inventory system through a safe, optional adapter seam.

This is designed for RevFramework system interoperability, not generic third-party inventory support. Direct operations are supported; reservation/escrow behaviour depends on the capabilities of the integrated system.