Saltearse al contenido

Referencia de Blueprints de Procesos

Los blueprints de procesos son las definiciones de crafteo centrales en CraftingEngine. Guardados como archivos YAML en plugins/CraftingEngine/processes/, configuran flujos de crafteo multicapa, requerimientos de ítems, herramientas, catalizadores y condiciones de entorno.


1. Estructura de Alto Nivel del Esquema

id: "infernal_blade"
name: "<gradient:#ff4500:#ff8c00>Espadón Infernal</gradient>"
priority: 10
station_id: "example_runic_forge"
close_gui_on_craft: true
cancel_on_gui_close: false
policies:
multiplayer: "INDIVIDUAL" # INDIVIDUAL | CO_OP
failure: "REFUND_INPUTS" # DESTROY_INPUTS | REFUND_INPUTS | PRODUCE_FAILURE_OUTPUTS
obtaining: "DROP_IN_INVENTORY" # DROP | DROP_IN_WORLD | DROP_IN_INVENTORY | INTERACTION
abandonment:
max_distance: 6.0
grace_period_ticks: 60
tool_breakage:
allow_hotbar_swap: true
grace_period_ticks: 40
requirements:
capabilities:
- "high_temperature"
- "forging"
stations:
- "example_runic_forge"
conditions:
- id: "night_time"
environment: "minecraft"
condition: "time_between"
args: ["13000", "23000"]
inputs:
- resource: "minecraft:netherite_ingot"
quantity: 3
mode: "CONSUME"
- resource: "ia:infused_ruby"
quantity: 1
mode: "RESERVE" # Reserva transaccional (v2.8.0)
tools:
- resource: "minecraft:netherite_pickaxe"
quantity: 1
catalysts:
- resource: "minecraft:lava_bucket"
quantity: 1
mode: "PRESERVE"
triggers:
- type: "INTERACTION"
stages:
- id: "heating"
duration: "4s"
- id: "hammering"
mode: "MANUAL_ACTION"
action_type: "LEFT_CLICK_BLOCK"
required_strikes: 6
outputs:
- resource: "minecraft:netherite_sword"
display: "<gradient:#ff4500:#ff8c00><b>Espadón Infernal</b></gradient>"
quantity: 1
type: "SUCCESS"
inheritance: # Canal de herencia de propiedades y PDC (v2.9.0)
- target_key: "attack_bonus"
source_key: "ruby_power"
from: "ia:infused_ruby"
mode: "MULTIPLY"
factor: 1.5
default: 10
- target_key: "artisan"
source_key: "crafter"
mode: "COPY"

2. Especificación Detallada de Campos

Identidad y Presentación

  • id (String, Obligatorio): Identificador único usado en comandos, API y menús GUI.
  • name (String, Opcional): Nombre con formato MiniMessage de Adventure (colores hex, gradientes).
  • priority (Integer, Defecto: 0): Orden de aparición en los menús de recetas de la estación. Valores más altos aparecen primero.
  • station_id (String, Opcional): Limita la receta a una estación de trabajo específica.

Políticas Operativas (policies)

  • multiplayer:
    • INDIVIDUAL: Solo el jugador que inició el crafteo puede interactuar con él.
    • CO_OP: Permite que múltiples jugadores cercanos colaboren golpeando o aportando acciones.
  • failure:
    • REFUND_INPUTS: Devuelve los materiales al inventario del jugador o los suelta en el suelo.
    • DESTROY_INPUTS: Elimina los materiales en caso de fallo (para recetas de alto riesgo).
    • PRODUCE_FAILURE_OUTPUTS: Entrega subproductos de fallo (ej. Escoria, Carbón).
  • obtaining:
    • DROP_IN_INVENTORY: Coloca el ítem crafteado directamente en el inventario del jugador.
    • DROP_IN_WORLD: Suelta el ítem físico sobre el bloque de la estación.
    • INTERACTION: Deja el ítem flotando sobre la estación hasta que el jugador hace clic derecho para recogerlo.
  • abandonment:
    • max_distance: Distancia máxima en bloques antes de iniciar la cuenta atrás de abandono.
    • grace_period_ticks: Período de gracia en ticks (20 ticks = 1s) para regresar antes de cancelar el crafteo.
  • tool_breakage:
    • allow_hotbar_swap: Si la herramienta del jugador se rompe a mitad del crafteo, permite cambiarla por otra idéntica de la barra de acceso rápido sin cancelar el proceso.
    • grace_period_ticks: Ventana de tiempo permitida para realizar el cambio de herramienta.

