diff --git a/src/main/resources/api/event.js b/src/main/resources/api/event.js index c4df796..782042d 100644 --- a/src/main/resources/api/event.js +++ b/src/main/resources/api/event.js @@ -83,7 +83,7 @@ function EventHandlerDefault() { throw new Error("当前服务器不支持事件系统!"); } - this.register = function register(eventCls, listener, priority, ignoreCancel) { + this.register = function register(eventCls, exec, priority, ignoreCancel) { throw new Error("当前服务器不支持事件系统!"); } @@ -111,17 +111,25 @@ function EventHandlerDefault() { priority = priority || 'NORMAL'; ignoreCancel = ignoreCancel || false; // noinspection JSUnusedGlobalSymbols - var listener = this.register(eventCls, priority, ignoreCancel); + var listener = this.register(eventCls, function execute() { + try { + exec(arguments[arguments.length -1 ]); + } catch (ex) { + console.console('§6插件 §b%s §6处理 §d%s §6事件时发生异常 §4%s'.format(name, this.class2Name(eventCls), ex)); + console.ex(ex); + } + }.bind(this), priority, ignoreCancel); var listenerMap = this.listenerMap; // 添加到缓存 用于关闭插件的时候关闭事件 if (!listenerMap[name]) listenerMap[name] = []; + var offExec = function () { + this.unregister(eventCls, listener); + console.debug('插件 %s 注销事件 %s'.format(name, this.class2Name(eventCls))); + }.bind(this); var off = { event: eventCls, listener: listener, - off: function () { - this.unregister(eventCls, listener); - console.debug('插件 %s 注销事件 %s'.format(name, this.class2Name(eventCls))); - } + off: offExec }; listenerMap[name].push(off); // noinspection JSUnresolvedVariable diff --git a/src/main/resources/api/plugin.js b/src/main/resources/api/plugin.js index c3d4d9b..aea6bed 100644 --- a/src/main/resources/api/plugin.js +++ b/src/main/resources/api/plugin.js @@ -248,7 +248,7 @@ function init(path) { }; function load() { - checkAndRun(arguments, 'init'); + checkAndRun(arguments, 'load'); }; function enable() { diff --git a/src/main/resources/internal/bukkit/event.js b/src/main/resources/internal/bukkit/event.js index f0d03ff..481b21e 100644 --- a/src/main/resources/internal/bukkit/event.js +++ b/src/main/resources/internal/bukkit/event.js @@ -24,21 +24,14 @@ function isVaildEvent(clz) { !Modifier.isAbstract(clz.getModifiers()); } -function register(eventCls, priority, ignoreCancel) { +function register(eventCls, exec, priority, ignoreCancel) { var listener = new Listener({}); MServer.getPluginManager().registerEvent( eventCls, listener, EventPriority[priority], new EventExecutor({ - execute: function execute(listener, event) { - try { - exec(event); - } catch (ex) { - console.console('§6插件 §b%s §6处理 §d%s §6事件时发生异常 §4%s'.format(name, event.class.simpleName, ex)); - console.ex(ex); - } - } + execute: exec }), this.plugin, ignoreCancel); diff --git a/src/main/resources/internal/sponge/event.js b/src/main/resources/internal/sponge/event.js index 8552c24..d8e9e71 100644 --- a/src/main/resources/internal/sponge/event.js +++ b/src/main/resources/internal/sponge/event.js @@ -35,16 +35,9 @@ function class2Name(clazz) { return clazz.name.substring(clazz.name.lastIndexOf(".") + 1).replace(/\$/g, '.').toLowerCase(); } -function register(eventCls, priority, ignoreCancel) { +function register(eventCls, exec, priority, ignoreCancel) { var listener = new EventListener({ - handle: function handle(event) { - try { - exec(event); - } catch (ex) { - console.console('§6插件 §b%s §6处理 §d%s §6事件时发生异常 §4%s'.format(name, event.class.simpleName, ex)); - console.ex(ex); - } - } + handle: exec }); MServer.getEventManager().registerListener(this.plugin, eventCls, Order[priorityMap[priority]], listener); return listener;