diff --git a/src/main/java/net/frankheijden/serverutils/managers/PluginManager.java b/src/main/java/net/frankheijden/serverutils/managers/PluginManager.java index 59a7575..460c8ac 100644 --- a/src/main/java/net/frankheijden/serverutils/managers/PluginManager.java +++ b/src/main/java/net/frankheijden/serverutils/managers/PluginManager.java @@ -175,19 +175,11 @@ public class PluginManager { CloseableResult result = unloadPlugin(plugin); if (result.getResult() != Result.SUCCESS) return result; - File pluginFile; - try { - pluginFile = RPlugin.getPluginFile(plugin); - } catch (InvocationTargetException | IllegalAccessException ex) { - ex.printStackTrace(); - return result.set(Result.ERROR); - } + File pluginFile = getPluginFile(plugin.getName()); + if (pluginFile == null) return result.set(Result.FILE_DELETED); LoadResult loadResult = loadPlugin(pluginFile); - if (!loadResult.isSuccess()) { - Result r = loadResult.getResult(); - return result.set((r == Result.NOT_EXISTS) ? Result.FILE_CHANGED : r); - } + if (!loadResult.isSuccess()) return result.set(loadResult.getResult()); return result.set(enablePlugin(loadResult.getPlugin())); } @@ -294,4 +286,23 @@ public class PluginManager { if (loader == null) return null; return loader.getPluginDescription(file); } + + /** + * Attempts to retrieve the plugin file by plugin name. + * @param pluginName The plugin name. + * @return The file, or null if invalid or not found. + */ + public static File getPluginFile(String pluginName) { + for (File file : ServerUtils.getInstance().getJars()) { + PluginDescriptionFile descriptionFile; + try { + descriptionFile = getPluginDescription(file); + } catch (InvalidDescriptionException ex) { + return null; + } + if (descriptionFile == null) return null; + if (descriptionFile.getName().equals(pluginName)) return file; + } + return null; + } } diff --git a/src/main/java/net/frankheijden/serverutils/managers/Result.java b/src/main/java/net/frankheijden/serverutils/managers/Result.java index c8a95a0..9903e11 100644 --- a/src/main/java/net/frankheijden/serverutils/managers/Result.java +++ b/src/main/java/net/frankheijden/serverutils/managers/Result.java @@ -9,7 +9,7 @@ public enum Result { ALREADY_LOADED, ALREADY_ENABLED, ALREADY_DISABLED, - FILE_CHANGED, + FILE_DELETED, INVALID_DESCRIPTION, INVALID_PLUGIN, UNKNOWN_DEPENDENCY, diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml index aa16d35..b2221b0 100644 --- a/src/main/resources/messages.yml +++ b/src/main/resources/messages.yml @@ -7,7 +7,7 @@ serverutils: already_loaded: "&cAn error occurred while %action%ing &4%what%&c, plugin is already loaded!" already_enabled: "&cAn error occurred while %action%ing &4%what%&c, plugin is already enabled!" already_disabled: "&cAn error occurred while %action%ing &4%what%&c, plugin is already disabled!" - file_changed: "&cAccessing the jar file while %action%ing &4%what%&c went wrong, please load the plugin manually!" + file_deleted: "&cAccessing the jar file while %action%ing &4%what%&c went wrong, plugin has been deleted!" invalid_description: "&cAn error occurred while %action%ing &4%what%&c, plugin doesn't have a valid description!" invalid_plugin: "&cAn error occurred while %action%ing &4%what%&c, plugin is invalid!" unknown_dependency: "&cAn error occurred while %action%ing &4%what%&c, plugin has a dependeny which is not loaded: &4%arg%"