2015-01-18 21:27:37 +01:00
|
|
|
/*global Java, exports, org, __plugin */
|
2014-09-30 00:42:41 +02:00
|
|
|
var bkEventPriority = org.bukkit.event.EventPriority,
|
|
|
|
bkEventExecutor = org.bukkit.plugin.EventExecutor,
|
|
|
|
bkRegisteredListener = org.bukkit.plugin.RegisteredListener,
|
|
|
|
bkEventPackage = 'org.bukkit.event.';
|
|
|
|
|
|
|
|
var nashorn = (typeof Java != 'undefined');
|
|
|
|
|
|
|
|
function getHandlerListForEventType( eventType ){
|
|
|
|
var result = null;
|
|
|
|
var clazz = null;
|
|
|
|
if (nashorn) {
|
|
|
|
|
|
|
|
//Nashorn doesn't like when getHandlerList is in a superclass of your event
|
|
|
|
//so to avoid this problem, call getHandlerList using java.lang.reflect
|
|
|
|
//methods
|
|
|
|
clazz = eventType['class'];
|
|
|
|
result = clazz.getMethod("getHandlerList").invoke(null);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
result = eventType.getHandlerList();
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
exports.on = function(
|
|
|
|
/* Java Class */
|
|
|
|
eventType,
|
|
|
|
/* function( registeredListener, event) */
|
|
|
|
handler,
|
|
|
|
/* (optional) String (HIGH, HIGHEST, LOW, LOWEST, NORMAL, MONITOR), */
|
|
|
|
priority ) {
|
|
|
|
var handlerList,
|
|
|
|
regd,
|
|
|
|
eventExecutor;
|
|
|
|
|
|
|
|
if ( typeof priority == 'undefined' ) {
|
|
|
|
priority = bkEventPriority.HIGHEST;
|
|
|
|
} else {
|
|
|
|
priority = bkEventPriority[priority.toUpperCase().trim()];
|
|
|
|
}
|
|
|
|
handlerList = getHandlerListForEventType (eventType);
|
|
|
|
|
|
|
|
var result = { };
|
|
|
|
eventExecutor = new bkEventExecutor( {
|
|
|
|
execute: function( l, evt ) {
|
2015-01-18 21:27:37 +01:00
|
|
|
function cancel(){
|
|
|
|
if (evt instanceof org.bukkit.event.Cancellable){
|
|
|
|
evt.setCancelled(true);
|
|
|
|
}
|
|
|
|
}
|
2015-02-14 12:50:20 +01:00
|
|
|
/*
|
|
|
|
let handlers use this.cancel() to cancel the current event
|
|
|
|
or this.unregister() to unregister from future events.
|
|
|
|
*/
|
|
|
|
var bound = {};
|
|
|
|
for (var i in result){
|
|
|
|
bound[i] = result[i];
|
|
|
|
}
|
|
|
|
bound.cancel = cancel;
|
|
|
|
handler.call( bound, evt, cancel );
|
2014-09-30 00:42:41 +02:00
|
|
|
}
|
|
|
|
} );
|
|
|
|
/*
|
|
|
|
wph 20130222 issue #64 bad interaction with Essentials plugin
|
|
|
|
if another plugin tries to unregister a Listener (not a Plugin or a RegisteredListener)
|
|
|
|
then BOOM! the other plugin will throw an error because Rhino can't coerce an
|
|
|
|
equals() method from an Interface.
|
|
|
|
The workaround is to make the ScriptCraftPlugin java class a Listener.
|
|
|
|
Should only unregister() registered plugins in ScriptCraft js code.
|
|
|
|
*/
|
2016-03-19 13:09:26 +01:00
|
|
|
regd = new bkRegisteredListener( __plugin, eventExecutor, priority, __plugin, false );
|
2014-09-30 00:42:41 +02:00
|
|
|
handlerList.register( regd );
|
|
|
|
result.unregister = function(){
|
|
|
|
handlerList.unregister( regd );
|
|
|
|
};
|
|
|
|
return result;
|
|
|
|
};
|