v2.0.2 - Improve reloading and cleaning up of BungeeCord plugins.

- Cleanup PluginClassLoader properly
- Cancel plugin tasks properly
- Fixed automatic updater on bungee
This commit is contained in:
Frank van der Heijden 2020-07-05 21:59:26 +02:00
parent f728c3e6bb
commit 584ce8be4d
No known key found for this signature in database
GPG key ID: 26DA56488D314D11
5 changed files with 53 additions and 16 deletions

View file

@ -123,6 +123,7 @@ public class BungeePluginManager extends AbstractPluginManager<Plugin> {
public CloseableResult reloadPlugin(Plugin plugin) {
CloseableResult result = unloadPlugin(plugin);
if (result.getResult() != Result.SUCCESS) return result;
result.tryClose();
File file = getPluginFile(plugin.getDescription().getName());
if (file == null) return result.set(Result.FILE_DELETED);
@ -145,13 +146,16 @@ public class BungeePluginManager extends AbstractPluginManager<Plugin> {
plugin.onDisable();
proxy.getPluginManager().unregisterCommands(plugin);
proxy.getPluginManager().unregisterListeners(plugin);
proxy.getScheduler().cancel(plugin);
Closeable closeable;
try {
RPluginManager.clearPlugin(proxy.getPluginManager(), plugin);
closeable = (Closeable) RPluginClassLoader.getPluginClassLoader(plugin);
} catch (Exception ex) {
ex.printStackTrace();
return new CloseableResult(Result.ERROR);
}
return new CloseableResult(getCloseable(plugin));
return new CloseableResult(closeable);
}
public static File getPluginFileExact(String fileName) {
@ -216,17 +220,6 @@ public class BungeePluginManager extends AbstractPluginManager<Plugin> {
return entry;
}
/**
* Retrieves the closable classloader of the plugin, if possible.
* @param plugin The plugin.
* @return The closable instance.
*/
public static Closeable getCloseable(Plugin plugin) {
ClassLoader loader = plugin.getClass().getClassLoader();
if (loader instanceof Closeable) return (Closeable) loader;
return null;
}
@Override
public File getPluginsFolder() {
return plugin.getProxy().getPluginsFolder();