Skip to content

Commit ff2ddb1

Browse files
authored
Merge pull request #157 from 3arthqu4ke/1.10.1
1.10.1
2 parents ed47152 + 4c956b8 commit ff2ddb1

File tree

11 files changed

+65
-8
lines changed

11 files changed

+65
-8
lines changed

gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
project_version=1.10.0
1+
project_version=1.10.1

headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/Launcher.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
@Getter
1616
@RequiredArgsConstructor
1717
public class Launcher implements HeadlessMc {
18-
public static final String VERSION = "1.10.0";
18+
public static final String VERSION = "1.10.1";
1919

2020
@Delegate
2121
private final HeadlessMc headlessMc;

headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/launch/VersionMerger.java

+24-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package me.earth.headlessmc.launcher.launch;
22

33
import lombok.CustomLog;
4+
import me.earth.headlessmc.launcher.util.Pair;
45
import me.earth.headlessmc.launcher.version.Argument;
56
import me.earth.headlessmc.launcher.version.Library;
67
import me.earth.headlessmc.launcher.version.Version;
@@ -9,6 +10,7 @@
910
import java.util.ArrayList;
1011
import java.util.List;
1112
import java.util.function.Function;
13+
import java.util.stream.Collectors;
1214

1315
@CustomLog
1416
class VersionMerger extends DelegatingVersion {
@@ -43,7 +45,7 @@ public String getAssetsUrl() {
4345

4446
@Override
4547
public List<Library> getLibraries() {
46-
return merge(Version::getLibraries);
48+
return mergeLibraries();
4749
}
4850

4951
@Override
@@ -68,11 +70,32 @@ private <T> List<T> merge(Function<Version, List<T>> func) {
6870
result.addAll(list);
6971
}
7072
});
73+
7174
return result;
7275
}
7376

7477
private <T> T get(Function<Version, T> func) {
7578
return FamilyUtil.iterateParents(version, () -> null, func);
7679
}
7780

81+
private List<Library> mergeLibraries() {
82+
List<Pair<Library, Version>> result = new ArrayList<>();
83+
FamilyUtil.iterateTopDown(version, v -> {
84+
for (Library library : v.getLibraries()) {
85+
// The behaviour seems to be that child versions overwrite
86+
// libraries of their parent version with the same package and name.
87+
// overwriting.getValue().equals(v) is there because a version itself might
88+
// contain libraries with similar packages and names, like this:
89+
// io.netty:netty-transport-native-epoll:4.1.97.Final:linux-x86_64
90+
// io.netty:netty-transport-native-epoll:4.1.97.Final:linux-aarch_64
91+
result.removeIf(overwriting -> !overwriting.getValue().equals(v)
92+
&& overwriting.getKey().getPackage().equals(library.getPackage())
93+
&& overwriting.getKey().getNameAfterPackage().equals(library.getNameAfterPackage()));
94+
result.add(new Pair<>(library, v));
95+
}
96+
});
97+
98+
return result.stream().map(Pair::getKey).collect(Collectors.toList());
99+
}
100+
78101
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package me.earth.headlessmc.launcher.util;
2+
3+
import lombok.Data;
4+
5+
@Data
6+
public class Pair<K, V> {
7+
private final K key;
8+
private final V value;
9+
10+
}

headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/version/Library.java

+12
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,16 @@ public interface Library extends HasName {
1414

1515
boolean isNativeLibrary();
1616

17+
default String getPackage() {
18+
return getName().split(":")[0];
19+
}
20+
21+
default String getNameAfterPackage() {
22+
return getName().split(":")[1];
23+
}
24+
25+
default String getVersionNumber() {
26+
return getName().split(":")[2];
27+
}
28+
1729
}

headlessmc-launcher/src/main/java/me/earth/headlessmc/launcher/version/LibraryImpl.java

+9
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,15 @@ class LibraryImpl implements Library {
2525

2626
@Override
2727
public String getPath(OS os) {
28+
String result = getPathWithDefaultPathSeparator(os);
29+
if (File.separatorChar != '/') {
30+
result = result.replace("/", File.separator);
31+
}
32+
33+
return result;
34+
}
35+
36+
private String getPathWithDefaultPathSeparator(OS os) {
2837
if (path != null) {
2938
return path.replace("${arch}", os.isArch() ? "64" : "32");
3039
}

headlessmc-launcher/src/test/java/me/earth/headlessmc/launcher/version/LibraryFactoryTest.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ public void test() {
1818
OS os = new OS("Windows", OS.Type.WINDOWS, "10", false);
1919
Features feat = Features.EMPTY;
2020
assertEquals(Rule.Action.ALLOW, libs.get(0).getRule().apply(os, feat));
21-
assertEquals("test:test:test", libs.get(0).getName());
21+
assertEquals("testpackage:test:testversion", libs.get(0).getName());
22+
assertEquals("testpackage", libs.get(0).getPackage());
23+
assertEquals("test", libs.get(0).getNameAfterPackage());
24+
assertEquals("testversion", libs.get(0).getVersionNumber());
2225
assertEquals("_download_url", libs.get(0).getUrl(""));
2326
assertFalse(libs.get(0).isNativeLibrary());
2427
}

headlessmc-launcher/src/test/resources/lib.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"url": "_download_url"
88
}
99
},
10-
"name": "test:test:test",
10+
"name": "testpackage:test:testversion",
1111
"rules": [
1212
{
1313
"action": "allow"

headlessmc-scripts/hmc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
#!/usr/bin/env sh
2-
java -jar headlessmc-launcher-1.10.0.jar --command $@
2+
java -jar headlessmc-launcher-1.10.1.jar --command $@

headlessmc-scripts/hmc.bat

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
@echo off
2-
"%JAVA_HOME%\bin\java" -jar headlessmc-launcher-1.10.0.jar --command %*
2+
"%JAVA_HOME%\bin\java" -jar headlessmc-launcher-1.10.1.jar --command %*

headlessmc-scripts/hmw

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
#!/bin/bash
22
# when running in docker on windows bash seems to be at /bin/bash TODO: can we make this one script?
3-
java -jar headlessmc-launcher-1.10.0.jar --command $@
3+
java -jar headlessmc-launcher-1.10.1.jar --command $@

0 commit comments

Comments
 (0)