50 lines
1.4 KiB
JavaScript
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
|
|
}; |