57 lines
1.6 KiB
JavaScript
57 lines
1.6 KiB
JavaScript
'use strict';
|
|
/**
|
|
* Sponge 事件相关类
|
|
*/
|
|
/*global Java, base, module, exports, require, __FILE__*/
|
|
var Modifier = Java.type("java.lang.reflect.Modifier");
|
|
var Order = Java.type("org.spongepowered.api.event.Order");
|
|
var Event = Java.type("org.spongepowered.api.event.Event");
|
|
var EventListener = Java.type("org.spongepowered.api.event.EventListener");
|
|
|
|
var priorityMap = {
|
|
'LOWEST': 'PRE',
|
|
'LOW': 'FIRST',
|
|
'NORMAL': 'DEFAULT',
|
|
'HIGH': 'LATE',
|
|
'HIGHEST': 'LAST',
|
|
'MONITOR': 'POST'
|
|
};
|
|
|
|
/**
|
|
* 判断是否为一个有效的事件类
|
|
* @param clz
|
|
* @returns {*|boolean}
|
|
*/
|
|
function isValidEvent(clz) {
|
|
// noinspection JSUnresolvedVariable 继承于 org.spongepowered.api.event.Event
|
|
return Event.class.isAssignableFrom(clz) &&
|
|
// 访问符为Public
|
|
Modifier.isPublic(clz.getModifiers()) &&
|
|
// Sponge的事件都是接口
|
|
Modifier.isAbstract(clz.getModifiers());
|
|
}
|
|
|
|
function class2Name(clazz) {
|
|
return clazz.canonicalName.substring(clazz.name.lastIndexOf(".") + 1);
|
|
}
|
|
|
|
function register(eventCls, exec, priority, ignoreCancel) {
|
|
var listener = new EventListener({
|
|
handle: exec
|
|
});
|
|
MServer.getEventManager().registerListener(this.plugin, eventCls, Order[priorityMap[priority]], listener);
|
|
return listener;
|
|
}
|
|
|
|
function unregister(event, listener) {
|
|
MServer.getEventManager().unregisterListeners(listener);
|
|
}
|
|
|
|
// noinspection JSUnusedGlobalSymbols
|
|
exports = module.exports = {
|
|
baseEventDir: 'org/spongepowered/api/event',
|
|
isValidEvent: isValidEvent,
|
|
class2Name: class2Name,
|
|
register: register,
|
|
unregister: unregister
|
|
}; |