From 8d9b62cd454ea01b05f1d808535359e8392d6e5c Mon Sep 17 00:00:00 2001 From: Demetrius Kanios Date: Tue, 1 Sep 2026 21:55:38 -0700 Subject: [PATCH] Add command suggestion support. --- dist/index.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/dist/index.ts b/dist/index.ts index b1ee777..e3d67fe 100644 --- a/dist/index.ts +++ b/dist/index.ts @@ -3,7 +3,9 @@ import { Command, CommandSender, + CommandSuggestions, ConsumedArgs, + SuggestionRequest, } from "pumpkin:plugin/command@0.1.0"; import { Context } from "pumpkin:plugin/context@0.1.0"; import { Event, EventType, EventPriority } from "pumpkin:plugin/event@0.1.0"; @@ -23,6 +25,11 @@ export type CommandHandler = ( srv: Server, args: ConsumedArgs, ) => number; +export type CommandSuggestionHandler = ( + sender: CommandSender, + srv: Server, + request: SuggestionRequest, +) => CommandSuggestions; export type TaskHandler = (srv: Server) => void; export interface AiGoal { canStart: (server: Server, entity: Entity) => boolean; @@ -39,6 +46,7 @@ export type ChunkGenerator = ( let pluginInstance: Plugin | null = null; const eventHandlers = new Map(); const commandHandlers = new Map(); +const commandSuggestionHandlers = new Map(); const taskHandlers = new Map(); const generators = new Map(); const aiGoals = new Map(); @@ -95,6 +103,12 @@ export abstract class Plugin { ctx.registerCommand(cmd, permission); } + registerCommandSuggestionHandler(handler: CommandSuggestionHandler): number { + const handlerId = getNextHandlerId(); + commandSuggestionHandlers.set(handlerId, handler); + return handlerId; + } + scheduleDelayedTask( delayTicks: number | bigint, handler: TaskHandler, @@ -174,6 +188,19 @@ export function handleCommand( throw new Error(`No handler for command ID ${commandId}`); } +export function handleCommandSuggestion( + handlerId: number, + sender: CommandSender, + srv: Server, + request: SuggestionRequest, +): CommandSuggestions { + const handler = commandSuggestionHandlers.get(handlerId); + if (handler) { + return handler(sender, srv, request); + } + throw new Error(`No command suggestion handler registered for ID ${handler}`); +} + export function handleTask(handlerId: number, srv: Server): void { const handler = taskHandlers.get(handlerId); if (handler) {