import { GameClock, SystemHook } from './clock' import { DataPack } from '../../data/registry' import { EventDef } from '../../data/events' import type { World } from '../runtime/World' export type PluginKind = 'system' | 'data' | 'events' | 'content' export interface PluginHookGuard { onLoad?(): void onDisable?(): void onEnable?(): void onUninstall?(): void } export interface CotycPlugin { id: string name: string version: string author?: string description: string kind: PluginKind dependencies?: string[] conflicts?: string[] install(ctx: PluginContext): void uninstall?(ctx: PluginContext): void hooks?: PluginHookGuard protected?: boolean /** MOD 插件溯源(0.1.27:导出/显示用——原始 ModPack 引用) */ source?: unknown } export interface PluginContext { world: World clock: GameClock register: (phase: Parameters[0], fn: SystemHook) => () => void onYearStart: (fn: SystemHook) => () => void /** 时轮 anchor:phase 前/后挂勾(0.1.24;卸载时全摘) */ beforePhase: (phase: Parameters[0], fn: SystemHook) => () => void afterPhase: (phase: Parameters[0], fn: SystemHook) => () => void /** 世界生成钩子:插件可注入 NPC 模板(worldgen 词库插件化) */ addNpcTemplate: (def: import('../../data/npcs').NpcFamilyDef) => void /** 配方注册(MOD/内容包扩展丹药/铸器表) */ addPillRecipe: (r: { output: string; name: string; danfangLevel: number; stones: number; lingcao: number; beastcore: number; desc: string }) => void addForgeRecipe: (r: { output: string; name: string; stones: number; lingkuang: number; beastcore: number; desc: string }) => void /** 世界生成词库池注入(styles/regions/fams/suffixes) */ addWorldGenPool: (part: { styles?: string[]; regions?: string[]; fams?: string[]; suffixes?: string[] }, source?: string) => void addCalamity: (name: string, opts: { brief?: string; family?: Partial>; effect?: Partial> }) => boolean /** 0.1.31 内容面口 */ packExtend: (key: 'techniques', additions: Record) => void mergeAddPack: (key: 'events' | 'techniques', items: unknown[]) => void addBuildingDef: (def: import('../../data/buildings').BuildingDef) => void addPostDef: (def: import('../../data/posts').PostDef) => void addAspirationDef: (def: import('../../data/aspirations').AspirationDef) => void addFormationDef: (def: import('../../data/formations').FormationDef) => void /** 0.1.34 功法定义注册(全字段——含流派效果;grade≤3 入求学/秘境池) */ addTechniqueDef: (def: import('../../data/realms').TechniqueDef) => void /** 0.1.34 世界观察回调(每世界 tick 后——只读记录,禁止写时轮/序;MOD 数值洞察口) */ onWorldSimTick: (fn: (year: number, month: number, gameState: unknown) => void) => () => void addTraitDef: (def: import('../../data/traits').TraitDef) => void addCapability: (cap: { id: string; name: string; version: string; desc: string }) => void removeCapability: (id: string) => void enableCapability: (id: string, enabled: boolean) => void overridePack: (partial: Partial) => void resetPack: () => void addEventPool: (id: string, events: EventDef[]) => void removeEventPool: (id: string) => void } export interface PluginStatus { id: string name: string version: string author?: string kind: PluginKind installed: boolean enabled: boolean protected: boolean description: string dependencies?: string[] conflicts?: string[] } export type PluginChange = { id: string; action: 'install' | 'remove' | 'enable' | 'disable' }