Skip to content

Crafting / Core / Internal

Purpose

This folder contains framework-internal helpers used by the Crafting service.

Types in Internal exist solely to support the implementation of CraftingServiceCore. They are not a supported extension surface and are intentionally hidden from public consumption.

If you are integrating, extending, or teaching Crafting, you should never need to reference anything in this folder.


What lives here

Internal delegate hooks

  • CraftModHook
  • CraftValidatorHook
  • CraftValidatorDelegate

These delegates are used internally by the service to: - compose modifier behaviour - compose validator behaviour - control execution order and error isolation - allow internal composition without exposing public seams

They exist to decouple the service from concrete implementations and to support clean internal orchestration.

External consumers must not subscribe to or depend on these hooks.
Use ICraftingModifier and ICraftingValidator instead.


Internal utilities

  • TimeExtensions
  • Small helper bridging ITimeProvider and CraftTimeMode
  • Exists to keep time semantics centralized and explicit

These helpers have no standalone meaning outside the service.


What does NOT belong here

  • Public extension points
  • Adapters or adapter interfaces
  • Game-specific logic
  • Teachables, diagnostics UI, or debug helpers
  • Anything callers might reasonably depend on

If a type needs to be referenced by external code, it does not belong here.


Visibility rules

All types in this folder are: - internal - subject to change without notice - excluded from public API guarantees

They may: - be renamed - be moved - be deleted - change semantics

without a major version bump.

Teachables compile without access to this folder by design.


Design notes

  • This folder exists to keep the public surface small and honest
  • Internal seams are allowed to be pragmatic and service-oriented
  • Stability guarantees stop at the folder boundary

If you feel the urge to use something from here, that is a signal a public seam is missing — not that this folder should be exposed.