From 575280d0449ed2a19f26caf9287bdc7c4a6dda15 Mon Sep 17 00:00:00 2001 From: BONNe Date: Wed, 3 Jan 2024 08:26:18 +0200 Subject: [PATCH] Fixes issue with file exporting in Windows system. JAR files does not store files inside it with filesystem separator. Only spot where it makes sense to transform "/" into file separator is in output file saving. --- .../world/bentobox/bentobox/api/addons/Addon.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/world/bentobox/bentobox/api/addons/Addon.java b/src/main/java/world/bentobox/bentobox/api/addons/Addon.java index 4c823244c..57190b7d9 100644 --- a/src/main/java/world/bentobox/bentobox/api/addons/Addon.java +++ b/src/main/java/world/bentobox/bentobox/api/addons/Addon.java @@ -12,6 +12,7 @@ import java.util.Optional; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.logging.Logger; +import java.util.regex.Matcher; import org.bukkit.Bukkit; import org.bukkit.Server; @@ -263,7 +264,7 @@ public abstract class Addon { throw new IllegalArgumentException("ResourcePath cannot be null or empty"); } - jarResource = jarResource.replace("\\", File.separator).replace("/", File.separator); + jarResource = jarResource.replace('\\', '/'); try (JarFile jar = new JarFile(file)) { JarEntry jarConfig = jar.getJarEntry(jarResource); if (jarConfig != null) { @@ -273,7 +274,9 @@ public abstract class Addon { "The embedded resource '" + jarResource + "' cannot be found in " + jar.getName()); } // There are two options, use the path of the resource or not - File outFile = new File(destinationFolder, jarResource); + File outFile = new File(destinationFolder, + jarResource.replaceAll("/", Matcher.quoteReplacement(File.separator))); + if (noPath) { outFile = new File(destinationFolder, outFile.getName()); } @@ -308,7 +311,7 @@ public abstract class Addon { throw new IllegalArgumentException("jarResource cannot be null or empty"); } YamlConfiguration result = new YamlConfiguration(); - jarResource = jarResource.replace("\\", File.separator).replace("/", File.separator); + jarResource = jarResource.replace('\\', '/'); try (JarFile jar = new JarFile(file)) { JarEntry jarConfig = jar.getJarEntry(jarResource); if (jarConfig != null) { @@ -330,7 +333,7 @@ public abstract class Addon { throw new IllegalArgumentException("ResourcePath cannot be null or empty"); } - jarResource = jarResource.replace("\\", File.separator).replace("/", File.separator); + jarResource = jarResource.replace('\\', '/'); try (JarFile jar = new JarFile(file)) { JarEntry jarConfig = jar.getJarEntry(jarResource); if (jarConfig != null) {