Skip to content

Architecture

DarkBladeDev edited this page Feb 21, 2026 · 2 revisions

Arquitectura

Componentes principales

  • EventLoader: carga events/*.ymlEventDefinition.
  • EventEngine: motor principal; registra defaults, triggers, y administra runtimes.
  • RuntimeScheduler: ejecuta EventRuntime tick a tick.
  • ChunkEventLockManager: locks por ChunkPos para evitar superposiciones.
  • TerritorialTriggerDispatcher: resuelve target y llama a startEvent.
  • PersistenceManager: snapshot/restore de runtimes (runtime.json).

Flujo de ejecución

  1. Se carga events/*.yml.
  2. Se calculan definiciones globales de variables (scope: global) y se inicializan.
  3. Se registran triggers por evento.
  4. Un trigger dispara y produce un TriggerContext.
  5. El dispatcher resuelve el chunk objetivo:
    • Si TriggerContext trae location, se usa el chunk de esa ubicación.
    • Si no trae ubicación, se usa event.target.strategy (por defecto random_loaded_chunk).
  6. startEvent crea un EventRuntime, inicializa variables locales, compila el flow, y toma locks por scope.
  7. El scheduler ejecuta el plan (acciones, delays, loops, async).

Locks territoriales

Los locks se manejan con un mapa ChunkPos -> EventRuntime.

  • Si un chunk objetivo está ocupado, startEvent retorna CHUNK_OCCUPIED.
  • El scope por defecto (chunk_radius) define qué conjunto de chunks se intenta bloquear.

Participantes

CEE mantiene un set de participantes (UUIDs) por runtime.

  • Se actualiza mediante un listener global que, al cambiar de chunk, asigna al jugador como participante si su chunk actual tiene runtime.
  • Acciones como send_participants iteran sobre ese set.

Extensión

El motor expone una API (interfaces) para registrar:

  • actions
  • conditions
  • triggers
  • scopes
  • chunk strategies

Ver: Extender el motor (API)

Clone this wiki locally