diff --git a/src/main/java/net/walterhiggins/scriptcraft/ScriptCraftPlugin.java b/src/main/java/net/walterhiggins/scriptcraft/ScriptCraftPlugin.java index 385602c..16ee538 100644 --- a/src/main/java/net/walterhiggins/scriptcraft/ScriptCraftPlugin.java +++ b/src/main/java/net/walterhiggins/scriptcraft/ScriptCraftPlugin.java @@ -15,8 +15,9 @@ import java.util.ArrayList; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.command.*; import org.bukkit.Bukkit; +import org.bukkit.event.Listener; -public class ScriptCraftPlugin extends JavaPlugin +public class ScriptCraftPlugin extends JavaPlugin implements Listener { // right now all ops share the same JS context/scope // need to look at possibly having context/scope per operator diff --git a/src/main/javascript/events/events.js b/src/main/javascript/events/events.js index 242a2c6..eadbb82 100644 --- a/src/main/javascript/events/events.js +++ b/src/main/javascript/events/events.js @@ -94,10 +94,6 @@ var events = events || { } var _event = org.bukkit.event; var _plugin = org.bukkit.plugin; - // - // can't have objects that implement multiple interface in javax.scripts.* - // - var theListener = new _event.Listener(){}; var _on = function(eventType, handler, priority) { @@ -121,7 +117,19 @@ var events = events || { } }; listener.reg = new _plugin.RegisteredListener( - theListener,eventExecutor,priority,__plugin,true + /* + 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. + */ + __plugin + ,eventExecutor + ,priority + ,__plugin + ,true ) handlerList.register(listener.reg); return listener.reg; diff --git a/src/main/javascript/signs/menu.js b/src/main/javascript/signs/menu.js index 605e7de..d45adca 100644 --- a/src/main/javascript/signs/menu.js +++ b/src/main/javascript/signs/menu.js @@ -206,6 +206,7 @@ var signs = signs || plugin("signs", { look up our list of menu signs. If there's a matching location and there's a sign, then update it. */ + if (! event.clickedBlock.state instanceof org.bukkit.block.Sign) return; var evtLocStr = utils.locationToString(event.clickedBlock.location); @@ -213,7 +214,6 @@ var signs = signs || plugin("signs", { if (signUpdater) signUpdater(event.player, event.clickedBlock.state); }); - }); }());