yoni-mcscripts-lib
Version:
为 Minecraft Script API 中的部分接口创建了 wrapper,并提供简单的事件管理器和任务管理器,另附有一些便于代码编写的一些小工具。
185 lines (184 loc) • 6 kB
TypeScript
/**
* 任务类型。
*/
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;
}