MiaoScript/src/main/resources/node_modules/internal/sponge/event.js

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
};