diff --git a/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java b/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java index 686ebc85fa..84e0371ba3 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java +++ b/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java @@ -67,7 +67,9 @@ public enum AgilityShortcut // Fossil Island Wyvern Cave STAIRS_31485, // Trollweiss Mountain Cave - ROCKY_HANDHOLDS, ROCKY_HANDHOLDS_19847), + ROCKY_HANDHOLDS, ROCKY_HANDHOLDS_19847, + // Witchaven Dungeon + SHORTCUT), BRIMHAVEN_DUNGEON_MEDIUM_PIPE_RETURN(1, "Pipe Squeeze", null, new WorldPoint(2698, 9491, 0), PIPE_21727), BRIMHAVEN_DUNGEON_PIPE_RETURN(1, "Pipe Squeeze", null, new WorldPoint(2655, 9573, 0), PIPE_21728), BRIMHAVEN_DUNGEON_STEPPING_STONES_RETURN(1, "Pipe Squeeze", null, STEPPING_STONE_21739), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/ExternalPluginManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/ExternalPluginManager.java index 27c8dd2629..9df643cea9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/ExternalPluginManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/ExternalPluginManager.java @@ -560,27 +560,45 @@ public class ExternalPluginManager try { - Module pluginModule = (Binder binder) -> + Injector parent = RuneLite.getInjector(); + + if (deps.size() > 1) { - binder.bind(clazz).toInstance(plugin); - binder.install(plugin); + List modules = new ArrayList<>(deps.size()); for (Plugin p : deps) { - Module p2 = (Binder binder2) -> + // Create a module for each dependency + Module module = (Binder binder) -> { - binder2.bind((Class) p.getClass()).toInstance(p); - binder2.install(p); + binder.bind((Class) p.getClass()).toInstance(p); + binder.install(p); }; - binder.install(p2); + modules.add(module); } + + // Create a parent injector containing all of the dependencies + parent = parent.createChildInjector(modules); + } + else if (!deps.isEmpty()) + { + // With only one dependency we can simply use its injector + parent = deps.get(0).injector; + } + + // 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(clazz).toInstance(plugin); + binder.install(plugin); }; - Injector pluginInjector = RuneLite.getInjector().createChildInjector(pluginModule); + Injector pluginInjector = parent.createChildInjector(pluginModule); pluginInjector.injectMembers(plugin); plugin.injector = pluginInjector; if (initConfig) { - for (Key key : pluginInjector.getAllBindings().keySet()) + for (Key key : pluginInjector.getBindings().keySet()) { Class type = key.getTypeLiteral().getRawType(); if (Config.class.isAssignableFrom(type)) 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 5788b916f3..c0b4a3825f 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 @@ -186,7 +186,7 @@ public class PluginManager { final Injector injector = plugin.getInjector(); - for (Key key : injector.getAllBindings().keySet()) + for (Key key : injector.getBindings().keySet()) { Class type = key.getTypeLiteral().getRawType(); if (Config.class.isAssignableFrom(type)) @@ -232,7 +232,7 @@ public class PluginManager List list = new ArrayList<>(); for (Injector injector : injectors) { - for (Key key : injector.getAllBindings().keySet()) + for (Key key : injector.getBindings().keySet()) { Class type = key.getTypeLiteral().getRawType(); if (Config.class.isAssignableFrom(type)) @@ -589,21 +589,39 @@ public class PluginManager try { - Module pluginModule = (Binder binder) -> + Injector parent = RuneLite.getInjector(); + + if (deps.size() > 1) { - binder.bind(clazz).toInstance(plugin); - binder.install(plugin); + List modules = new ArrayList<>(deps.size()); for (Plugin p : deps) { - Module p2 = (Binder binder2) -> + // Create a module for each dependency + Module module = (Binder binder) -> { - binder2.bind((Class) p.getClass()).toInstance(p); - binder2.install(p); + binder.bind((Class) p.getClass()).toInstance(p); + binder.install(p); }; - binder.install(p2); + modules.add(module); } + + // Create a parent injector containing all of the dependencies + parent = parent.createChildInjector(modules); + } + else if (!deps.isEmpty()) + { + // With only one dependency we can simply use its injector + parent = deps.get(0).injector; + } + + // 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(clazz).toInstance(plugin); + binder.install(plugin); }; - Injector pluginInjector = RuneLite.getInjector().createChildInjector(pluginModule); + Injector pluginInjector = parent.createChildInjector(pluginModule); pluginInjector.injectMembers(plugin); plugin.injector = pluginInjector; }