From 4106d24f2af7a3f0b768a4c103291bd7bdef5896 Mon Sep 17 00:00:00 2001 From: rtm516 Date: Fri, 2 Aug 2024 16:07:04 +0100 Subject: [PATCH] Check the update folder exists before trying to use it --- .../extension/GeyserExtensionLoader.java | 38 ++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java index ecb756017..d3f40e6d2 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java @@ -165,27 +165,31 @@ public class GeyserExtensionLoader extends ExtensionLoader { Pattern[] extensionFilters = this.extensionFilters(); - List extensionUpdatePaths = Files.list(extensionsDirectory.resolve("update")).toList(); - extensionUpdatePaths.forEach(path -> { - if (Files.isDirectory(path)) { - return; - } - - for (Pattern filter : extensionFilters) { - if (!filter.matcher(path.getFileName().toString()).matches()) { + Path updateDirectory = extensionsDirectory.resolve("update"); + if (Files.isDirectory(updateDirectory)) { + List extensionUpdatePaths = Files.list(updateDirectory).toList(); + extensionUpdatePaths.forEach(path -> { + if (Files.isDirectory(path)) { return; } - } - try { - // Try load the description, so we know it's a valid extension - GeyserExtensionDescription description = this.extensionDescription(path); + for (Pattern filter : extensionFilters) { + if (!filter.matcher(path.getFileName().toString()).matches()) { + return; + } + } - Files.move(path, extensionsDirectory.resolve(path.getFileName()), StandardCopyOption.REPLACE_EXISTING); - } catch (Throwable e) { - GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.extensions.update.failed", path.getFileName()), e); - } - }); + try { + // Try load the description, so we know it's a valid extension + GeyserExtensionDescription description = this.extensionDescription(path); + + // Overwrite the extension with the new jar + Files.move(path, extensionsDirectory.resolve(path.getFileName()), StandardCopyOption.REPLACE_EXISTING); + } catch (Throwable e) { + GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.extensions.update.failed", path.getFileName()), e); + } + }); + } List extensionPaths = Files.list(extensionsDirectory).toList(); extensionPaths.forEach(path -> {