From 3550d70e92fa501a430e1cbf1a74fe9bdfc21bb3 Mon Sep 17 00:00:00 2001 From: ThatGamerBlue Date: Sat, 13 Feb 2021 21:33:06 +0000 Subject: [PATCH] if something is broken its probably this commit --- .../api/events/MenuOptionClicked.java | 11 ++++++ .../net/runelite/client/plugins/Plugin.java | 19 ++-------- .../client/plugins/PluginManager.java | 35 +++++++++++++++++-- .../main/java/net/runelite/rs/api/RSTile.java | 4 +++ 4 files changed, 50 insertions(+), 19 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/events/MenuOptionClicked.java b/runelite-api/src/main/java/net/runelite/api/events/MenuOptionClicked.java index 2cd15c48f9..4ff7b8138e 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/MenuOptionClicked.java +++ b/runelite-api/src/main/java/net/runelite/api/events/MenuOptionClicked.java @@ -26,6 +26,7 @@ package net.runelite.api.events; import lombok.Data; import net.runelite.api.MenuAction; +import net.runelite.api.MenuEntry; /** * An event where a menu option has been clicked. @@ -87,4 +88,14 @@ public class MenuOptionClicked { this.consumed = true; } + + public void setMenuEntry(MenuEntry entry) + { + this.setMenuOption(entry.getOption()); + this.setMenuTarget(entry.getTarget()); + this.setId(entry.getId()); + this.setMenuAction(MenuAction.of(entry.getOpcode())); + this.setActionParam(entry.getActionParam()); + this.setWidgetId(entry.getActionParam1()); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java index 415b9d47b1..80aafcc860 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java @@ -27,11 +27,13 @@ package net.runelite.client.plugins; import com.google.inject.Binder; import com.google.inject.Injector; import com.google.inject.Module; +import lombok.Getter; import org.pf4j.ExtensionPoint; import net.runelite.client.RuneLite; public abstract class Plugin implements Module, ExtensionPoint { + @Getter protected Injector injector; @Override @@ -51,23 +53,6 @@ public abstract class Plugin implements Module, ExtensionPoint { } - // This should never be null when we are using it - public final Injector getInjector() - { - if (injector == null) - { - Module pluginModule = (Binder binder) -> - { - binder.bind((Class) this.getClass()).toInstance(this); - binder.install(this); - }; - Injector pluginInjector = RuneLite.getInjector().createChildInjector(pluginModule); - pluginInjector.injectMembers(this); - injector = pluginInjector; - } - return injector; - } - public String getName() { return getClass().getAnnotation(PluginDescriptor.class).name(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java index 3ab83b3fd4..500bd48000 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java @@ -164,7 +164,20 @@ public class PluginManager try { Injector injector = plugin.getInjector(); - + if (injector == null) + { + // Create injector for the module + Module pluginModule = (Binder binder) -> + { + // Since the plugin itself is a module, it won't bind itself, so we'll bind it here + binder.bind((Class) plugin.getClass()).toInstance(plugin); + binder.install(plugin); + }; + Injector pluginInjector = RuneLite.getInjector().createChildInjector(pluginModule); + pluginInjector.injectMembers(plugin); + plugin.injector = pluginInjector; + injector = pluginInjector; + } for (Key key : injector.getBindings().keySet()) { Class type = key.getTypeLiteral().getRawType(); @@ -194,7 +207,25 @@ public class PluginManager plugins = getPlugins(); } plugins.forEach(pl -> - injectors.add(pl.getInjector())); + { + //TODO: Not sure why this is necessary but it is. The Injector isn't null when its handed off from our ExternalPluginManager. + // Hopefully we can figure out the root cause of the underlying issue. + if (pl.injector == null) + { + // Create injector for the module + Module pluginModule = (Binder binder) -> + { + // Since the plugin itself is a module, it won't bind itself, so we'll bind it here + binder.bind((Class) pl.getClass()).toInstance(pl); + binder.install(pl); + }; + Injector pluginInjector = RuneLite.getInjector().createChildInjector(pluginModule); + pluginInjector.injectMembers(pl); + pl.injector = pluginInjector; + } + + injectors.add(pl.getInjector()); + }); List list = new ArrayList<>(); for (Injector injector : injectors) diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSTile.java b/runescape-api/src/main/java/net/runelite/rs/api/RSTile.java index 7dc5bee2f3..19182c5fb2 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSTile.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSTile.java @@ -28,6 +28,10 @@ public interface RSTile extends Tile @Override GroundObject getGroundObject(); + @Import("floorDecoration") + @Override + void setGroundObject(GroundObject object); + @Import("boundaryObject") @Override WallObject getWallObject();