UNPKG

yoni-mcscripts-lib

Version:

为 Minecraft Script API 中的部分接口创建了 wrapper,并提供简单的事件管理器和任务管理器,另附有一些便于代码编写的一些小工具。

185 lines (184 loc) 6 kB
/** * 任务类型。 */ export declare enum ScheduleType { /** * 以真实时间为间隔重复运行的任务。 */ cycleTimerSchedule = "0", /** * 以真实时间为延迟运行的任务。 */ delayTimerSchedule = "1", /** * 以游戏刻为间隔重复运行的任务。 */ cycleTickSchedule = "2", /** * 以游戏刻为延迟运行的任务。 */ delayTickSchedule = "3" } /** * 创建新的任务所需要的参数。 */ export interface ScheduleOptions { /** * 任务类型。 */ "type": ScheduleType; /** * 任务是否为异步任务。(见 {@link Schedule#async}) * 默认值为 `false`。 */ "async"?: boolean; /** * 任务放入队列后多长时间才开始执行。默认值为 `1`。 */ delay: number; /** * 对于重复任务,任务再次运行需要间隔的时间。默认值为 `1`。 */ period?: number; } /** * 任务类。 */ export declare class Schedule { #private; /** * 以真实时间为间隔重复运行的任务。 */ static cycleTimerSchedule: ScheduleType; /** * 以真实时间为延迟运行的任务。 */ static delayTimerSchedule: ScheduleType; /** * 以游戏刻为间隔重复运行的任务。 */ static cycleTickSchedule: ScheduleType; /** * 以游戏刻为延迟运行的任务。 */ static delayTickSchedule: ScheduleType; /** * 任务的内部ID。 */ readonly id: number; /** * 任务类型。 */ readonly "type": ScheduleType; /** * 是否为异步任务。 * 对于异步任务,如果任务回调返回了 Promise 对象, * 在其状态从 pending 离开时才视为执行结束。 */ readonly "async": boolean; /** * 任务将以此值指定的间隔重复运行。 * 此值在非重复运行的任务当中没有意义。 */ readonly period: number; /** * 任务将在放入队列多长时间后运行。 */ readonly delay: number; /** * 任务是否已经添加到执行队列。 */ isQueued(): boolean; get startInQueueTime(): number; /** * 任务是否正在执行。 * @returns 在同步任务的回调当中会返回 `true`, * 异步任务中,任务回调返回的 Promise 处于 pending 状态时返回 `true`。 * 其余情况返回 `false`。 */ isRunning(): boolean; /** * 最后一次执行此任务时是否正常退出。 * @returns 此任务曾被执行,且最后一次执行时任务回调正常退出的情况下返回 `true`, * 其余情况返回 `false`。 */ get isSuccessInLastExecute(): boolean; /** * 此任务最后一次执行成功的时间。 * @returns 此任务曾被执行,且最后一次执行时任务回调正常退出的情况下返回毫秒级别的 unix 时间戳, * 其余情况返回 `-1`。 */ get lastSuccessTime(): any; /** * 此任务最后一次执行失败的时间。 * @returns 此任务曾被执行,且最后一次执行时任务回调抛出了错误的情况下返回毫秒级别的 unix 时间戳, * 其余情况返回 `-1`。 */ get lastFailTime(): any; /** * 此任务最后一次执行结束的时间。 * @returns 如果此任务曾被执行,返回毫秒级别的 unix 时间戳, * 其余情况返回 `-1`。 */ get lastExecuteTime(): any; constructor(props: ScheduleOptions, callback: () => void); run(): void; runAsync(): Promise<void>; } /** * 你可以使用它创建任务 */ export declare class YoniScheduler { /** * @param schedule 要添加到队列的任务。 * @returns 操作是否成功。 */ static addSchedule(schedule: Schedule): boolean; /** * @param schedule 要从队列中移除的任务。 * @returns 操作是否成功。 */ static removeSchedule(schedule: Schedule | number): boolean; /** * 创建任务并使其运行指定的回调函数。 * @param callback 需要执行的函数。 * @param async 是否异步执行。 * @returns scheduleId */ static runTask(callback: () => void, async?: boolean): number; /** * 在 `delay` 毫秒之后调用一个函数。 * @param callback 需要执行的函数。 * @param delay 延迟的毫秒数。 * @param async 是否异步执行。 * @returns scheduleId */ static runDelayTimerTask(callback: () => void, delay: number, async?: boolean): number; /** * 在 `delay` 个游戏刻之后调用一个函数。 * @param callback 需要执行的函数。 * @param delay 延迟的游戏刻。 * @param async 是否异步执行。 * @returns scheduleId */ static runDelayTickTask(callback: () => void, delay: number, async?: boolean): number; /** * 在 `delay` 毫秒之后,开始以 `period` 毫秒的间隔重复调用一个函数。 * @param callback 需要执行的函数。 * @param delay 延迟的毫秒树。 * @param period 每次调用间隔的毫秒数。 * @param async 是否异步执行。 * @returns scheduleId */ static runCycleTimerTask(callback: () => void, delay: number, period: number, async?: boolean): number; /** * 在 `delay` 个游戏刻之后,开始以 `period` 个游戏刻的间隔重复调用一个函数。 * 需要注意的是,间隔时间只在每游戏刻计算一次,小于游戏刻间隔的时间没有意义。 * @param callback 需要执行的函数。 * @param delay 延迟的游戏刻。 * @param period 每次调用间隔的游戏刻。 * @param async 是否异步执行。 * @returns scheduleId */ static runCycleTickTask(callback: () => void, delay: number, period: number, async?: boolean): number; }