From 093b32ef1e0f4eec704fc8a748681b54b1e2b6e6 Mon Sep 17 00:00:00 2001 From: 3arthqu4ke <56741599+3arthqu4ke@users.noreply.github.com> Date: Wed, 17 Jul 2024 11:04:52 +0200 Subject: [PATCH 1/2] [1.10.1] Fixed bug when launching older versions, like forge 1.16.5 --- .../launcher/launch/VersionMerger.java | 25 ++++++++++++++++++- .../earth/headlessmc/launcher/util/Pair.java | 10 ++++++++ .../headlessmc/launcher/version/Library.java | 12 +++++++++ .../launcher/version/LibraryImpl.java | 9 +++++++ .../launcher/version/LibraryFactoryTest.java | 5 +++- .../src/test/resources/lib.json | 2 +- 6 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/util/Pair.java diff --git a/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/launch/VersionMerger.java b/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/launch/VersionMerger.java index 2d82ce50..46a7b40b 100644 --- a/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/launch/VersionMerger.java +++ b/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/launch/VersionMerger.java @@ -1,6 +1,7 @@ package me.earth.headlessmc.launcher.launch; import lombok.CustomLog; +import me.earth.headlessmc.launcher.util.Pair; import me.earth.headlessmc.launcher.version.Argument; import me.earth.headlessmc.launcher.version.Library; import me.earth.headlessmc.launcher.version.Version; @@ -9,6 +10,7 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Function; +import java.util.stream.Collectors; @CustomLog class VersionMerger extends DelegatingVersion { @@ -43,7 +45,7 @@ public String getAssetsUrl() { @Override public List getLibraries() { - return merge(Version::getLibraries); + return mergeLibraries(); } @Override @@ -68,6 +70,7 @@ private List merge(Function> func) { result.addAll(list); } }); + return result; } @@ -75,4 +78,24 @@ private T get(Function func) { return FamilyUtil.iterateParents(version, () -> null, func); } + private List mergeLibraries() { + List> result = new ArrayList<>(); + FamilyUtil.iterateTopDown(version, v -> { + for (Library library : v.getLibraries()) { + // The behaviour seems to be that child versions overwrite + // libraries of their parent version with the same package and name. + // overwriting.getValue().equals(v) is there because a version itself might + // contain libraries with similar packages and names, like this: + // io.netty:netty-transport-native-epoll:4.1.97.Final:linux-x86_64 + // io.netty:netty-transport-native-epoll:4.1.97.Final:linux-aarch_64 + result.removeIf(overwriting -> !overwriting.getValue().equals(v) + && overwriting.getKey().getPackage().equals(library.getPackage()) + && overwriting.getKey().getNameAfterPackage().equals(library.getNameAfterPackage())); + result.add(new Pair<>(library, v)); + } + }); + + return result.stream().map(Pair::getKey).collect(Collectors.toList()); + } + } diff --git a/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/util/Pair.java b/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/util/Pair.java new file mode 100644 index 00000000..dd0f6b17 --- /dev/null +++ b/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/util/Pair.java @@ -0,0 +1,10 @@ +package me.earth.headlessmc.launcher.util; + +import lombok.Data; + +@Data +public class Pair { + private final K key; + private final V value; + +} diff --git a/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/version/Library.java b/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/version/Library.java index f4d0f710..42d89bf9 100644 --- a/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/version/Library.java +++ b/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/version/Library.java @@ -14,4 +14,16 @@ public interface Library extends HasName { boolean isNativeLibrary(); + default String getPackage() { + return getName().split(":")[0]; + } + + default String getNameAfterPackage() { + return getName().split(":")[1]; + } + + default String getVersionNumber() { + return getName().split(":")[2]; + } + } diff --git a/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/version/LibraryImpl.java b/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/version/LibraryImpl.java index 41114d3c..26510faa 100644 --- a/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/version/LibraryImpl.java +++ b/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/version/LibraryImpl.java @@ -25,6 +25,15 @@ class LibraryImpl implements Library { @Override public String getPath(OS os) { + String result = getPathWithDefaultPathSeparator(os); + if (File.separatorChar != '/') { + result = result.replace("/", File.separator); + } + + return result; + } + + private String getPathWithDefaultPathSeparator(OS os) { if (path != null) { return path.replace("${arch}", os.isArch() ? "64" : "32"); } diff --git a/headlessmc-launcher/src/test/java/me/earth/headlessmc/launcher/version/LibraryFactoryTest.java b/headlessmc-launcher/src/test/java/me/earth/headlessmc/launcher/version/LibraryFactoryTest.java index 105174e0..938166d6 100644 --- a/headlessmc-launcher/src/test/java/me/earth/headlessmc/launcher/version/LibraryFactoryTest.java +++ b/headlessmc-launcher/src/test/java/me/earth/headlessmc/launcher/version/LibraryFactoryTest.java @@ -18,7 +18,10 @@ public void test() { OS os = new OS("Windows", OS.Type.WINDOWS, "10", false); Features feat = Features.EMPTY; assertEquals(Rule.Action.ALLOW, libs.get(0).getRule().apply(os, feat)); - assertEquals("test:test:test", libs.get(0).getName()); + assertEquals("testpackage:test:testversion", libs.get(0).getName()); + assertEquals("testpackage", libs.get(0).getPackage()); + assertEquals("test", libs.get(0).getNameAfterPackage()); + assertEquals("testversion", libs.get(0).getVersionNumber()); assertEquals("_download_url", libs.get(0).getUrl("")); assertFalse(libs.get(0).isNativeLibrary()); } diff --git a/headlessmc-launcher/src/test/resources/lib.json b/headlessmc-launcher/src/test/resources/lib.json index 92c072af..65e7b6ac 100644 --- a/headlessmc-launcher/src/test/resources/lib.json +++ b/headlessmc-launcher/src/test/resources/lib.json @@ -7,7 +7,7 @@ "url": "_download_url" } }, - "name": "test:test:test", + "name": "testpackage:test:testversion", "rules": [ { "action": "allow" From 4c956b8ad180ae28b3ec1c616877cd548818d69e Mon Sep 17 00:00:00 2001 From: 3arthqu4ke <56741599+3arthqu4ke@users.noreply.github.com> Date: Wed, 17 Jul 2024 11:05:39 +0200 Subject: [PATCH 2/2] [1.10.1] Bump version --- gradle.properties | 2 +- .../src/main/java/me/earth/headlessmc/launcher/Launcher.java | 2 +- headlessmc-scripts/hmc | 2 +- headlessmc-scripts/hmc.bat | 2 +- headlessmc-scripts/hmw | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index 700a3386..23e36137 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1 @@ -project_version=1.10.0 +project_version=1.10.1 diff --git a/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/Launcher.java b/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/Launcher.java index 50097ebf..42ab6d15 100644 --- a/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/Launcher.java +++ b/headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/Launcher.java @@ -15,7 +15,7 @@ @Getter @RequiredArgsConstructor public class Launcher implements HeadlessMc { - public static final String VERSION = "1.10.0"; + public static final String VERSION = "1.10.1"; @Delegate private final HeadlessMc headlessMc; diff --git a/headlessmc-scripts/hmc b/headlessmc-scripts/hmc index 61e8da34..25091a20 100644 --- a/headlessmc-scripts/hmc +++ b/headlessmc-scripts/hmc @@ -1,2 +1,2 @@ #!/usr/bin/env sh -java -jar headlessmc-launcher-1.10.0.jar --command $@ +java -jar headlessmc-launcher-1.10.1.jar --command $@ diff --git a/headlessmc-scripts/hmc.bat b/headlessmc-scripts/hmc.bat index 49eed088..e76b1f65 100644 --- a/headlessmc-scripts/hmc.bat +++ b/headlessmc-scripts/hmc.bat @@ -1,2 +1,2 @@ @echo off -"%JAVA_HOME%\bin\java" -jar headlessmc-launcher-1.10.0.jar --command %* +"%JAVA_HOME%\bin\java" -jar headlessmc-launcher-1.10.1.jar --command %* diff --git a/headlessmc-scripts/hmw b/headlessmc-scripts/hmw index b730b987..23c0eaf5 100644 --- a/headlessmc-scripts/hmw +++ b/headlessmc-scripts/hmw @@ -1,3 +1,3 @@ #!/bin/bash # when running in docker on windows bash seems to be at /bin/bash TODO: can we make this one script? -java -jar headlessmc-launcher-1.10.0.jar --command $@ +java -jar headlessmc-launcher-1.10.1.jar --command $@