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 ) { handler.call( result, evt ); } } ); /* 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. */ regd = new bkRegisteredListener( __plugin, eventExecutor, priority, __plugin, true ); handlerList.register( regd ); result.unregister = function(){ handlerList.unregister( regd ); }; return result; };