Requisitos y Condiciones (requirements)

  • capabilities: Lista de capacidades (ej. forging, heating, pressure) que la estación debe proporcionar activamente.
  • stations: Lista de IDs de estación o materiales vanilla permitidos (blacksmith_anvil, minecraft:cauldron).
  • conditions: Comprobaciones de entorno evaluadas antes de iniciar el crafteo:
    • minecraft: Hora del día, clima, bioma, nivel de luz o altura (Y).
    • worldguard: Pertenencia a regiones o comprobación de flags.
    • papi: Expresiones lógicas evaluadas mediante PlaceholderAPI.

Recursos: Entradas, Herramientas y Catalizadores

Entradas (inputs)

Materiales requeridos y gestionados por el proceso:

  • resource: Identificador con espacio de nombres (Vanilla minecraft:iron_ingot, o externo ia:custom_steel, oraxen:mythic_gem, eb:energy_core).
  • quantity: Cantidad requerida.
  • mode: Controla el comportamiento de consumo o reserva:
    • CONSUME (Por defecto): El ítem se descuenta del inventario del jugador o contenedor al iniciar el proceso (o se difiere a etapas ITEM_INSERTION).
    • PRESERVE: El ítem debe estar presente en el inventario o estación para iniciar y avanzar el proceso, pero nunca se consume.
    • RESERVE (v2.8.0+): Reserva Transaccional de Insumos. Los ítems requeridos se extraen de forma segura a un búfer aislado en memoria (ItemReservationManager) al comenzar el crafteo:
      • Aislamiento Físico: Previene exploits de duplicación, cambios rápidos de ítems o pérdida accidental durante minijuegos o etapas manuales prolongadas.
      • Conservación Total de Metadatos: Mantiene intactas todas las etiquetas PDC personalizadas, nombres formateados, lore, encantamientos y durabilidad.
      • Confirmación al Completar: Cuando el proceso pasa a COMPLETED, los ítems reservados se destruyen/consumen definitivamente (INPUT_COMMITTED).
      • Devolución Segura ante Fallo o Cancelación: Si el crafteo se cancela, se abandona o falla bajo REFUND_INPUTS, los ítems reservados se devuelven al inventario del jugador o se arrojan de forma natural en el mundo si está lleno (ResourceReleasedEffect). Si la política es DESTROY_INPUTS, el búfer se limpia sin devolución.
      • Protección ante Reinicio del Servidor: Los apagados y recargas del servidor devuelven automáticamente todas las reservas activas a sus dueños, garantizando cero pérdida de ítems.

Herramientas (tools)

Equipamiento que el jugador debe sostener o poseer para ejecutar el proceso:

  • resource: Identificador de la herramienta (ej. minecraft:netherite_pickaxe, ia:blacksmith_hammer).
  • quantity: Cantidad requerida (por defecto: 1).
  • durability_cost: (Opcional) Daño de durabilidad infligido a la herramienta al finalizar o por cada acción. CraftingEngine admite el desgaste simultáneo de múltiples herramientas.

Catalizadores (catalysts)

Ítems auxiliares reutilizables (ej. células de energía, moldes de forja, prismas rúnicos) requeridos en la estación sin desgastarse ni consumirse.


Salidas y Canal de Herencia de Propiedades (outputs)

Las salidas determinan lo que genera el proceso al completarse con éxito, producir subproductos o fallar:

