Complete ClientPluginContext interface reference.

Client Plugin API Reference

ClientPluginContext

interface ClientPluginContext {
  pluginName: string;

// Server Communication send(channel: string, data: any): void; on(channel: string, handler: (data: any) => void): () => void; onServerMessage(type: string, handler: (msg: any) => void): () => void;

// Game State getState(): ClientPluginGameState; onStateChange(handler: () => void): () => void;

// HUD Widgets createWidget(config: WidgetConfig): string; updateWidget(id: string, updates: Partial<WidgetConfig>): void; removeWidget(id: string): void;

// Chat addChatCommand(name: string, handler: (args: string[]) => void): () => void; addLocalChatMessage(text: string, channel?: string): void;

// Timers setInterval(cb: () => void, ms: number): () => void; setTimeout(cb: () => void, ms: number): () => void;

// Logging log: { info, warn, error, debug }; }

ClientPluginGameState

interface ClientPluginGameState {
  selfId: string | null;
  selfName: string;
  selfPosition: { x: number; y: number };
  currentZoneId: string | null;
  currentZoneName: string | null;

selfHp: number; selfMaxHp: number; selfMp: number; selfMaxMp: number;

selfSilver: number; accountGold: number;

connected: boolean; isDead: boolean; isMounted: boolean; playerLevel: number;

inventory: ItemInstance[]; equipment: Map<string, ItemInstance>; skills: Map<string, CharacterSkill>; activeEffects: StatusEffect[]; activeQuests: Quest[];

party: Party | null; guild: Guild | null; chatMessages: ChatMessage[];

entities: Map<string, GameEntity>; survival: SurvivalVitals; environment: EnvironmentState; }

WidgetConfig

interface WidgetConfig {
  html: string;
  css?: string;
  position?: { x: number; y: number };
  anchor?: "top-left" | "top-right" | "bottom-left" | "bottom-right" | "center";
  width?: number;
  height?: number;
  visible?: boolean;
  zIndex?: number;
  draggable?: boolean;
  onClick?: () => void;
}