Enables the pf4j [development mode](https://pf4j.org/doc/development-mode.html)
to support loading external plugins from sources, which enables java's
hotswap functionality.
To use this feature set the `plugin.development.path` property or
`PLUGIN_DEVELOPMENT_PATH` environment variable to the directories
containing your plugins, e.g. `../plugins;../my-custom-plugins`
Once set the `ExternalPluginManager` will ignore the configured
repositories and externalmanager directory, and instead load all
the built plugins from the specified directories.
Utilizing this feature does require some additional configuration
of the build of the plugins `build.gradle.kts`. Within the `subprojects`
section add:
```
tasks.register<Copy>("copyDeps") {
into("./build/deps/")
from(configurations["runtimeClasspath"])
}
```
See https://github.com/open-osrs/plugins/pull/260 for the `openosrs/plugins` change
This enables the following workflow:
0. Optional tip: Set the `external.system.substitute.library.dependencies` registry value to `true` to force classpath resolution within the project
1. Open the `runelite-client` project in IntelliJ
2. Add the `plugins` repository as a module (Gradle -> Plus symbol ->
`plugins/build.gradle.kts`)
3. Gradle build the client with: `build publishToMavenLocal :runelite-client:publishToMavenLocal :runelite-api:publishToMavenLocal :http-api:publishToMavenLocal`
4. Gradle build the plugins with: `build copyDeps`
5. Add the `PLUGIN_DEVELOPMENT_PATH` environment variable to the run
configuration
Once the above is done the edit -> reload -> edit cycle can begin:
1. Start the client in debug mode using the run goal
2. Edit the external plugin
3. Perform Build > Build Module
4. Observe hotswapping in action!
5. If hotswapping failed, or your change requires a plugin restart,
click the hotswap button in the plugin list to instantly restart it