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 0e51ce879a..2f4c368b8c 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 @@ -503,6 +503,12 @@ public class ExternalPluginManager { //noinspection unchecked plugininst = instantiate(scannedPlugins, (Class) pluginClazz, init, initConfig); + + if (plugininst == null) + { + return; + } + scannedPlugins.add(plugininst); } catch (PluginInstantiationException e) @@ -654,6 +660,11 @@ public class ExternalPluginManager { throw new PluginInstantiationException(ex); } + catch (NoClassDefFoundError ex) + { + log.error("Plugin {} is outdated", clazz.getSimpleName()); + return null; + } log.debug("Loaded plugin {}", clazz.getSimpleName()); return plugin; @@ -712,39 +723,46 @@ public class ExternalPluginManager private List loadPlugin(String pluginId) { List scannedPlugins = new ArrayList<>(); - List extensions = externalPluginManager.getExtensions(Plugin.class, pluginId); - for (Plugin plugin : extensions) + try { - pluginClassLoaders.add(plugin.getClass().getClassLoader()); + List extensions = externalPluginManager.getExtensions(Plugin.class, pluginId); + for (Plugin plugin : extensions) + { + pluginClassLoaders.add(plugin.getClass().getClassLoader()); - pluginsMap.remove(plugin.getClass().getSimpleName()); - pluginsMap.put(plugin.getClass().getSimpleName(), pluginId); + pluginsMap.remove(plugin.getClass().getSimpleName()); + pluginsMap.put(plugin.getClass().getSimpleName(), pluginId); - pluginsInfoMap.remove(plugin.getClass().getSimpleName()); + pluginsInfoMap.remove(plugin.getClass().getSimpleName()); - AtomicReference support = new AtomicReference<>(""); + AtomicReference support = new AtomicReference<>(""); - updateManager.getRepositories().forEach(repository -> - repository.getPlugins().forEach((key, value) -> - { - if (key.equals(pluginId)) + updateManager.getRepositories().forEach(repository -> + repository.getPlugins().forEach((key, value) -> { - support.set(value.projectUrl); - } - })); + if (key.equals(pluginId)) + { + support.set(value.projectUrl); + } + })); - pluginsInfoMap.put( - plugin.getClass().getSimpleName(), - new HashMap<>() - {{ - put("version", externalPluginManager.getPlugin(pluginId).getDescriptor().getVersion()); - put("id", externalPluginManager.getPlugin(pluginId).getDescriptor().getPluginId()); - put("provider", externalPluginManager.getPlugin(pluginId).getDescriptor().getProvider()); - put("support", support.get()); - }} - ); + pluginsInfoMap.put( + plugin.getClass().getSimpleName(), + new HashMap<>() + {{ + put("version", externalPluginManager.getPlugin(pluginId).getDescriptor().getVersion()); + put("id", externalPluginManager.getPlugin(pluginId).getDescriptor().getPluginId()); + put("provider", externalPluginManager.getPlugin(pluginId).getDescriptor().getProvider()); + put("support", support.get()); + }} + ); - scannedPlugins.add(plugin); + scannedPlugins.add(plugin); + } + } + catch (NoClassDefFoundError ex) + { + log.error("plugin {} is outdated", pluginId); } return scannedPlugins;