diff --git a/build.gradle b/build.gradle index db24ef556..1b431fcfa 100644 --- a/build.gradle +++ b/build.gradle @@ -23,6 +23,10 @@ allprojects { name = 'mohist' url = 'https://maven.mohistmc.com/' } + maven { + name = 'mohist lib' + url = 'https://maven.mohistmc.com/libraries' + } maven { name = 'izzel' url = 'https://maven.izzel.io/releases' @@ -206,6 +210,7 @@ dependencies { include(project("banner-server")) include(project("banner-plugin")) include(project("banner-bootstrap")) + include("net.minecraft:server:${project.minecraft_version}") } tasks.withType(JavaCompile).configureEach { diff --git a/src/main/java/com/mohistmc/banner/BannerMain.java b/src/main/java/com/mohistmc/banner/BannerMain.java index 178186f5c..243ea2848 100644 --- a/src/main/java/com/mohistmc/banner/BannerMain.java +++ b/src/main/java/com/mohistmc/banner/BannerMain.java @@ -39,6 +39,24 @@ public static void main(String[] args) throws Throwable { } } + private static Path extractMC() throws Exception { + var path = BannerMain.class.getModule().getResourceAsStream("/META-INF/jars/server-1.20.1.jar"); + var dir = Paths.get("libraries", "net/minecraft/server/1.20.1"); + if (!Files.exists(dir)) { + Files.createDirectories(dir); + } + var mc = dir.resolve("server-1.20.1.jar"); + if (!Files.exists(mc)) { + try (var files = Files.list(dir)) { + for (Path old : files.toList()) { + Files.delete(old); + } + Files.copy(path, mc); + } + } + return mc; + } + @SuppressWarnings("unchecked") private static Map.Entry> fabricInstall() throws Throwable { var path = Paths.get(".banner", "gson.jar"); @@ -46,6 +64,11 @@ private static Map.Entry> fabricInstall() throws Throwable { Files.createDirectories(path.getParent()); Files.copy(Objects.requireNonNull(BannerMain.class.getResourceAsStream("/gson.jar")), path); } + try { + extractMC(); + } catch (Exception e) { + System.out.println("Failed to extract MC Jar"); + } try (var loader = new URLClassLoader(new URL[]{path.toUri().toURL(), BannerMain.class.getProtectionDomain().getCodeSource().getLocation()}, ClassLoader.getPlatformClassLoader())) { var cl = loader.loadClass("com.mohistmc.banner.install.FabricInstaller"); var handle = MethodHandles.lookup().findStatic(cl, "applicationInstall", MethodType.methodType(Map.Entry.class));