@@ -10,7 +10,12 @@ export namespace channel {
 | 
			
		||||
    @injectable()
 | 
			
		||||
    export abstract class Channel {
 | 
			
		||||
        private listenerMap = [];
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * 注册通道
 | 
			
		||||
         * @param plugin 插件
 | 
			
		||||
         * @param channel 通道
 | 
			
		||||
         * @param exec 执行器
 | 
			
		||||
         */
 | 
			
		||||
        listen(plugin: any, channel: string, exec: ChannelListener) {
 | 
			
		||||
            if (!plugin || !plugin.description || !plugin.description.name) throw new TypeError('Plugin can\'t be undefiend!');
 | 
			
		||||
            let name = plugin.description.name;
 | 
			
		||||
@@ -29,6 +34,10 @@ export namespace channel {
 | 
			
		||||
            console.debug(`[${name}] register channel ${channel} => ${exec.name || '[anonymous]'}`);
 | 
			
		||||
            return off;
 | 
			
		||||
        }
 | 
			
		||||
        /**
 | 
			
		||||
         * 关闭插件注册的通道
 | 
			
		||||
         * @param plugin 插件
 | 
			
		||||
         */
 | 
			
		||||
        disable(plugin: any) {
 | 
			
		||||
            var channelCache = this.listenerMap[plugin.description.name];
 | 
			
		||||
            if (channelCache) {
 | 
			
		||||
@@ -36,7 +45,6 @@ export namespace channel {
 | 
			
		||||
                delete this.listenerMap[plugin.description.name];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Send Channel Message
 | 
			
		||||
         * @param player recover target
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,12 @@ import { injectable } from "@ms/container";
 | 
			
		||||
export namespace command {
 | 
			
		||||
    @injectable()
 | 
			
		||||
    export abstract class Command {
 | 
			
		||||
        /**
 | 
			
		||||
         * 注册插件命令
 | 
			
		||||
         * @param plugin 插件
 | 
			
		||||
         * @param name 命令
 | 
			
		||||
         * @param exec 执行器
 | 
			
		||||
         */
 | 
			
		||||
        on(plugin: any, name: string, exec: { cmd: Function, tab?: Function }) {
 | 
			
		||||
            var cmd = this.create(plugin, name);
 | 
			
		||||
            console.debug(i18n.translate("ms.api.command.register", { plugin: plugin.description.name, name, cmd }))
 | 
			
		||||
@@ -16,18 +22,20 @@ export namespace command {
 | 
			
		||||
                this.onTabComplete(plugin, cmd, exec.tab);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        /**
 | 
			
		||||
         * 取消命令注册
 | 
			
		||||
         * @param plugin 插件
 | 
			
		||||
         * @param name 命令
 | 
			
		||||
         */
 | 
			
		||||
        off(plugin: any, name: string) {
 | 
			
		||||
            console.debug(i18n.translate("ms.api.command.unregister", { plugin: plugin.description.name, name }))
 | 
			
		||||
            this.remove(plugin, name);
 | 
			
		||||
        }
 | 
			
		||||
        /**
 | 
			
		||||
         * Create Server Command Object
 | 
			
		||||
         */
 | 
			
		||||
 | 
			
		||||
        protected abstract create(plugin: any, command: string);
 | 
			
		||||
        protected abstract remove(plugin: any, command: string);
 | 
			
		||||
        protected abstract onCommand(plugin: any, command: any, executor: Function);
 | 
			
		||||
        protected abstract onTabComplete(plugin: any, command: any, tabCompleter: Function);
 | 
			
		||||
 | 
			
		||||
        protected setExecutor(plugin: any, command: any, executor: Function) {
 | 
			
		||||
            return (sender: any, _: any, command: string, args: string[]) => {
 | 
			
		||||
                try {
 | 
			
		||||
@@ -40,7 +48,6 @@ export namespace command {
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected setTabCompleter(plugin: any, command: any, tabCompleter: Function) {
 | 
			
		||||
            return (sender: any, _: any, command: string, args: string[]) => {
 | 
			
		||||
                try {
 | 
			
		||||
@@ -55,10 +62,9 @@ export namespace command {
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected copyPartialMatches(complete: string[], token: string, array: string[] = []): string[] {
 | 
			
		||||
            if (!token) { return complete }
 | 
			
		||||
            complete.forEach(function(e) {
 | 
			
		||||
            complete.forEach(function (e) {
 | 
			
		||||
                if (typeof e === "string" && e.toLowerCase().startsWith(token.toLowerCase())) {
 | 
			
		||||
                    array.push(e)
 | 
			
		||||
                }
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,9 @@ import { injectable, unmanaged } from '@ms/container'
 | 
			
		||||
const Thread = Java.type('java.lang.Thread');
 | 
			
		||||
 | 
			
		||||
export namespace event {
 | 
			
		||||
    /**
 | 
			
		||||
     * 事件监听优先级
 | 
			
		||||
     */
 | 
			
		||||
    export enum EventPriority {
 | 
			
		||||
        LOWEST = "LOWEST",
 | 
			
		||||
        LOW = "LOW",
 | 
			
		||||
@@ -144,6 +147,10 @@ export namespace event {
 | 
			
		||||
            return off;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * 关闭插件监听任务
 | 
			
		||||
         * @param plugin 插件
 | 
			
		||||
         */
 | 
			
		||||
        disable(plugin: any) {
 | 
			
		||||
            var eventCache = this.listenerMap[plugin.description.name];
 | 
			
		||||
            if (eventCache) {
 | 
			
		||||
@@ -152,8 +159,24 @@ export namespace event {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * 判断
 | 
			
		||||
         * @param clazz 事件类
 | 
			
		||||
         */
 | 
			
		||||
        abstract isValidEvent(clazz: any): boolean;
 | 
			
		||||
        /**
 | 
			
		||||
         * 注册事件
 | 
			
		||||
         * @param eventCls 事件类
 | 
			
		||||
         * @param exec 执行器
 | 
			
		||||
         * @param priority 优先级
 | 
			
		||||
         * @param ignoreCancel 是否忽略已取消的事件
 | 
			
		||||
         */
 | 
			
		||||
        abstract register(eventCls: any, exec: Function, priority: any, ignoreCancel: boolean): any;
 | 
			
		||||
        /**
 | 
			
		||||
         * 取消监听事件
 | 
			
		||||
         * @param event 事件
 | 
			
		||||
         * @param listener 监听器
 | 
			
		||||
         */
 | 
			
		||||
        abstract unregister(event: any, listener: any): void;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,15 @@
 | 
			
		||||
export namespace task {
 | 
			
		||||
    export const TaskManager = Symbol('TaskManager')
 | 
			
		||||
    export interface TaskManager {
 | 
			
		||||
        /**
 | 
			
		||||
         * 创建任务
 | 
			
		||||
         * @param func 任务内容
 | 
			
		||||
         */
 | 
			
		||||
        create(func: Function): task.Task;
 | 
			
		||||
        /**
 | 
			
		||||
         * 在主线程执行代码
 | 
			
		||||
         * @param func 执行内容
 | 
			
		||||
         */
 | 
			
		||||
        callSyncMethod(func: Function): any;
 | 
			
		||||
    }
 | 
			
		||||
    /**
 | 
			
		||||
@@ -19,16 +27,28 @@ export namespace task {
 | 
			
		||||
            this.func = func;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * 设置任务异步执行
 | 
			
		||||
         * @param isAsync 是否异步
 | 
			
		||||
         */
 | 
			
		||||
        async(isAsync: boolean = true): task.Task {
 | 
			
		||||
            this.isAsync = isAsync;
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * 设置任务延时执行
 | 
			
		||||
         * @param tick 延时 Tick
 | 
			
		||||
         */
 | 
			
		||||
        later(tick: number): task.Task {
 | 
			
		||||
            this.laterTime = tick;
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * 设置任务循环执行
 | 
			
		||||
         * @param tick 循环时间 Tick
 | 
			
		||||
         */
 | 
			
		||||
        timer(tick: number): task.Task {
 | 
			
		||||
            this.interval = tick;
 | 
			
		||||
            return this;
 | 
			
		||||
@@ -43,6 +63,9 @@ export namespace task {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * 提交任务
 | 
			
		||||
         */
 | 
			
		||||
        abstract submit(): Cancelable;
 | 
			
		||||
    }
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user