If you had an external plugin with a PluginDependency on a core plugin
the core plugin would be included in the external `loadPlugins`
dependency graph, which would make it be instantiated twice. Since
external plugins can't depend on other external plugins, and core
plugins are guaranteed to be loaded first with no external dependencies,
we can just exclude dependency edges for nodes outside of the current
load list.
This commit adds a quest completion dialog parsing method which gives
proper quest screenshot filenames for all quests, including those with
unique/non-uniform completion texts such as "You have Made Friends with
My Arm" and "You have rebuilt The Giant Dwarf".
This is intended to make the tags feature more discoverable, as people
keep requesting "plugin categories". Putting plugins into a singular
category that will make sense for most users is impossible, as many
plugins will can logically be placed into multiple categories.
The Category Tag list is intended to be a short, curated, list of tags
that are helpful to a user trying to find plugins.
There are 2 animations for each pearl rod (except Oily). Usually it
seems that only one is used when actually fishing, which were the ones
present before this commit. However, it seems that Jagex is not
consistent about what animations are used, as Anglerfish fishing uses
the other animation of the normal pearl rod. Given that the other two
exist, and they're technically usable (and can be used as the starting
animation), it's only a matter of time before Jagex accidentally gets
them the wrong way round again, so this is a pre-emptive measure. It
also means that the UI won't show "Not Fishing" for a split second when
casting out.
This fixes plugins which have dependencies and no configuration from
erronously having their deps config picked up, and also fixes defaults
being applied multiple times to the same config on startup due to the
configs being in the bindings of multiple injectors
Instead of combining the modules of the plugin and all of it
dependencies, create a new child injector for the plugin from a child
injector comprised of the parent module(s)