From 76570ddbe583b1fc5b203cb2302b8ebfd7b9303b Mon Sep 17 00:00:00 2001 From: Gravita <12893402+gravit0@users.noreply.github.com> Date: Sun, 4 May 2025 19:02:46 +0700 Subject: [PATCH] [FEATURE] Support directories in classpath in ServerWrapper --- .../gravit/launcher/server/ServerWrapper.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/ServerWrapper/src/main/java/pro/gravit/launcher/server/ServerWrapper.java b/ServerWrapper/src/main/java/pro/gravit/launcher/server/ServerWrapper.java index aaa393e0..d6fb2002 100644 --- a/ServerWrapper/src/main/java/pro/gravit/launcher/server/ServerWrapper.java +++ b/ServerWrapper/src/main/java/pro/gravit/launcher/server/ServerWrapper.java @@ -25,15 +25,18 @@ import pro.gravit.utils.launch.*; import java.io.File; +import java.io.IOException; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; import java.lang.reflect.Type; +import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; public class ServerWrapper extends JsonConfigurable { public static final Path configFile = Paths.get(System.getProperty("serverwrapper.configFile", "ServerWrapperConfig.json")); @@ -209,7 +212,19 @@ public void run(String... args) throws Throwable { LaunchOptions options = new LaunchOptions(); options.enableHacks = config.enableHacks; options.moduleConf = config.moduleConf; - classLoaderControl = launch.init(config.classpath.stream().map(Paths::get).collect(Collectors.toCollection(ArrayList::new)), config.nativesDir, options); + classLoaderControl = launch.init(config.classpath.stream() + .map(Paths::get) + .flatMap(p -> { + if(!Files.isDirectory(p)) { + return Stream.of(p); + } + try { + return Files.walk(p).filter(e -> e.getFileName().toString().endsWith(".jar")); + } catch (IOException e) { + throw new RuntimeException(e); + } + }) + .collect(Collectors.toCollection(ArrayList::new)), config.nativesDir, options); if(ServerAgent.isAgentStarted()) { ClientService.instrumentation = ServerAgent.inst; }