Files
MiaoScript/src/main/resources/internal/bukkit/event.js

50 lines
1.4 KiB
JavaScript

'use strict';
/**
* Sponge 事件相关类
*/
/*global Java, base, module, exports, require, __FILE__*/
var ref = require('reflect');
var Event = Java.type("org.bukkit.event.Event");
var Modifier = Java.type("java.lang.reflect.Modifier");
var Listener = Java.type("org.bukkit.event.Listener");
var EventPriority = Java.type("org.bukkit.event.EventPriority");
var EventExecutor = Java.type("org.bukkit.plugin.EventExecutor");
/**
* 判断是否为一个有效的事件类
* @param clz
* @returns {*|boolean}
*/
function isVaildEvent(clz) {
// noinspection JSUnresolvedVariable 继承于 org.bukkit.event.Event
return Event.class.isAssignableFrom(clz) &&
// 访问符为Public
Modifier.isPublic(clz.getModifiers()) &&
// 不是抽象类
!Modifier.isAbstract(clz.getModifiers());
}
function register(eventCls, exec, priority, ignoreCancel) {
var listener = new Listener({});
MServer.getPluginManager().registerEvent(
eventCls,
listener,
EventPriority[priority],
new EventExecutor({
execute: exec
}),
this.plugin,
ignoreCancel);
return listener;
}
function unregister(event, listener) {
ref.on(event).call('getHandlerList').get().unregister(listener);
}
exports = module.exports = {
baseEventDir: 'org/bukkit/event',
isVaildEvent: isVaildEvent,
register: register,
unregister: unregister
};