Capacidades Modulares y Variables de Estado
CraftingEngine desacopla las recetas de materiales de bloque fijos mediante Capacidades y Variables de Estado. En lugar de exigir un bloque específico de ANVIL o FURNACE, las recetas solicitan capacidades abstractas como forging, heating o pressure.
1. ¿Qué son las Capacidades?
Las capacidades representan cualidades funcionales provistas por una estación o por el entorno:
+-----------------------+ +-----------------------------+| Requisitos de Receta | | Definición de la Estación |+-----------------------+ +-----------------------------+| - forging | <=======> | capabilities: || - high_temperature | | - forging |+-----------------------+ | - high_temperature | +-----------------------------+Ventajas de las Capacidades:
- Múltiples Estaciones, Misma Receta: Un crafteo de “Acero Plegado” puede realizarse en un yunque de hierro sencillo o en una gigantesca forja rúnica 3D, siempre que ambas provean la capacidad
forging. - Niveles y Rangos: Permite definir jerarquías (ej.
heating_tier_1,heating_tier_2). - Activación Condicional: Una estación puede aportar calor únicamente cuando esté alimentada por redstone o cuando tenga lava debajo.
2. Definición de Capacidades (capabilities/*.yml)
Las capacidades pueden definirse como archivos YAML independientes en plugins/CraftingEngine/capabilities/:
id: "high_temperature"name: "<gradient:#ff8a80:#ff5252>Alta Temperatura</gradient>"description: "Requiere calor ambiental superior a 300°C."
# Evaluaciones requeridas para activar esta capacidadevaluations: - type: "BLOCK_STATE" offset: [0, -1, 0] # Inspecciona el bloque inmediatamente debajo de la estación materials: - "LAVA" - "MAGMA_BLOCK" - "SOUL_FIRE"
variables: temperature: initial: 350.0 decay_rate: 1.53. Variables de Estado
Las estaciones y procesos activos mantienen mapas sellados y aislados de variables de estado:
temperature: Nivel de calor actual en °C.fluid_level: Milicubos (mB) de fluido contenidos en un caldero.pressure: Presión hidráulica o de vapor en PSI.durability: Resistencia estructural de bloques especiales.
Comprobación en Blueprints
Puedes evaluar variables de estado directamente en las condiciones de tus blueprints:
requirements: conditions: - id: "heat_check" environment: "craftingengine" condition: "capability.temperature >= 250"4. Capacidades Consumibles y Políticas de Drenaje (v2.7.0+)
Por defecto, las capacidades de una estación están permanentemente disponibles mientras se cumplan sus condiciones ambientales. No obstante, las recetas complejas a menudo demandan recursos consumibles propios de la estación —como calor acumulado en la forja, reservas de maná, tanques de agua o presión de vapor— que se desgastan a medida que se ejecutan los crafteos.
CraftingEngine introduce CapabilityDrainPolicy para gestionar el consumo progresivo y el agotamiento dinámico de capacidades:
+-----------------------------------------------------------------------------+| CICLO DE VIDA DEL DRENAJE DE CAPACIDAD |+-----------------------------------------------------------------------------+| || 1. VALIDACIÓN PREVIA Y DRENAJE POR USO || - Verifica que la estación cumpla: variable >= min_threshold + per_use || - Descuenta drain_per_use inmediatamente al iniciar el proceso. || || 2. DRENAJE CONTINUO POR TICK || - Descuenta drain_per_tick (escalado por delta time) en etapas activas. || - Se descuenta progresivamente mientras el crafteo avanza. || || 3. AGOTAMIENTO Y DERIVACIÓN DE RECUPERACIÓN || - Si la variable cae por debajo de min_threshold: || * Emite el evento CAPABILITY_EXHAUSTED al Flight Recorder. || * Deriva la etapa activa a failure_transition (etapa de rescate). || * Si no hay etapa de rescate, aborta el crafteo según su política. || |+-----------------------------------------------------------------------------+Sintaxis de Declaración en la Estación
En stations/*.yml, define capacidades estructuradas mediante un bloque drain::
capabilities: # Capacidad estática (siempre disponible) - "forging"
# Capacidad consumible regulada por política de drenaje - high_temperature: drain: variable: "temperature" # Variable de estado monitoreada en StationState drain_per_second: 5.0 # Tasa de drenaje continuo por segundo (o drain_per_tick: 0.25) drain_per_use: 15.0 # Deducción discreta al iniciar el proceso min_threshold: 200.0 # Nivel mínimo requerido para iniciar o mantener el procesoPropiedades de Configuración de drain
| Propiedad | Tipo | Valor por Defecto | Descripción |
|---|---|---|---|
variable | String | Obligatorio | Clave de la variable en StationState monitoreada y modificada por esta capacidad. |
drain_per_second | Double | 0.0 | Tasa de drenaje continuo por segundo. Se convierte internamente a drain_per_tick = tasa / 20.0. |
drain_per_tick | Double | 0.0 | Tasa de drenaje continuo aplicada directamente en cada tick del servidor. |
drain_per_use | Double | 0.0 | Cantidad discreta que se descuenta al iniciar el proceso (multiplicada en crafteos en lote). |
min_threshold | Double | 0.0 | Umbral mínimo por debajo del cual la capacidad pasa a estar agotada (isAvailable == false). |
Agotamiento de Capacidad y Etapas de Rescate
Cuando una estación agota una capacidad consumible durante un crafteo (por ejemplo, si la temperatura cae por debajo de min_threshold mientras se forja):
- El motor registra un evento de telemetría
CAPABILITY_EXHAUSTEDen el Flight Recorder. - Si la etapa activa define una
failure_transition, el proceso se desvía inmediatamente a dicha etapa de rescate sin bucles recursivos:stages:- id: "high_heat_forging"duration: "10s"failure_transition: "cooling_salvage" - Si no se especificó
failure_transition, el proceso termina como fallido y ejecuta la política global del blueprint (REFUND_INPUTSoDESTROY_INPUTS).
Siguientes Pasos
- Estaciones y Multibloques - Aprende cómo las estaciones vinculan y evalúan capacidades.
- Etapas y Transiciones - Configura transiciones de recuperación ante capacidades agotadas.
- Calderos y Fluidos - Observa variables de temperatura y fluido en acción.
- Scripting en Lua - Accede y modifica variables de estado desde scripts de Lua.