outputs:
- resource: "minecraft:netherite_sword"
display: "<gradient:#ff4500:#ff8c00><b>Espadón Infernal</b></gradient>"
quantity: 1
type: "SUCCESS" # SUCCESS | BYPRODUCT | FAILURE
quality_scaling: # (Opcional) Matriz de grados de calidad
thresholds:
S: 0.90
A: 0.75
B: 0.50
inheritance: # (v2.9.0+) Transferencia declarativa de metadatos y PDC
- target_key: "attack_bonus"
source_key: "ruby_power"
from: "ia:infused_ruby"
mode: "MULTIPLY"
factor: 1.5
default: 10
- target_key: "artisan"
source_key: "crafter"
mode: "COPY"
- target_key: "durability"
mode: "EXPRESSION"
expression: "source * 1.25 + 50"

Tipos de Salida (type)

  • SUCCESS: Ítem principal otorgado cuando el proceso finaliza exitosamente.
  • BYPRODUCT: Subproducto secundario (ej. botellas vacías, ceniza, serrín) otorgado junto con el ítem principal.
  • FAILURE: Chatarra o residuo (ej. escoria, carbón vegetal, empuñadura rota) generado cuando el proceso falla bajo la política policies.failure: PRODUCE_FAILURE_OUTPUTS.

Canal de Herencia de Propiedades de Ingredientes (v2.9.0+)

En sistemas de forja RPG, engaste de gemas y alquimia avanzada, los ítems portan atributos dinámicos: porcentajes de pureza, firmas de artesanos o etiquetas en su PersistentDataContainer (PDC). Los blueprints pueden heredar y escalar estas propiedades declarativamente mediante inheritance: (o inheritance_rules:).

Propiedades de Configuración de Reglas
PropiedadAliasDescripción
target_keyto_key, target, toClave de salida que se escribirá en el PersistentDataContainer del ítem resultante mediante NamespacedKey.
source_keyfrom_key, key, propertyClave del metadato o etiqueta PDC extraída del ingrediente. Por defecto toma el valor de target_key.
fromsource_resource, sourceIdentificador del recurso de entrada específico (ej. ia:infused_ruby) a consultar, o * para cualquier ingrediente (defecto: *).
mode-COPY (copia directa), MULTIPLY (multiplica el valor numérico por factor) o EXPRESSION (evalúa expresión matemática en AST).
factor / expressionexprMultiplicador numérico para MULTIPLY (ej. 1.5) o expresión matemática para EXPRESSION (ej. source * 1.25 + 50).
defaultdefault_valueValor StateValue de respaldo seguro en caso de que el ingrediente carezca de la propiedad solicitada, evitando fallos.
Captura de Metadatos e Inyección de Variables
  • Tipos PDC Extraídos: ItemMetadataSnapshotter captura todos los tipos primitivos de PDC (INTEGER, DOUBLE, FLOAT, LONG, BYTE, SHORT, STRING), custom model data, nombre visible y durabilidad de los insumos consumidos o reservados.
  • Variables Dinámicas en Texto: Los valores heredados se reemplazan automáticamente en las líneas de display: y lore usando %key%, <key>, <inherited:key> o {key}. Por ejemplo:
    display: "<gradient:#ffd700:#ffa500>Espada de %artisan%</gradient>"

Disparadores (triggers)

Define cómo se inicia un proceso:

  • INTERACTION: El jugador hace clic derecho en el bloque de la estación.
  • COMMAND: Se inicia mediante /cfe process start <id>.
  • EVENT: Activado por eventos de Bukkit (romper bloque, matar entidad, arrojar ítem).
  • AUTOMATIC: Se comprueba periódicamente cuando se insertan ítems en tolvas o contenedores multibloque.
  • API: Iniciado directamente por otros plugins mediante la API de Java.

3. Crafteos Instantáneos vs Multietapa

  • Crafteo Instantáneo: Si el bloque stages: se omite o está vacío, el crafteo se ejecuta al instante y permite crafteo masivo mediante Shift-Click.
  • Crafteo Multietapa: Si se definen stages:, CraftingEngine inicia una instancia activa con seguimiento de estado, hologramas, temporizadores y transformaciones físicas.

Siguientes Pasos