From 20711c9d106634ff36a904565610a09583bede5d Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Fri, 14 Jun 2024 00:20:25 +0800 Subject: [PATCH 01/24] =?UTF-8?q?Fix=20#3107=20=E4=BF=AE=E5=A4=8D=20HMCL?= =?UTF-8?q?=203.5.8.248=20=E6=97=A0=E6=B3=95=E5=AE=89=E8=A3=85=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E5=B8=A6=20forge=20=E7=9A=84=201.11.2=20=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=9A=84=E9=97=AE=E9=A2=98=20(#3113)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/jackhuang/hmcl/download/game/GameLibrariesTask.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameLibrariesTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameLibrariesTask.java index 793a6b1223..f177e13482 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameLibrariesTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameLibrariesTask.java @@ -134,7 +134,7 @@ public void execute() throws IOException { } } } - if (shouldDownloadLibrary(gameRepository, version, library, integrityCheck) && library.hasDownloadURL()) { + if (shouldDownloadLibrary(gameRepository, version, library, integrityCheck) && (library.hasDownloadURL() || !"optifine".equals(library.getGroupId()))) { dependencies.add(new LibraryDownloadTask(dependencyManager, file, library)); } else { dependencyManager.getCacheRepository().tryCacheLibrary(library, file.toPath()); From b827167a3dcb4ae6aa181df828f3acf5f09eb2a9 Mon Sep 17 00:00:00 2001 From: Glavo Date: Fri, 14 Jun 2024 00:45:48 +0800 Subject: [PATCH 02/24] =?UTF-8?q?=E5=B0=86=201.21=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=87=B3=20versions.txt=20(#3118)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/assets/game/versions.txt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/HMCLCore/src/main/resources/assets/game/versions.txt b/HMCLCore/src/main/resources/assets/game/versions.txt index 287242f5c9..82cef053a6 100644 --- a/HMCLCore/src/main/resources/assets/game/versions.txt +++ b/HMCLCore/src/main/resources/assets/game/versions.txt @@ -756,4 +756,15 @@ 1.20.5 1.20.6-rc1 1.20.6 -24w18a \ No newline at end of file +24w18a +24w19a +24w19b +24w20a +24w21a +24w21b +1.21-pre1 +1.21-pre2 +1.21-pre3 +1.21-pre4 +1.21-rc1 +1.21 \ No newline at end of file From 5e0687c13819a9411ff67cecc07d0a64013d9c58 Mon Sep 17 00:00:00 2001 From: z0z0r4 Date: Sat, 15 Jun 2024 22:31:49 +0800 Subject: [PATCH 03/24] Update CurseForgeRemoteModRepository.java (#3022) 432 is gameid for minecraft https://docs.curseforge.com/#get-fingerprints-matches-by-game-id https://github.com/Hex-Dragon/PCL2/blob/d682b598032bc4c7e3b1367cae4d51d037007ae9/Plain%20Craft%20Launcher%202/Modules/Minecraft/ModMod.vb#L1029-L1030 --- .../jackhuang/hmcl/mod/curse/CurseForgeRemoteModRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseForgeRemoteModRepository.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseForgeRemoteModRepository.java index 2b6c031326..b716020ec1 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseForgeRemoteModRepository.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseForgeRemoteModRepository.java @@ -156,7 +156,7 @@ public Optional getRemoteVersionByLocalFile(LocalModFile loca long hash = Integer.toUnsignedLong(MurmurHash2.hash32(baos.toByteArray(), baos.size(), 1)); - Response response = HttpRequest.POST(PREFIX + "/v1/fingerprints") + Response response = HttpRequest.POST(PREFIX + "/v1/fingerprints/432") .json(mapOf(pair("fingerprints", Collections.singletonList(hash)))) .header("X-API-KEY", apiKey) .getJson(new TypeToken>() { From e0ecd5e69599041a6d5b3c9eb42dee26fbd84f10 Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Mon, 17 Jun 2024 20:16:55 +0800 Subject: [PATCH 04/24] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20#3131=201.7.10-pre4?= =?UTF-8?q?=20=E7=89=88=E6=9C=AC=20Forge=20=E5=AE=89=E8=A3=85=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20(#3133)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix #3131 * Fix. --- .../download/forge/ForgeBMCLVersionList.java | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeBMCLVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeBMCLVersionList.java index d63d7d156e..cd0cfcd109 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeBMCLVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeBMCLVersionList.java @@ -30,13 +30,16 @@ import java.time.Instant; import java.time.format.DateTimeParseException; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; import java.util.concurrent.CompletableFuture; import static org.jackhuang.hmcl.util.Lang.mapOf; import static org.jackhuang.hmcl.util.Lang.wrap; -import static org.jackhuang.hmcl.util.logging.Logger.LOG; import static org.jackhuang.hmcl.util.Pair.pair; +import static org.jackhuang.hmcl.util.logging.Logger.LOG; public final class ForgeBMCLVersionList extends VersionList { private final String apiRoot; @@ -63,10 +66,20 @@ public CompletableFuture refreshAsync() { throw new UnsupportedOperationException("ForgeBMCLVersionList does not support loading the entire Forge remote version list."); } + public String toLookupVersion(String version) { + return "1.7.10-pre4".equals(version) ? "1.7.10_pre4" : version; + } + + public String fromLookupVersion(String version) { + return "1.7.10_pre4".equals(version) ? "1.7.10-pre4" : version; + } + @Override public CompletableFuture refreshAsync(String gameVersion) { + String lookupVersion = toLookupVersion(gameVersion); + return CompletableFuture.completedFuture(null) - .thenApplyAsync(wrap(unused -> HttpRequest.GET(apiRoot + "/forge/minecraft/" + gameVersion).>getJson(new TypeToken>() { + .thenApplyAsync(wrap(unused -> HttpRequest.GET(apiRoot + "/forge/minecraft/" + lookupVersion).>getJson(new TypeToken>() { }.getType()))) .thenAcceptAsync(forgeVersions -> { lock.writeLock().lock(); @@ -80,12 +93,12 @@ public CompletableFuture refreshAsync(String gameVersion) { List urls = new ArrayList<>(); for (ForgeVersion.File file : version.getFiles()) if ("installer".equals(file.getCategory()) && "jar".equals(file.getFormat())) { - String classifier = gameVersion + "-" + version.getVersion() + String classifier = lookupVersion + "-" + version.getVersion() + (StringUtils.isNotBlank(version.getBranch()) ? "-" + version.getBranch() : ""); String fileName1 = "forge-" + classifier + "-" + file.getCategory() + "." + file.getFormat(); - String fileName2 = "forge-" + classifier + "-" + gameVersion + "-" + file.getCategory() + "." + file.getFormat(); + String fileName2 = "forge-" + classifier + "-" + lookupVersion + "-" + file.getCategory() + "." + file.getFormat(); urls.add("https://files.minecraftforge.net/maven/net/minecraftforge/forge/" + classifier + "/" + fileName1); - urls.add("https://files.minecraftforge.net/maven/net/minecraftforge/forge/" + classifier + "-" + gameVersion + "/" + fileName2); + urls.add("https://files.minecraftforge.net/maven/net/minecraftforge/forge/" + classifier + "-" + lookupVersion + "/" + fileName2); urls.add(NetworkUtils.withQuery("https://bmclapi2.bangbang93.com/forge/download", mapOf( pair("mcversion", version.getGameVersion()), pair("version", version.getVersion()), @@ -108,7 +121,7 @@ public CompletableFuture refreshAsync(String gameVersion) { } versions.put(gameVersion, new ForgeRemoteVersion( - version.getGameVersion(), version.getVersion(), releaseDate, urls)); + fromLookupVersion(version.getGameVersion()), version.getVersion(), releaseDate, urls)); } } finally { lock.writeLock().unlock(); From 7d5d74d0c602d3d0654946b80239f41fb643fdd4 Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Fri, 21 Jun 2024 23:24:16 +0800 Subject: [PATCH 05/24] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20#3135=20Forge=201.7.?= =?UTF-8?q?10-pre4=20=E5=AE=89=E8=A3=85=E9=97=AE=E9=A2=98=20(#3136)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix #3135 * Update ForgeBMCLVersionList.java --------- Co-authored-by: Glavo --- .../download/forge/ForgeBMCLVersionList.java | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeBMCLVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeBMCLVersionList.java index cd0cfcd109..ef37315eee 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeBMCLVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeBMCLVersionList.java @@ -21,6 +21,7 @@ import com.google.gson.reflect.TypeToken; import org.jackhuang.hmcl.download.VersionList; import org.jackhuang.hmcl.util.Immutable; +import org.jackhuang.hmcl.util.Lang; import org.jackhuang.hmcl.util.StringUtils; import org.jackhuang.hmcl.util.gson.Validation; import org.jackhuang.hmcl.util.io.HttpRequest; @@ -66,12 +67,19 @@ public CompletableFuture refreshAsync() { throw new UnsupportedOperationException("ForgeBMCLVersionList does not support loading the entire Forge remote version list."); } - public String toLookupVersion(String version) { - return "1.7.10-pre4".equals(version) ? "1.7.10_pre4" : version; + private static String toLookupVersion(String gameVersion) { + return "1.7.10-pre4".equals(gameVersion) ? "1.7.10_pre4" : gameVersion; } - public String fromLookupVersion(String version) { - return "1.7.10_pre4".equals(version) ? "1.7.10-pre4" : version; + private static String fromLookupVersion(String lookupVersion) { + return "1.7.10_pre4".equals(lookupVersion) ? "1.7.10-pre4" : lookupVersion; + } + + private static String toLookupBranch(String gameVersion, String branch) { + if ("1.7.10-pre4".equals(gameVersion)) { + return "prerelease"; + } + return Lang.requireNonNullElse(branch, ""); } @Override @@ -93,8 +101,9 @@ public CompletableFuture refreshAsync(String gameVersion) { List urls = new ArrayList<>(); for (ForgeVersion.File file : version.getFiles()) if ("installer".equals(file.getCategory()) && "jar".equals(file.getFormat())) { - String classifier = lookupVersion + "-" + version.getVersion() - + (StringUtils.isNotBlank(version.getBranch()) ? "-" + version.getBranch() : ""); + String branch = toLookupBranch(gameVersion, version.getBranch()); + + String classifier = lookupVersion + "-" + version.getVersion() + (branch.isEmpty() ? "" : '-' + branch); String fileName1 = "forge-" + classifier + "-" + file.getCategory() + "." + file.getFormat(); String fileName2 = "forge-" + classifier + "-" + lookupVersion + "-" + file.getCategory() + "." + file.getFormat(); urls.add("https://files.minecraftforge.net/maven/net/minecraftforge/forge/" + classifier + "/" + fileName1); @@ -102,7 +111,7 @@ public CompletableFuture refreshAsync(String gameVersion) { urls.add(NetworkUtils.withQuery("https://bmclapi2.bangbang93.com/forge/download", mapOf( pair("mcversion", version.getGameVersion()), pair("version", version.getVersion()), - pair("branch", version.getBranch()), + pair("branch", branch), pair("category", file.getCategory()), pair("format", file.getFormat()) ))); From 85b68ad135267bc33e03c3624b1bced9b7804c39 Mon Sep 17 00:00:00 2001 From: Haowei Wen Date: Sun, 30 Jun 2024 13:19:52 +0800 Subject: [PATCH 06/24] Fix findMinecraftRuntimeDirs() is broken on Linux/FreeBSD --- .../java/org/jackhuang/hmcl/download/java/JavaRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/JavaRepository.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/JavaRepository.java index 10f08fdceb..89e87fc49b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/JavaRepository.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/JavaRepository.java @@ -57,7 +57,7 @@ public static Stream> findMinecraftRuntimeDirs() { "Minecraft Launcher\\runtime")); case LINUX: case FREEBSD: - return Stream.of(FileUtils.tryGetPath(System.getProperty("user.home", ".minecraft/runtime"))); + return Stream.of(FileUtils.tryGetPath(System.getProperty("user.home"), ".minecraft/runtime")); case OSX: return Stream.of(FileUtils.tryGetPath(System.getProperty("user.home"), "Library/Application Support/minecraft/runtime")); default: From c81e510bfa57429ea6032af914b5c5ecb9e686b1 Mon Sep 17 00:00:00 2001 From: Glavo Date: Mon, 15 Jul 2024 12:33:53 +0800 Subject: [PATCH 07/24] =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F=E6=8C=87=E5=AE=9A=E5=AD=97?= =?UTF-8?q?=E4=BD=93=20(#3181)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java index a37f0cef2b..076c284611 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java @@ -148,7 +148,10 @@ public Color getForegroundColor() { public String[] getStylesheets(String overrideFontFamily) { String css = "/assets/css/blue.css"; - String fontFamily = System.getProperty("hmcl.font.override", overrideFontFamily); + String fontFamily = overrideFontFamily == null + ? System.getProperty("hmcl.font.override", System.getenv("HMCL_FONT")) + : overrideFontFamily; + String fontStyle = null; if (fontFamily == null) { Optional font = tryLoadFont(); From 816a8539ea72db65d43fef3476aa89dfabf4182d Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Thu, 18 Jul 2024 00:40:34 +0800 Subject: [PATCH 08/24] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20bug-report.yml=20?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E6=97=A0=E6=95=88=E9=93=BE=E6=8E=A5=20(#3159?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/bug-report.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index 9e7553d9a3..331b5e472b 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -9,7 +9,7 @@ body: value: | 提交前请确认: * 该问题确实是 **HMCL 的错误**,而**不是 Minecraft 非正常退出**,如果你的 Minecraft 非正常退出,请前往 [QQ 群](https://docs.hmcl.net/groups.html)/[Discord 频道](https://discord.gg/jVvC7HfM6U) 中获取帮助。 - * 你的启动器版本是**最新的快照版本**,可以点击 [此处](https://github.com/burningtnt/HMCL-Snapshot-Update/raw/master/datas/HMCL-dev.jar) 下载最新快照版本。 + * 你的启动器版本是**最新的快照版本**,可以点击 [此处](https://zkitefly.github.io/HMCL-Snapshot-Update/) 下载最新快照版本。 如果你的问题并不属于上述两类,你可以选取另一种 Issue 类型,或者直接前往 [QQ 群](https://docs.hmcl.net/groups.html)/[Discord 频道](https://discord.gg/jVvC7HfM6U) 中获取帮助。 From 1e472ea463fa19a950100154c4bbbc0f9748e096 Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Sat, 20 Jul 2024 01:44:26 +0800 Subject: [PATCH 09/24] Fix: NPE in LauncherHelper. (#3160) --- HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java index 960a983660..33fc9ed4ca 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -241,7 +241,7 @@ public void onStop(boolean success, TaskExecutor executor) { launchingStepsPane.fireEvent(new DialogCloseEvent()); if (!success) { Exception ex = executor.getException(); - if (!(ex instanceof CancellationException)) { + if (ex != null && !(ex instanceof CancellationException)) { String message; if (ex instanceof ModpackCompletionException) { if (ex.getCause() instanceof FileNotFoundException) From b7a5b484b5236d0795319ef37915907b54f07e06 Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Sat, 20 Jul 2024 01:56:13 +0800 Subject: [PATCH 10/24] =?UTF-8?q?[=E9=87=8D=E8=A6=81]=20=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=20#3095=20=E5=BE=AE=E8=BD=AF=E7=99=BB=E5=BD=95=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E5=AF=B9=20XBox=20400=20=E9=94=99=E8=AF=AF=E7=BB=99?= =?UTF-8?q?=E4=BA=88=E6=8F=90=E7=A4=BA=20(#3121)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix #3095 * Fix * Update I18N_zh_CN.properties --------- Co-authored-by: Glavo --- .../org/jackhuang/hmcl/setting/Accounts.java | 11 ++++-- .../resources/assets/lang/I18N.properties | 1 + .../resources/assets/lang/I18N_zh.properties | 1 + .../assets/lang/I18N_zh_CN.properties | 11 +++--- .../hmcl/auth/microsoft/MicrosoftService.java | 39 ++++++++++++------- .../jackhuang/hmcl/util/io/HttpRequest.java | 11 ++++-- .../hmcl/util/io/ResponseCodeException.java | 7 ++++ 7 files changed, 57 insertions(+), 24 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Accounts.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Accounts.java index c96b56cfa4..6223c6da8f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Accounts.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Accounts.java @@ -54,17 +54,19 @@ import static org.jackhuang.hmcl.ui.FXUtils.onInvalidating; import static org.jackhuang.hmcl.util.Lang.immutableListOf; import static org.jackhuang.hmcl.util.Lang.mapOf; -import static org.jackhuang.hmcl.util.logging.Logger.LOG; import static org.jackhuang.hmcl.util.Pair.pair; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; +import static org.jackhuang.hmcl.util.logging.Logger.LOG; /** * @author huangyuhui */ public final class Accounts { - private Accounts() {} + private Accounts() { + } private static final AuthlibInjectorArtifactProvider AUTHLIB_INJECTOR_DOWNLOADER = createAuthlibInjectorArtifactProvider(); + private static void triggerAuthlibInjectorUpdateCheck() { if (AUTHLIB_INJECTOR_DOWNLOADER instanceof AuthlibInjectorDownloader) { Schedulers.io().execute(() -> { @@ -87,6 +89,7 @@ private static void triggerAuthlibInjectorUpdateCheck() { // ==== login type / account factory mapping ==== private static final Map> type2factory = new HashMap<>(); private static final Map, String> factory2type = new HashMap<>(); + static { type2factory.put("offline", FACTORY_OFFLINE); type2factory.put("authlibInjector", FACTORY_AUTHLIB_INJECTOR); @@ -130,7 +133,7 @@ else if (account instanceof MicrosoftAccount) private static final String GLOBAL_PREFIX = "$GLOBAL:"; private static final ObservableList> globalAccountStorages = FXCollections.observableArrayList(); - private static final ObservableList accounts = observableArrayList(account -> new Observable[] { account }); + private static final ObservableList accounts = observableArrayList(account -> new Observable[]{account}); private static final ObjectProperty selectedAccount = new SimpleObjectProperty<>(Accounts.class, "selectedAccount"); /** @@ -465,6 +468,8 @@ public static String localizeErrorMessage(Exception exception) { } else { return i18n("account.methods.microsoft.error.unknown", errorCode); } + } else if (exception instanceof MicrosoftService.XBox400Exception) { + return i18n("account.methods.microsoft.error.wrong_verify_method"); } else if (exception instanceof MicrosoftService.NoMinecraftJavaEditionProfileException) { return i18n("account.methods.microsoft.error.no_character"); } else if (exception instanceof MicrosoftService.NoXuiException) { diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index 77ed7f4190..cbafeefbb8 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -107,6 +107,7 @@ account.methods.microsoft.error.country_unavailable=Xbox Live is not available i account.methods.microsoft.error.missing_xbox_account=Your Microsoft account does not have a linked Xbox account yet. Please create one before continuing. account.methods.microsoft.error.no_character=Your account does not own the Minecraft Java Edition.\nThe game profile may not have been created,\nplease click the link above to create it. account.methods.microsoft.error.unknown=Failed to log in, error: %d. +account.methods.microsoft.error.wrong_verify_method=Please log in using your account & password on the Microsoft account login page. Please do not use a verification code to log in. account.methods.microsoft.logging_in=Logging in... account.methods.microsoft.hint=Please click on the "login" button, and copy the code shown here later to finish the login process in the opened browser window.\n\ \n\ diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index 0063a9cb93..2cdb8948de 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -106,6 +106,7 @@ account.methods.microsoft.error.country_unavailable=你所在的國家或地區 account.methods.microsoft.error.missing_xbox_account=你的微軟帳號尚未關聯 XBox 帳號,你必須先創建 XBox 帳號,才能登入遊戲。 account.methods.microsoft.error.no_character=該帳戶未包含 Minecraft Java 版購買記錄\n可能未創建遊戲檔案,請點擊上方鏈接創建 account.methods.microsoft.error.unknown=登入失敗,錯誤碼:%d +account.methods.microsoft.error.wrong_verify_method=請在 Microsoft 帳號登陸頁面使用帳號 + 密碼登入。請不要使用驗證碼登入。 account.methods.microsoft.logging_in=登入中... account.methods.microsoft.makegameidsettings=創建檔案/編輯檔案名稱 account.methods.microsoft.hint=你需要按照以下步驟添加賬戶:\n\ diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties index ee0fca1ee2..ac4cb2e15f 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -101,12 +101,13 @@ account.methods.microsoft=微软账户 account.methods.microsoft.birth=如何修改账户出生日期 account.methods.microsoft.close_page=已完成微软账户授权,接下来启动器还需要完成剩余登录步骤。你已经可以关闭本页面了。 account.methods.microsoft.deauthorize=解除账户授权 -account.methods.microsoft.error.add_family=由于你未满 18 岁,你的账户必须被加入到家庭中才能登录游戏。你也可以点击上方【账户设置页】更改你的账户的出生日期,使年龄满 18 岁以上以继续登录。\n你可以点击右上角帮助按钮进行求助。 -account.methods.microsoft.error.add_family_probably=请检查你的账户设置,如果年龄未满 18 岁,你的账户必须被加入到家庭中才能登录游戏。你也可以点击上方链接更改你的账户的出生日期,使年龄满 18 岁以上以继续登录。\n你可以点击右上角帮助按钮进行求助。 +account.methods.microsoft.error.add_family=请点击上方【账户设置页】更改你的账户的出生日期,使年龄满 18 岁以上。或将账户加入到家庭中。\n你可以点击右上角帮助按钮进行求助。 +account.methods.microsoft.error.add_family_probably=请点击上方【账户设置页】更改你的账户的出生日期,使年龄满 18 岁以上。或将账户加入到家庭中。\n你可以点击右上角帮助按钮进行求助。 account.methods.microsoft.error.country_unavailable=你所在的国家或地区不受 XBox Live 的支持。 -account.methods.microsoft.error.missing_xbox_account=你的微软账户尚未关联 XBox 账户,你必须先创建 XBox 账户,才能登录游戏。\n你可以点击右上角帮助按钮进行求助。 -account.methods.microsoft.error.no_character=该账户未包含 Minecraft Java 版购买记录\n若已购买,则可能未创建游戏档案,请点击上方链接创建。\n若确定该账户完成了上述步骤,请先在 Minecraft 官网(minecraft.net)登录一次账户,然后再在启动器登录。\n你可以点击右上角帮助按钮进行求助。 -account.methods.microsoft.error.unknown=登录失败,错误码:%d +account.methods.microsoft.error.missing_xbox_account=请点击上方【创建档案】关联 XBox 账户。\n你可以点击右上角帮助按钮进行求助。 +account.methods.microsoft.error.no_character=请确认你购买了 Minecraft: Java 版。若已购买,该账户未包含 Minecraft Java 版购买记录\n请点击【创建档案】创建游戏档案。\n你可以点击右上角帮助按钮进行求助。 +account.methods.microsoft.error.unknown=未知问题。错误码:%d。\n你可以点击右上角帮助按钮进行求助。 +account.methods.microsoft.error.wrong_verify_method=请在 Microsoft 账户登陆页面使用账户 + 密码登录。请不要使用验证码登录。\n你可以点击右上角帮助按钮进行求助。 account.methods.microsoft.logging_in=登录中…… account.methods.microsoft.makegameidsettings=创建档案/编辑档案名称 account.methods.microsoft.hint=你需要按照以下步骤添加账户:\n\ diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/microsoft/MicrosoftService.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/microsoft/MicrosoftService.java index 79e4a32d10..ae3bc1b8c1 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/microsoft/MicrosoftService.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/microsoft/MicrosoftService.java @@ -21,8 +21,10 @@ import com.google.gson.GsonBuilder; import com.google.gson.JsonParseException; import com.google.gson.annotations.SerializedName; -import org.jackhuang.hmcl.auth.*; +import org.jackhuang.hmcl.auth.AuthenticationException; import org.jackhuang.hmcl.auth.OAuth; +import org.jackhuang.hmcl.auth.ServerDisconnectException; +import org.jackhuang.hmcl.auth.ServerResponseMalformedException; import org.jackhuang.hmcl.auth.yggdrasil.CompleteGameProfile; import org.jackhuang.hmcl.auth.yggdrasil.RemoteAuthenticationException; import org.jackhuang.hmcl.auth.yggdrasil.Texture; @@ -44,8 +46,8 @@ import static java.util.Objects.requireNonNull; import static org.jackhuang.hmcl.util.Lang.mapOf; import static org.jackhuang.hmcl.util.Lang.threadPool; -import static org.jackhuang.hmcl.util.logging.Logger.LOG; import static org.jackhuang.hmcl.util.Pair.pair; +import static org.jackhuang.hmcl.util.logging.Logger.LOG; public class MicrosoftService { private static final String SCOPE = "XboxLive.signin offline_access"; @@ -123,17 +125,25 @@ private MicrosoftSession authenticateViaLiveAccessToken(String liveAccessToken, String uhs = getUhs(xboxResponse, null); - // Authenticate Minecraft with XSTS - XBoxLiveAuthenticationResponse minecraftXstsResponse = HttpRequest - .POST("https://xsts.auth.xboxlive.com/xsts/authorize") - .json(mapOf( - pair("Properties", - mapOf(pair("SandboxId", "RETAIL"), - pair("UserTokens", Collections.singletonList(xboxResponse.token)))), - pair("RelyingParty", "rp://api.minecraftservices.com/"), pair("TokenType", "JWT"))) - .ignoreHttpErrorCode(401) - .retry(5) - .getJson(XBoxLiveAuthenticationResponse.class); + XBoxLiveAuthenticationResponse minecraftXstsResponse; + try { + minecraftXstsResponse = HttpRequest + .POST("https://xsts.auth.xboxlive.com/xsts/authorize") + .json(mapOf( + pair("Properties", + mapOf(pair("SandboxId", "RETAIL"), + pair("UserTokens", Collections.singletonList(xboxResponse.token)))), + pair("RelyingParty", "rp://api.minecraftservices.com/"), pair("TokenType", "JWT"))) + .ignoreHttpErrorCode(401) + .retry(5) + .getJson(XBoxLiveAuthenticationResponse.class); + } catch (ResponseCodeException e) { + if (e.getResponseCode() == 400) { + throw new XBox400Exception(); + } + + throw e; + } getUhs(minecraftXstsResponse, uhs); @@ -290,6 +300,9 @@ public String getRedirect() { public static final long ADD_FAMILY = 2148916238L; } + public static class XBox400Exception extends AuthenticationException { + } + public static class NoMinecraftJavaEditionProfileException extends AuthenticationException { } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/HttpRequest.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/HttpRequest.java index c8dbc8792c..29dd6d5046 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/HttpRequest.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/HttpRequest.java @@ -187,13 +187,18 @@ public String getString() throws IOException { os.write(bytes); } + URL url = new URL(this.url); + if (responseCodeTester != null) { - responseCodeTester.accept(new URL(url), con.getResponseCode()); + responseCodeTester.accept(url, con.getResponseCode()); } else { if (con.getResponseCode() / 100 != 2) { if (!ignoreHttpCode && !toleratedHttpCodes.contains(con.getResponseCode())) { - String data = NetworkUtils.readData(con); - throw new ResponseCodeException(new URL(url), con.getResponseCode(), data); + try { + throw new ResponseCodeException(url, con.getResponseCode(), NetworkUtils.readData(con)); + } catch (IOException e) { + throw new ResponseCodeException(url, con.getResponseCode(), e); + } } } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/ResponseCodeException.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/ResponseCodeException.java index 19d4d9a3fd..b386497646 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/ResponseCodeException.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/io/ResponseCodeException.java @@ -33,6 +33,13 @@ public ResponseCodeException(URL url, int responseCode) { this.data = null; } + public ResponseCodeException(URL url, int responseCode, Throwable cause) { + super("Unable to request url " + url + ", response code: " + responseCode, cause); + this.url = url; + this.responseCode = responseCode; + this.data = null; + } + public ResponseCodeException(URL url, int responseCode, String data) { super("Unable to request url " + url + ", response code: " + responseCode + ", data: " + data); this.url = url; From 0782f40fe0250345e10dba2db84d2a1ef194d240 Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Sat, 20 Jul 2024 01:57:04 +0800 Subject: [PATCH 11/24] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20#3127=201.21=20NeoFo?= =?UTF-8?q?rge=20=E4=B8=8B=E8=BD=BD=E9=97=AE=E9=A2=98=20(#3128)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmcl/download/neoforge/NeoForgeOfficialVersionList.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/neoforge/NeoForgeOfficialVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/neoforge/NeoForgeOfficialVersionList.java index fc4292bce6..2496b14574 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/neoforge/NeoForgeOfficialVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/neoforge/NeoForgeOfficialVersionList.java @@ -56,7 +56,9 @@ public CompletableFuture refreshAsync() { } for (String version : results[1].versions) { - String mcVersion = "1." + version.substring(0, version.indexOf('.', version.indexOf('.') + 1)); + int si1 = version.indexOf('.'), si2 = version.indexOf('.', version.indexOf('.') + 1); + String mcVersion = "1." + version.substring(0, Integer.parseInt(version.substring(si1 + 1, si2)) == 0 ? si1 : si2); + versions.put(mcVersion, new NeoForgeRemoteVersion( mcVersion, NeoForgeRemoteVersion.normalize(version), Collections.singletonList( From d87cf91cdf3205e6eabf46bbc925df3584fa052a Mon Sep 17 00:00:00 2001 From: Glavo Date: Sat, 20 Jul 2024 02:18:41 +0800 Subject: [PATCH 12/24] =?UTF-8?q?=E5=88=A0=E9=99=A4=20I18N=20=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B8=AD=E9=87=8D=E5=A4=8D=E7=9A=84=E6=9D=A1=E7=9B=AE?= =?UTF-8?q?=20(#3190)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 删除 I18N 文件中重复的项目 * update * update --- HMCL/src/main/resources/assets/lang/I18N_es.properties | 7 ------- HMCL/src/main/resources/assets/lang/I18N_ja.properties | 3 --- 2 files changed, 10 deletions(-) diff --git a/HMCL/src/main/resources/assets/lang/I18N_es.properties b/HMCL/src/main/resources/assets/lang/I18N_es.properties index 036af612c4..4a30228865 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_es.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_es.properties @@ -480,13 +480,6 @@ game.crash.reason.fabric_reports_an_error_and_gives_a_solution=Forge puede haber game.crash.reason.java_version_is_too_high=El juego actual se bloqueó porque la versión de Java es demasiado alta y no puede seguir ejecutándose.\nCambie a una versión anterior de Java en la pestaña Java Path de Configuración global del juego o Configuración específica del juego antes de iniciar el juego.\nSi no es así, puede descargarlo desde java.com (Java8) o BellSoft Liberica Full JRE (Java17) y otras plataformas para descargar e instalar una (reinicie el iniciador después de la instalación). game.crash.reason.mod_name=El juego actual no puede continuar ejecutándose debido a un problema con el nombre del archivo mod. El nombre del archivo de\nMod solo debe usar mayúsculas y minúsculas (Aa ~ Zz), números (0 ~ 9), líneas horizontales (-), subrayado (_) y puntos (.) en toda la mitad del inglés.\n Por favor, vaya a la carpeta mod para agregar un carácter de Cumplimiento anterior a todos los nombres de archivo mod que no cumplan. game.crash.reason.incomplete_forge_installation=O jogo atual não pode continuar devido a uma instalação incompleta do Forge / NeoForge.\nDesinstale e reinstale o Forge / NeoForge em Configurações de versão - Instalação automática. -game.crash.reason.forge_error=Forge puede haber proporcionado un mensaje de error. \nPuede ver el registro y realizar las acciones correspondientes de acuerdo con la información de registro en el informe de errores. \nSi no ve un mensaje de error, puede consultar el informe de errores para saber cómo ocurrió el error.\n%1$s -game.crash.reason.mod_solution0=El juego actual no puede seguir ejecutándose debido a algunos problemas de modificación. \nPuede consultar el registro para ver si hay un mod incorrecto. -game.crash.reason.mod_profile_causes_game_crash=El juego actual no puede seguir ejecutándose debido a un problema con el perfil de mod. \nPuede consultar el registro del mod defectuoso y su archivo de configuración. -game.crash.reason.fabric_reports_an_error_and_gives_a_solution=Forge puede haber dado un mensaje de error. \nPuede ver el registro y realizar las acciones correspondientes de acuerdo con la información de registro en el informe de errores. \nSi no ve un mensaje de error, puede consultar el informe de errores para saber cómo ocurrió el error. -game.crash.reason.java_version_is_too_high=El juego actual se bloqueó porque la versión de Java es demasiado alta y no puede seguir ejecutándose. \nCambie a una versión anterior de Java en la pestaña Java Path de Configuración global del juego o Configuración específica del juego antes de iniciar el juego. \nSi no es así, puede descargarlo desde java.com (Java8) o BellSoft Liberica Full JRE (Java17) y otras plataformas para descargar e instalar una (reinicie el iniciador después de la instalación). -game.crash.reason.mod_name=El juego actual no puede continuar ejecutándose debido a un problema con el nombre del archivo mod. El nombre del archivo de \nMod solo debe usar mayúsculas y minúsculas (Aa ~ Zz), números (0 ~ 9), líneas horizontales (-), subrayado (_) y puntos (.) en toda la mitad del inglés. \n Por favor, vaya a la carpeta mod para agregar un carácter de Cumplimiento anterior a todos los nombres de archivo mod que no cumplan. -game.crash.reason.incomplete_forge_installation=O jogo atual não pode continuar devido a uma instalação incompleta do Forge. \nDesinstale e reinstale o Forge em Configurações de versão - Instalação automática. game.crash.reason.modlauncher_8=El juego se ha bloqueado porque tu versión actual de Forge no es compatible con tu instalación de Java. Por favor, intente actualizar Forge, o intente utilizar Java 8u312/11.0.13/17.0.1 o versiones anteriores.\n\ \n\ 8u312 y anteriores\:\n\ diff --git a/HMCL/src/main/resources/assets/lang/I18N_ja.properties b/HMCL/src/main/resources/assets/lang/I18N_ja.properties index eed35a3f51..d311cd315b 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_ja.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_ja.properties @@ -311,9 +311,6 @@ fatal.javafx.missing=JavaFXがありません。\nJava11以降を使用してい fatal.config_loading_failure=構成にアクセスできません。\nHelloMinecraftを確認してください。Launcherには、「%s」とその中のファイルへの読み取りおよび書き込みアクセス権があります。 fatal.migration_requires_manual_reboot=更新が完了しました。Hello Minecraftを再開してください!ランチャー。 fatal.apply_update_failure=ごめんなさい、Hello Minecraft! Launcher 何か問題が発生したため、ランチャーは更新を完了できませんでした。\nただし、Hello Minecraftをダウンロードすることで、手動で更新を終了できます。%s からのランチャー。\nこの問題を報告することを検討してください。 -fatal.config_loading_failure=構成にアクセスできません。\nHelloMinecraftを確認してください。 Launcherには、「%s」とその中のファイルへの読み取りおよび書き込みアクセス権があります。\nmacOS の場合は、「デスクトップ」、「ダウンロード」、「ドキュメント」以外の権限を持つ場所に HMCL を配置して、再試行してください。 -fatal.migration_requires_manual_reboot=更新が完了しました。 Hello Minecraftを再開してください!ランチャー。 -fatal.apply_update_failure=ごめんなさい、Hello Minecraft! Launcher 何か問題が発生したため、ランチャーは更新を完了できませんでした。\nただし、Hello Minecraftをダウンロードすることで、手動で更新を終了できます。 %s からのランチャー。\nこの問題を報告することを検討してください。 fatal.samba=If you are trying to run HMCL in a shared folder by Samba, HMCL may not working, please try updating your Java or running HMCL in a local folder. fatal.illegal_char=ユーザーフォルダーのパスに不正な文字'='が含まれています, ログインアカウントやオフラインログインではスキンの変更ができなくなり。 From 5a4825d41919735ddb91f4d553ea047ebd65fb63 Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Sat, 20 Jul 2024 04:05:58 +0800 Subject: [PATCH 13/24] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20#3080=20=E5=BE=AE?= =?UTF-8?q?=E8=BD=AF=E8=B4=A6=E6=88=B7=E6=97=A0=E6=B3=95=E6=AD=A3=E7=A1=AE?= =?UTF-8?q?=E8=AF=BB=E5=8F=96=20Token=20=E8=BF=87=E6=9C=9F=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E7=9A=84=E9=97=AE=E9=A2=98=20(#3126)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/jackhuang/hmcl/auth/microsoft/MicrosoftSession.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/microsoft/MicrosoftSession.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/microsoft/MicrosoftSession.java index 22fd566b1a..3e4c491c11 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/microsoft/MicrosoftSession.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/microsoft/MicrosoftSession.java @@ -18,8 +18,8 @@ package org.jackhuang.hmcl.auth.microsoft; import org.jackhuang.hmcl.auth.AuthInfo; -import org.jackhuang.hmcl.util.logging.Logger; import org.jackhuang.hmcl.util.gson.UUIDTypeAdapter; +import org.jackhuang.hmcl.util.logging.Logger; import java.util.Map; import java.util.UUID; @@ -87,7 +87,7 @@ public static MicrosoftSession fromStorage(Map storage) { .orElseThrow(() -> new IllegalArgumentException("accessToken is missing")); String refreshToken = tryCast(storage.get("refreshToken"), String.class) .orElseThrow(() -> new IllegalArgumentException("refreshToken is missing")); - Long notAfter = tryCast(storage.get("notAfter"), Long.class).orElse(0L); + Long notAfter = tryCast(storage.get("notAfter"), Number.class).map(Number::longValue).orElse(0L); String userId = tryCast(storage.get("userid"), String.class) .orElseThrow(() -> new IllegalArgumentException("userid is missing")); return new MicrosoftSession(tokenType, accessToken, notAfter, refreshToken, new User(userId), new GameProfile(uuid, name)); From dbb614dce1fbb758fc4b8648439c9ba055800cf4 Mon Sep 17 00:00:00 2001 From: Glavo Date: Sat, 20 Jul 2024 04:58:51 +0800 Subject: [PATCH 14/24] =?UTF-8?q?Fix=20#3051:=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E6=9B=B4=E5=A4=9A=E7=89=88=E6=9C=AC=E5=8F=B7?= =?UTF-8?q?=20(#3058)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix #3051: 支持解析更多版本号 * Update GameVersionNumberTest * Update versions.txt * Update GameVersionNumber * Update GameVersionNumberTest * Update GameVersionNumberTest * Update GameVersionNumberTest --- .../util/versioning/GameVersionNumber.java | 224 +++++++----------- .../hmcl/util/versioning/VersionNumber.java | 2 + .../versioning/GameVersionNumberTest.java | 95 +++++--- 3 files changed, 149 insertions(+), 172 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/GameVersionNumber.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/GameVersionNumber.java index 65564db578..fff98ea6aa 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/GameVersionNumber.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/GameVersionNumber.java @@ -1,3 +1,20 @@ +/* + * Hello Minecraft! Launcher + * Copyright (C) 2024 huangyuhui and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ package org.jackhuang.hmcl.util.versioning; import org.jetbrains.annotations.NotNull; @@ -10,6 +27,9 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +/** + * @author Glavo + */ public abstract class GameVersionNumber implements Comparable { public static String[] getDefaultGameVersions() { @@ -22,26 +42,21 @@ public static GameVersionNumber asGameVersion(String version) { char ch = version.charAt(0); switch (ch) { case 'r': - return Old.parsePreClassic(version); case 'a': case 'b': case 'c': - return Old.parseAlphaBetaClassic(version); case 'i': - return Old.parseInfdev(version); + return Old.parse(version); } - if (version.equals("0.0")) { + if (version.equals("0.0")) return Release.ZERO; - } - if (version.startsWith("1.")) { + if (version.startsWith("1.")) return Release.parse(version); - } - if (version.length() == 6 && version.charAt(2) == 'w') { + if (version.length() == 6 && version.charAt(2) == 'w') return Snapshot.parse(version); - } } } catch (IllegalArgumentException ignore) { } @@ -97,9 +112,8 @@ public int compareTo(@NotNull String other) { @Override public int compareTo(@NotNull GameVersionNumber other) { - if (this.getType() != other.getType()) { + if (this.getType() != other.getType()) return Integer.compare(this.getType().ordinal(), other.getType().ordinal()); - } return compareToImpl(other); } @@ -110,27 +124,25 @@ public String toString() { } static final class Old extends GameVersionNumber { - - private static final Pattern PATTERN = Pattern.compile("[abc](?[0-9]+)\\.(?[0-9]+)(\\.(?[0-9]+))?([^0-9]*(?[0-9]+).*)?"); - - static Old parsePreClassic(String value) { - int version; - try { - version = Integer.parseInt(value.substring("rd-".length())); - } catch (NumberFormatException e) { - throw new IllegalArgumentException(e); - } - return new Old(value, Type.PRE_CLASSIC, version, 0, 0, 0); - } - - static Old parseAlphaBetaClassic(String value) { - Matcher matcher = PATTERN.matcher(value); - if (!matcher.matches()) { - throw new IllegalArgumentException(value); - } - + static Old parse(String value) { Type type; + int prefixLength = 1; switch (value.charAt(0)) { + case 'r': + if (!value.startsWith("rd-")) { + throw new IllegalArgumentException(value); + } + + type = Type.PRE_CLASSIC; + prefixLength = "rd-".length(); + break; + case 'i': + if (!value.startsWith("inf-")) { + throw new IllegalArgumentException(value); + } + type = Type.INFDEV; + prefixLength = "inf-".length(); + break; case 'a': type = Type.ALPHA; break; @@ -141,60 +153,22 @@ static Old parseAlphaBetaClassic(String value) { type = Type.CLASSIC; break; default: - throw new AssertionError(value); - } - - int major = Integer.parseInt(matcher.group("major")); - int minor = Integer.parseInt(matcher.group("minor")); - - String patchString = matcher.group("patch"); - int patch = patchString != null ? Integer.parseInt(patchString) : 0; - - String additionalString = matcher.group("additional"); - int additional = additionalString != null ? Integer.parseInt(additionalString) : 0; - - return new Old(value, type, major, minor, patch, additional); - } - - static Old parseInfdev(String value) { - String version = value.substring("inf-".length()); - int major; - int patch; - - try { - major = Integer.parseInt(version); - patch = 0; - } catch (NumberFormatException e) { - int idx = version.indexOf('-'); - if (idx >= 0) { - try { - major = Integer.parseInt(version.substring(0, idx)); - patch = Integer.parseInt(version.substring(idx + 1)); - } catch (NumberFormatException ignore) { - throw new IllegalArgumentException(value); - } - } else { throw new IllegalArgumentException(value); - } } - return new Old(value, Type.INFDEV, major, 0, patch, 0); - } + if (value.length() < prefixLength + 1 || !Character.isDigit(value.charAt(prefixLength))) + throw new IllegalArgumentException(value); + return new Old(value, type, VersionNumber.asVersion(value.substring(prefixLength))); + } final Type type; - final int major; - final int minor; - final int patch; - final int additional; + final VersionNumber versionNumber; - private Old(String value, Type type, int major, int minor, int patch, int additional) { + private Old(String value, Type type, VersionNumber versionNumber) { super(value); this.type = type; - this.major = major; - this.minor = minor; - this.patch = patch; - this.additional = additional; + this.versionNumber = versionNumber; } @Override @@ -204,42 +178,26 @@ Type getType() { @Override int compareToImpl(@NotNull GameVersionNumber other) { - Old that = (Old) other; - int c = Integer.compare(this.major, that.major); - if (c != 0) { - return c; - } - - c = Integer.compare(this.minor, that.minor); - if (c != 0) { - return c; - } - - c = Integer.compare(this.patch, that.patch); - if (c != 0) { - return c; - } - - return Integer.compare(this.additional, that.additional); + return this.versionNumber.compareTo(((Old) other).versionNumber); } @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (!(o instanceof Old)) return false; Old other = (Old) o; - return major == other.major && minor == other.minor && patch == other.patch && additional == other.additional && type == other.type; + return type == other.type && this.versionNumber.compareTo(other.versionNumber) == 0; } @Override public int hashCode() { - return Objects.hash(type, major, minor, patch, additional); + return Objects.hash(type, versionNumber.hashCode()); } } static final class Release extends GameVersionNumber { - private static final Pattern PATTERN = Pattern.compile("1\\.(?[0-9]+)(\\.(?[0-9]+))?((?(-[a-zA-Z]+| Pre-Release ))(?[0-9]+))?"); + private static final Pattern PATTERN = Pattern.compile("1\\.(?[0-9]+)(\\.(?[0-9]+))?((?(-[a-zA-Z]+| Pre-Release ))(?.+))?"); static final int TYPE_GA = Integer.MAX_VALUE; @@ -248,7 +206,7 @@ static final class Release extends GameVersionNumber { static final int TYPE_PRE = 2; static final int TYPE_RC = 3; - static final Release ZERO = new Release("0.0", 0, 0, 0, TYPE_GA, 0); + static final Release ZERO = new Release("0.0", 0, 0, 0, TYPE_GA, VersionNumber.ZERO); static Release parse(String value) { Matcher matcher = PATTERN.matcher(value); @@ -276,7 +234,7 @@ static Release parse(String value) { } String eaVersionString = matcher.group("eaVersion"); - int eaVersion = eaVersionString == null ? 0 : Integer.parseInt(eaVersionString); + VersionNumber eaVersion = eaVersionString != null ? VersionNumber.asVersion(eaVersionString) : VersionNumber.ZERO; return new Release(value, 1, minor, patch, eaType, eaVersion); } @@ -286,9 +244,9 @@ static Release parse(String value) { private final int patch; private final int eaType; - private final int eaVersion; + private final VersionNumber eaVersion; - Release(String value, int major, int minor, int patch, int eaType, int eaVersion) { + Release(String value, int major, int minor, int patch, int eaType, VersionNumber eaVersion) { super(value); this.major = major; this.minor = minor; @@ -323,36 +281,31 @@ int compareToRelease(Release other) { return c; } - return Integer.compare(this.eaVersion, other.eaVersion); + return this.eaVersion.compareTo(other.eaVersion); } int compareToSnapshot(Snapshot other) { int idx = Arrays.binarySearch(Versions.SNAPSHOT_INTS, other.intValue); - if (idx >= 0) { + if (idx >= 0) return this.compareToRelease(Versions.SNAPSHOT_PREV[idx]) <= 0 ? -1 : 1; - } idx = -(idx + 1); - if (idx == Versions.SNAPSHOT_INTS.length) { + if (idx == Versions.SNAPSHOT_INTS.length) return -1; - } return this.compareToRelease(Versions.SNAPSHOT_PREV[idx]) <= 0 ? -1 : 1; } @Override int compareToImpl(@NotNull GameVersionNumber other) { - if (other instanceof Release) { + if (other instanceof Release) return compareToRelease((Release) other); - } - if (other instanceof Snapshot) { + if (other instanceof Snapshot) return compareToSnapshot((Snapshot) other); - } - if (other instanceof Special) { + if (other instanceof Special) return -((Special) other).compareToReleaseOrSnapshot(this); - } throw new AssertionError(other.getClass()); } @@ -367,15 +320,14 @@ public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Release other = (Release) o; - return major == other.major && minor == other.minor && patch == other.patch && eaType == other.eaType && eaVersion == other.eaVersion; + return major == other.major && minor == other.minor && patch == other.patch && eaType == other.eaType && eaVersion.equals(other.eaVersion); } } static final class Snapshot extends GameVersionNumber { static Snapshot parse(String value) { - if (value.length() != 6 || value.charAt(2) != 'w') { + if (value.length() != 6 || value.charAt(2) != 'w') throw new IllegalArgumentException(value); - } int year; int week; @@ -387,9 +339,8 @@ static Snapshot parse(String value) { } char suffix = value.charAt(5); - if ((suffix < 'a' || suffix > 'z') && suffix != '~') { + if ((suffix < 'a' || suffix > 'z') && suffix != '~') throw new IllegalArgumentException(value); - } return new Snapshot(value, year, week, suffix); } @@ -412,17 +363,14 @@ Type getType() { @Override int compareToImpl(@NotNull GameVersionNumber other) { - if (other instanceof Release) { + if (other instanceof Release) return -((Release) other).compareToSnapshot(this); - } - if (other instanceof Snapshot) { + if (other instanceof Snapshot) return Integer.compare(this.intValue, ((Snapshot) other).intValue); - } - if (other instanceof Special) { + if (other instanceof Special) return -((Special) other).compareToReleaseOrSnapshot(this); - } throw new AssertionError(other.getClass()); } @@ -460,9 +408,8 @@ boolean isUnknown() { } VersionNumber asVersionNumber() { - if (versionNumber != null) { + if (versionNumber != null) return versionNumber; - } return versionNumber = VersionNumber.asVersion(value); } @@ -473,9 +420,7 @@ GameVersionNumber getPrevNormalVersion() { v = ((Special) v).prev; } - if (v == null) { - throw new AssertionError("version: " + value); - } + if (v == null) throw new AssertionError("version: " + value); return v; } @@ -493,28 +438,23 @@ int compareToReleaseOrSnapshot(GameVersionNumber other) { } int compareToSpecial(Special other) { - if (this.isUnknown()) { + if (this.isUnknown()) return other.isUnknown() ? this.asVersionNumber().compareTo(other.asVersionNumber()) : 1; - } - if (other.isUnknown()) { + if (other.isUnknown()) return -1; - } - if (this.value.equals(other.value)) { + if (this.value.equals(other.value)) return 0; - } int c = this.getPrevNormalVersion().compareTo(other.getPrevNormalVersion()); - if (c != 0) { + if (c != 0) return c; - } GameVersionNumber v = prev; while (v instanceof Special) { - if (v == other) { + if (v == other) return 1; - } v = ((Special) v).prev; } @@ -524,17 +464,14 @@ int compareToSpecial(Special other) { @Override int compareToImpl(@NotNull GameVersionNumber o) { - if (o instanceof Release) { + if (o instanceof Release) return compareToReleaseOrSnapshot(o); - } - if (o instanceof Snapshot) { + if (o instanceof Snapshot) return compareToReleaseOrSnapshot(o); - } - if (o instanceof Special) { + if (o instanceof Special) return compareToSpecial((Special) o); - } throw new AssertionError(o.getClass()); } @@ -566,7 +503,6 @@ static final class Versions { List snapshots = new ArrayList<>(1024); List snapshotPrev = new ArrayList<>(1024); - // Convert it to dynamic resource after the website is repaired? try (BufferedReader reader = new BufferedReader(new InputStreamReader(GameVersionNumber.class.getResourceAsStream("/assets/game/versions.txt"), StandardCharsets.US_ASCII))) { Release currentRelease = null; GameVersionNumber prev = null; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/VersionNumber.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/VersionNumber.java index 0344125500..0753d02505 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/VersionNumber.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/versioning/VersionNumber.java @@ -33,6 +33,8 @@ */ public final class VersionNumber implements Comparable { + public static final VersionNumber ZERO = asVersion("0"); + public static VersionNumber asVersion(String version) { Objects.requireNonNull(version); return new VersionNumber(version); diff --git a/HMCLCore/src/test/java/org/jackhuang/hmcl/util/versioning/GameVersionNumberTest.java b/HMCLCore/src/test/java/org/jackhuang/hmcl/util/versioning/GameVersionNumberTest.java index e6e4881b04..8fb4650d2f 100644 --- a/HMCLCore/src/test/java/org/jackhuang/hmcl/util/versioning/GameVersionNumberTest.java +++ b/HMCLCore/src/test/java/org/jackhuang/hmcl/util/versioning/GameVersionNumberTest.java @@ -1,3 +1,20 @@ +/* + * Hello Minecraft! Launcher + * Copyright (C) 2024 huangyuhui and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ package org.jackhuang.hmcl.util.versioning; import org.junit.jupiter.api.Test; @@ -5,6 +22,7 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; +import java.io.UncheckedIOException; import java.nio.charset.StandardCharsets; import java.util.*; @@ -13,18 +31,25 @@ /** * @author Glavo */ -public class GameVersionNumberTest { +public final class GameVersionNumberTest { - @Test - public void testSortVersions() throws IOException { + private static List readVersions() { List versions = new ArrayList<>(); try (BufferedReader reader = new BufferedReader(new InputStreamReader(GameVersionNumber.class.getResourceAsStream("/assets/game/versions.txt"), StandardCharsets.UTF_8))) { for (String line; (line = reader.readLine()) != null && !line.isEmpty(); ) { versions.add(line); } + } catch (IOException e) { + throw new UncheckedIOException(e); } + return versions; + } + + @Test + public void testSortVersions() { + List versions = readVersions(); List copied = new ArrayList<>(versions); Collections.shuffle(copied, new Random(0)); copied.sort(Comparator.comparing(GameVersionNumber::asGameVersion)); @@ -42,52 +67,57 @@ private static void assertGameVersionEquals(String version) { private static void assertGameVersionEquals(String version1, String version2) { assertEquals(0, GameVersionNumber.asGameVersion(version1).compareTo(version2), errorMessage(version1, version2)); + assertEquals(GameVersionNumber.asGameVersion(version1), GameVersionNumber.asGameVersion(version2), errorMessage(version1, version2)); } - private static void assertLessThan(String version1, String version2) { - assertTrue(GameVersionNumber.asGameVersion(version1).compareTo(version2) < 0, errorMessage(version1, version2)); + private static String toString(GameVersionNumber gameVersionNumber) { + return gameVersionNumber.getClass().getSimpleName(); } private static void assertOrder(String... versions) { for (int i = 0; i < versions.length - 1; i++) { GameVersionNumber version1 = GameVersionNumber.asGameVersion(versions[i]); - //noinspection EqualsWithItself - assertEquals(0, version1.compareTo(version1), "version=" + versions[i]); + assertGameVersionEquals(versions[i]); for (int j = i + 1; j < versions.length; j++) { GameVersionNumber version2 = GameVersionNumber.asGameVersion(versions[j]); - assertEquals(-1, version1.compareTo(version2), String.format("version1=%s, version2=%s", versions[i], versions[j])); - assertEquals(1, version2.compareTo(version1), String.format("version1=%s, version2=%s", versions[i], versions[j])); + assertEquals(-1, version1.compareTo(version2), String.format("version1=%s (%s), version2=%s (%s)", versions[i], toString(version1), versions[j], toString(version2))); + assertEquals(1, version2.compareTo(version1), String.format("version1=%s (%s), version2=%s (%s)", versions[i], toString(version1), versions[j], toString(version2))); } } assertGameVersionEquals(versions[versions.length - 1]); } + private void assertOldVersion(String oldVersion, GameVersionNumber.Type type, String versionNumber) { + GameVersionNumber version = GameVersionNumber.asGameVersion(oldVersion); + assertInstanceOf(GameVersionNumber.Old.class, version); + GameVersionNumber.Old old = (GameVersionNumber.Old) version; + assertSame(type, old.type); + assertEquals(VersionNumber.asVersion(versionNumber), old.versionNumber); + } + @Test public void testParseOld() { - { - GameVersionNumber version = GameVersionNumber.asGameVersion("b1.0"); - assertInstanceOf(GameVersionNumber.Old.class, version); - GameVersionNumber.Old old = (GameVersionNumber.Old) version; - assertEquals(GameVersionNumber.Type.BETA, old.type); - assertEquals(1, old.major); - assertEquals(0, old.minor); - assertEquals(0, old.patch); - assertEquals(0, old.additional); - } + assertOldVersion("rd-132211", GameVersionNumber.Type.PRE_CLASSIC, "132211"); + assertOldVersion("inf-20100618", GameVersionNumber.Type.INFDEV, "20100618"); + assertOldVersion("inf-20100330-1", GameVersionNumber.Type.INFDEV, "20100330-1"); + assertOldVersion("a1.0.6", GameVersionNumber.Type.ALPHA, "1.0.6"); + assertOldVersion("a1.0.8_01", GameVersionNumber.Type.ALPHA, "1.0.8_01"); + assertOldVersion("a1.0.13_01-1", GameVersionNumber.Type.ALPHA, "1.0.13_01-1"); + assertOldVersion("b1.0", GameVersionNumber.Type.BETA, "1.0"); + assertOldVersion("b1.0_01", GameVersionNumber.Type.BETA, "1.0_01"); + assertOldVersion("b1.8-pre1-2", GameVersionNumber.Type.BETA, "1.8-pre1-2"); + assertOldVersion("b1.9-pre1", GameVersionNumber.Type.BETA, "1.9-pre1"); + } - { - GameVersionNumber version = GameVersionNumber.asGameVersion("b1.0_01"); - assertInstanceOf(GameVersionNumber.Old.class, version); - GameVersionNumber.Old old = (GameVersionNumber.Old) version; - assertEquals(GameVersionNumber.Type.BETA, old.type); - assertEquals(1, old.major); - assertEquals(0, old.minor); - assertEquals(0, old.patch); - assertEquals(1, old.additional); + @Test + public void testParseNew() { + List versions = readVersions(); + for (String version : versions) { + assertFalse(GameVersionNumber.asGameVersion(version) instanceof GameVersionNumber.Old, "version=" + version); } } @@ -138,15 +168,24 @@ public void testCompareMix() { "inf-20100330-2", "inf-20100618", "a1.0.4", + "a1.0.8_01", + "a1.0.10", + "a1.0.13_01-1", "a1.0.17_02", "a1.0.17_04", "a1.1.0", + "a1.1.1", "b1.0", "b1.0_01", "b1.1_02", "b1.2", + "b1.8-pre1-2", "b1.8.1", "0.0", + "1.0.0-rc1", + "1.0.0-rc2-1", + "1.0.0-rc2-2", + "1.0.0-rc2-3", "1.0", "11w47a", "1.1", From 7c7c36f8aa71db3663d97830d0603f15b07f7bf5 Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Sat, 20 Jul 2024 05:00:19 +0800 Subject: [PATCH 15/24] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20#3112=20=E6=A8=A1?= =?UTF-8?q?=E7=BB=84=E8=AF=A6=E6=83=85=E4=B8=AD=E8=8B=A5=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E8=BF=99=E4=B8=AA=E6=B8=B8=E6=88=8F=E7=89=88=E6=9C=AC=EF=BC=8C?= =?UTF-8?q?=E4=BB=8D=E7=84=B6=E4=BC=9A=E5=87=BA=E7=8E=B0=E8=AF=A5=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E6=A0=8F=E7=9A=84=E9=97=AE=E9=A2=98=20(#3114)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jackhuang/hmcl/ui/versions/DownloadPage.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/DownloadPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/DownloadPage.java index a8244c509b..3440c928e9 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/DownloadPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/DownloadPage.java @@ -301,10 +301,18 @@ protected ModDownloadPageSkin(DownloadPage control) { for (String gameVersion : control.versions.keys().stream() .sorted(Collections.reverseOrder(GameVersionNumber::compare)) .collect(Collectors.toList())) { - ComponentList sublist = new ComponentList(() -> - control.versions.get(gameVersion).stream() - .map(version -> new ModItem(version, control)) - .collect(Collectors.toList())); + List versions = control.versions.get(gameVersion); + if (versions == null || versions.isEmpty()) { + continue; + } + + ComponentList sublist = new ComponentList(() -> { + ArrayList items = new ArrayList<>(versions.size()); + for (RemoteMod.Version v: versions) { + items.add(new ModItem(v, control)); + } + return items; + }); sublist.getStyleClass().add("no-padding"); sublist.setTitle("Minecraft " + gameVersion); From 61096142d5dc07a7738f5f2daa57c998f9b096a4 Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Sat, 20 Jul 2024 05:03:08 +0800 Subject: [PATCH 16/24] =?UTF-8?q?Fix=20#3065:=20=E4=BF=AE=E5=A4=8D=20Curse?= =?UTF-8?q?Forge=20=E6=90=9C=E7=B4=A2=20API=20=E5=AF=B9=E7=BF=BB=E9=A1=B5?= =?UTF-8?q?=E6=80=BB=E9=87=8F=E8=AE=A1=E7=AE=97=E4=B8=8D=E6=AD=A3=E7=A1=AE?= =?UTF-8?q?=E7=9A=84=20Bug=20(#3066)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix #3065 * Fix * Fix. --- .../hmcl/ui/versions/DownloadListPage.java | 118 +++++++++++------- .../curse/CurseForgeRemoteModRepository.java | 8 +- .../modrinth/ModrinthRemoteModRepository.java | 2 +- 3 files changed, 83 insertions(+), 45 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/DownloadListPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/DownloadListPage.java index 46df504b17..ceb0c9ed3c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/DownloadListPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/DownloadListPage.java @@ -43,7 +43,6 @@ import org.jackhuang.hmcl.setting.Profile; import org.jackhuang.hmcl.task.Schedulers; import org.jackhuang.hmcl.task.Task; -import org.jackhuang.hmcl.task.TaskExecutor; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.FXUtils; import org.jackhuang.hmcl.ui.WeakListenerHolder; @@ -52,6 +51,7 @@ import org.jackhuang.hmcl.ui.construct.TwoLineListItem; import org.jackhuang.hmcl.ui.decorator.DecoratorPage; import org.jackhuang.hmcl.util.AggregatedObservableList; +import org.jackhuang.hmcl.util.Holder; import org.jackhuang.hmcl.util.Lang; import org.jackhuang.hmcl.util.StringUtils; import org.jackhuang.hmcl.util.i18n.I18n; @@ -64,10 +64,10 @@ import java.util.Optional; import java.util.stream.Collectors; +import static org.jackhuang.hmcl.ui.FXUtils.runInFX; import static org.jackhuang.hmcl.ui.FXUtils.stringConverter; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; import static org.jackhuang.hmcl.util.javafx.ExtendedProperties.selectedItemPropertyFor; -import static org.jackhuang.hmcl.ui.FXUtils.runInFX; public class DownloadListPage extends Control implements DecoratorPage, VersionPage.VersionLoadable { protected final ReadOnlyObjectWrapper state = new ReadOnlyObjectWrapper<>(); @@ -87,7 +87,7 @@ public class DownloadListPage extends Control implements DecoratorPage, VersionP protected final ListProperty downloadSources = new SimpleListProperty<>(this, "downloadSources", FXCollections.observableArrayList()); protected final StringProperty downloadSource = new SimpleStringProperty(); private final WeakListenerHolder listenerHolder = new WeakListenerHolder(); - private TaskExecutor executor; + private int searchID = 0; protected RemoteModRepository repository; private Runnable retrySearch; @@ -163,11 +163,8 @@ public void search(String userGameVersion, RemoteModRepository.Category category setLoading(true); setFailed(false); - if (executor != null && !executor.isCancelled()) { - executor.cancel(); - } - - executor = Task.supplyAsync(() -> { + int currentSearchID = searchID = searchID + 1; + Task.supplyAsync(() -> { Profile.ProfileVersion version = this.version.get(); if (StringUtils.isBlank(version.getVersion())) { return userGameVersion; @@ -176,9 +173,11 @@ public void search(String userGameVersion, RemoteModRepository.Category category ? version.getProfile().getRepository().getGameVersion(version.getVersion()).orElse("") : ""; } - }).thenApplyAsync(gameVersion -> - repository.search(gameVersion, category, pageOffset, 50, searchFilter, sort, RemoteModRepository.SortOrder.DESC) - ).whenComplete(Schedulers.javafx(), (result, exception) -> { + }).thenApplyAsync(gameVersion -> repository.search(gameVersion, category, pageOffset, 50, searchFilter, sort, RemoteModRepository.SortOrder.DESC)).whenComplete(Schedulers.javafx(), (result, exception) -> { + if (searchID != currentSearchID) { + return; + } + setLoading(false); if (exception == null) { items.setAll(result.getResults().collect(Collectors.toList())); @@ -196,7 +195,7 @@ protected String getLocalizedCategory(String category) { return i18n("curse.category." + category); } - protected String getLocalizedCategoryIndent(ModDownloadListPageSkin.CategoryIndented category) { + private String getLocalizedCategoryIndent(ModDownloadListPageSkin.CategoryIndented category) { return StringUtils.repeats(' ', category.indent * 4) + (category.getCategory() == null ? i18n("curse.category.0") @@ -344,13 +343,14 @@ protected ModDownloadListPageSkin(DownloadListPage control) { sortComboBox.getSelectionModel().select(0); searchPane.addRow(rowIndex++, new Label(i18n("mods.category")), categoryStackPane, new Label(i18n("search.sort")), sortStackPane); - StringProperty previousSearchFilter = new SimpleStringProperty(this, "Previous Seach Filter", ""); + IntegerProperty filterID = new SimpleIntegerProperty(this, "Filter ID", 0); + IntegerProperty currentFilterID = new SimpleIntegerProperty(this, "Current Filter ID", -1); EventHandler searchAction = e -> { - if (!previousSearchFilter.get().equals(nameField.getText())) { + if (currentFilterID.get() != filterID.get()) { control.pageOffset.set(0); } + currentFilterID.set(filterID.get()); - previousSearchFilter.set(nameField.getText()); getSkinnable().search(gameVersionField.getSelectionModel().getSelectedItem(), Optional.ofNullable(categoryComboBox.getSelectionModel().getSelectedItem()) .map(CategoryIndented::getCategory) @@ -360,60 +360,93 @@ protected ModDownloadListPageSkin(DownloadListPage control) { sortComboBox.getSelectionModel().getSelectedItem()); }; + control.listenerHolder.add(FXUtils.observeWeak( + () -> filterID.set(filterID.get() + 1), + + control.downloadSource, + gameVersionField.getSelectionModel().selectedItemProperty(), + categoryComboBox.getSelectionModel().selectedItemProperty(), + nameField.textProperty(), + sortComboBox.getSelectionModel().selectedItemProperty() + )); + HBox actionsBox = new HBox(8); GridPane.setColumnSpan(actionsBox, 4); actionsBox.setAlignment(Pos.CENTER); { AggregatedObservableList actions = new AggregatedObservableList<>(); + Holder changeButton = new Holder<>(); + JFXButton firstPageButton = FXUtils.newBorderButton(i18n("search.first_page")); firstPageButton.setOnAction(event -> { control.pageOffset.set(0); + changeButton.value.run(); searchAction.handle(event); }); - firstPageButton.setDisable(true); - control.pageCount.addListener((observable, oldValue, newValue) -> firstPageButton.setDisable(control.pageCount.get() == -1)); JFXButton previousPageButton = FXUtils.newBorderButton(i18n("search.previous_page")); previousPageButton.setOnAction(event -> { - if (control.pageOffset.get() > 0) { - control.pageOffset.set(control.pageOffset.get() - 1); + int pageOffset = control.pageOffset.get(); + if (pageOffset > 0) { + control.pageOffset.set(pageOffset - 1); + changeButton.value.run(); searchAction.handle(event); } }); - previousPageButton.setDisable(true); - control.pageOffset.addListener((observable, oldValue, newValue) -> previousPageButton.setDisable( - control.pageCount.get() == -1 || control.pageOffset.get() == 0 - )); - - Label pageOffset = new Label(i18n("search.page_n", 0, "-")); - control.pageOffset.addListener((observable, oldValue, newValue) -> pageOffset.setText(i18n( - "search.page_n", control.pageOffset.get() + 1, control.pageCount.get() == -1 ? "-" : control.pageCount.getValue().toString() - ))); - control.pageCount.addListener((observable, oldValue, newValue) -> pageOffset.setText(i18n( - "search.page_n", control.pageOffset.get() + 1, control.pageCount.get() == -1 ? "-" : control.pageCount.getValue().toString() - ))); + + Label pageDescription = new Label(); + pageDescription.textProperty().bind(Bindings.createStringBinding(() -> { + int pageCount = control.pageCount.get(); + return i18n("search.page_n", control.pageOffset.get() + 1, pageCount == -1 ? "-" : String.valueOf(pageCount)); + }, control.pageOffset, control.pageCount)); JFXButton nextPageButton = FXUtils.newBorderButton(i18n("search.next_page")); nextPageButton.setOnAction(event -> { - control.pageOffset.set(control.pageOffset.get() + 1); - searchAction.handle(event); + int nv = control.pageOffset.get() + 1; + if (nv < control.pageCount.get()) { + control.pageOffset.set(nv); + changeButton.value.run(); + searchAction.handle(event); + } }); - nextPageButton.setDisable(true); - control.pageOffset.addListener((observable, oldValue, newValue) -> nextPageButton.setDisable( - control.pageCount.get() == -1 || control.pageOffset.get() >= control.pageCount.get() - 1 - )); - control.pageCount.addListener((observable, oldValue, newValue) -> nextPageButton.setDisable( - control.pageCount.get() == -1 || control.pageOffset.get() >= control.pageCount.get() - 1 - )); JFXButton lastPageButton = FXUtils.newBorderButton(i18n("search.last_page")); lastPageButton.setOnAction(event -> { control.pageOffset.set(control.pageCount.get() - 1); + changeButton.value.run(); searchAction.handle(event); }); + + firstPageButton.setDisable(true); + previousPageButton.setDisable(true); lastPageButton.setDisable(true); - control.pageCount.addListener((observable, oldValue, newValue) -> lastPageButton.setDisable(control.pageCount.get() == -1 || control.pageOffset.get() >= control.pageCount.get() - 1)); + nextPageButton.setDisable(true); + + changeButton.value = () -> { + int pageOffset = control.pageOffset.get(); + int pageCount = control.pageCount.get(); + + boolean disablePrevious = pageOffset == 0; + firstPageButton.setDisable(disablePrevious); + previousPageButton.setDisable(disablePrevious); + + boolean disableNext = pageOffset == pageCount - 1; + nextPageButton.setDisable(disableNext); + lastPageButton.setDisable(disableNext || pageCount == -1); + }; + + FXUtils.onChange(control.pageCount, pageCountN -> { + int pageCount = pageCountN.intValue(); + + if (pageCount != -1) { + if (control.pageOffset.get() + 1 >= pageCount) { + control.pageOffset.set(pageCount - 1); + } + } + + changeButton.value.run(); + }); Pane placeholder = new Pane(); HBox.setHgrow(placeholder, Priority.SOMETIMES); @@ -421,13 +454,14 @@ protected ModDownloadListPageSkin(DownloadListPage control) { JFXButton searchButton = FXUtils.newRaisedButton(i18n("search")); searchButton.setOnAction(searchAction); - actions.appendList(FXCollections.observableArrayList(firstPageButton, previousPageButton, pageOffset, nextPageButton, lastPageButton, placeholder, searchButton)); + actions.appendList(FXCollections.observableArrayList(firstPageButton, previousPageButton, pageDescription, nextPageButton, lastPageButton, placeholder, searchButton)); actions.appendList(control.actions); Bindings.bindContent(actionsBox.getChildren(), actions.getAggregatedList()); } searchPane.addRow(rowIndex++, actionsBox); + FXUtils.onChange(control.downloadSource, v -> searchAction.handle(null)); nameField.setOnAction(searchAction); gameVersionField.setOnAction(searchAction); categoryComboBox.setOnAction(searchAction); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseForgeRemoteModRepository.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseForgeRemoteModRepository.java index b716020ec1..5bda19051e 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseForgeRemoteModRepository.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseForgeRemoteModRepository.java @@ -94,6 +94,10 @@ private String toSortOrder(SortOrder sortOrder) { return "asc"; } + private int calculateTotalPages(Response> response, int pageSize) { + return (int) Math.ceil((double) Math.min(response.pagination.totalCount, 10000) / pageSize); + } + @Override public SearchResult search(String gameVersion, @Nullable RemoteModRepository.Category category, int pageOffset, int pageSize, String searchFilter, SortType sortType, SortOrder sortOrder) throws IOException { int categoryId = 0; @@ -112,7 +116,7 @@ public SearchResult search(String gameVersion, @Nullable RemoteModRepository.Cat .getJson(new TypeToken>>() { }.getType()); if (searchFilter.isEmpty()) { - return new SearchResult(response.getData().stream().map(CurseAddon::toMod), (int)Math.ceil((double)response.pagination.totalCount / pageSize)); + return new SearchResult(response.getData().stream().map(CurseAddon::toMod), calculateTotalPages(response, pageSize)); } // https://github.com/HMCL-dev/HMCL/issues/1549 @@ -135,7 +139,7 @@ public SearchResult search(String gameVersion, @Nullable RemoteModRepository.Cat } return pair(remoteMod, diff); - }).sorted(Comparator.comparingInt(Pair::getValue)).map(Pair::getKey), response.getData().stream().map(CurseAddon::toMod), response.pagination.totalCount); + }).sorted(Comparator.comparingInt(Pair::getValue)).map(Pair::getKey), response.getData().stream().map(CurseAddon::toMod), calculateTotalPages(response, pageSize)); } @Override diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/modrinth/ModrinthRemoteModRepository.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/modrinth/ModrinthRemoteModRepository.java index 4cc9e06329..d20a542ac9 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/modrinth/ModrinthRemoteModRepository.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/modrinth/ModrinthRemoteModRepository.java @@ -95,7 +95,7 @@ public SearchResult search(String gameVersion, @Nullable RemoteModRepository.Cat Response response = HttpRequest.GET(NetworkUtils.withQuery(PREFIX + "/v2/search", query)) .getJson(new TypeToken>() { }.getType()); - return new SearchResult(response.getHits().stream().map(ProjectSearchResult::toMod), (int)Math.ceil((double)response.totalHits / pageSize)); + return new SearchResult(response.getHits().stream().map(ProjectSearchResult::toMod), (int) Math.ceil((double) response.totalHits / pageSize)); } @Override From 519ed0ad5f463a539af08ad4cf8950bb31158478 Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Sat, 20 Jul 2024 05:29:30 +0800 Subject: [PATCH 17/24] =?UTF-8?q?=E6=B8=85=E7=90=86=20RemoteModRepository?= =?UTF-8?q?=20(#2798)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Clean up duplicated codes in DownloadPage. * Remove useless codes. * Render the raw category when no i18n is provided. * Fix checkstyle. --- .../hmcl/ui/download/DownloadPage.java | 17 +--- ...ava => HMCLLocalizedDownloadListPage.java} | 41 ++++++--- .../hmcl/ui/versions/ModDownloadListPage.java | 84 ------------------- .../ui/versions/ModpackDownloadListPage.java | 84 ------------------- .../resources/assets/lang/I18N.properties | 1 - .../resources/assets/lang/I18N_es.properties | 1 - .../resources/assets/lang/I18N_ja.properties | 1 - .../resources/assets/lang/I18N_ru.properties | 1 - .../resources/assets/lang/I18N_zh.properties | 1 - .../assets/lang/I18N_zh_CN.properties | 1 - 10 files changed, 33 insertions(+), 199 deletions(-) rename HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/{ResourcePackDownloadListPage.java => HMCLLocalizedDownloadListPage.java} (58%) delete mode 100644 HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModDownloadListPage.java delete mode 100644 HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModpackDownloadListPage.java diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadPage.java index 6ad9798334..72d033ca8b 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadPage.java @@ -69,7 +69,6 @@ public class DownloadPage extends DecoratorAnimatedPage implements DecoratorPage private final TabHeader.Tab modTab = new TabHeader.Tab<>("modTab"); private final TabHeader.Tab modpackTab = new TabHeader.Tab<>("modpackTab"); private final TabHeader.Tab resourcePackTab = new TabHeader.Tab<>("resourcePackTab"); - private final TabHeader.Tab customizationTab = new TabHeader.Tab<>("customizationTab"); private final TabHeader.Tab worldTab = new TabHeader.Tab<>("worldTab"); private final TransitionPane transitionPane = new TransitionPane(); private final DownloadNavigator versionPageNavigator = new DownloadNavigator(); @@ -80,7 +79,7 @@ public DownloadPage() { newGameTab.setNodeSupplier(loadVersionFor(() -> new VersionsPage(versionPageNavigator, i18n("install.installer.choose", i18n("install.installer.game")), "", DownloadProviders.getDownloadProvider(), "game", versionPageNavigator::onGameSelected))); modpackTab.setNodeSupplier(loadVersionFor(() -> { - ModpackDownloadListPage page = new ModpackDownloadListPage(Versions::downloadModpackImpl, false); + DownloadListPage page = HMCLLocalizedDownloadListPage.ofModPack(Versions::downloadModpackImpl, false); JFXButton installLocalModpackButton = FXUtils.newRaisedButton(i18n("install.modpack")); installLocalModpackButton.setOnAction(e -> Versions.importModpack()); @@ -88,9 +87,8 @@ public DownloadPage() { page.getActions().add(installLocalModpackButton); return page; })); - modTab.setNodeSupplier(loadVersionFor(() -> new ModDownloadListPage((profile, version, file) -> download(profile, version, file, "mods"), true))); - resourcePackTab.setNodeSupplier(loadVersionFor(() -> new ResourcePackDownloadListPage((profile, version, file) -> download(profile, version, file, "resourcepacks"), true))); - customizationTab.setNodeSupplier(loadVersionFor(() -> new DownloadListPage(CurseForgeRemoteModRepository.CUSTOMIZATIONS))); + modTab.setNodeSupplier(loadVersionFor(() -> HMCLLocalizedDownloadListPage.ofMod((profile, version, file) -> download(profile, version, file, "mods"), true))); + resourcePackTab.setNodeSupplier(loadVersionFor(() -> HMCLLocalizedDownloadListPage.ofResourcePack((profile, version, file) -> download(profile, version, file, "resourcepacks"), true))); worldTab.setNodeSupplier(loadVersionFor(() -> new DownloadListPage(CurseForgeRemoteModRepository.WORLDS))); tab = new TabHeader(newGameTab, modpackTab, modTab, resourcePackTab, worldTab); @@ -129,12 +127,6 @@ public DownloadPage() { item.activeProperty().bind(tab.getSelectionModel().selectedItemProperty().isEqualTo(resourcePackTab)); item.setOnAction(e -> tab.select(resourcePackTab)); }) -// .addNavigationDrawerItem(item -> { -// item.setTitle(i18n("download.curseforge.customization")); -// item.setLeftGraphic(wrap(SVG::script)); -// item.activeProperty().bind(tab.getSelectionModel().selectedItemProperty().isEqualTo(customizationTab)); -// item.setOnAction(e -> selectTabIfCurseForgeAvailable(customizationTab)); -// }) .addNavigationDrawerItem(item -> { item.setTitle(i18n("world")); item.setLeftGraphic(wrap(SVG.EARTH)); @@ -212,9 +204,6 @@ private void loadVersions(Profile profile) { if (resourcePackTab.isInitialized()) { resourcePackTab.getNode().loadVersion(profile, null); } - if (customizationTab.isInitialized()) { - customizationTab.getNode().loadVersion(profile, null); - } if (worldTab.isInitialized()) { worldTab.getNode().loadVersion(profile, null); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ResourcePackDownloadListPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/HMCLLocalizedDownloadListPage.java similarity index 58% rename from HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ResourcePackDownloadListPage.java rename to HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/HMCLLocalizedDownloadListPage.java index cf430a476f..a7cedd0c96 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ResourcePackDownloadListPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/HMCLLocalizedDownloadListPage.java @@ -28,11 +28,23 @@ import static org.jackhuang.hmcl.util.logging.Logger.LOG; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; -public class ResourcePackDownloadListPage extends DownloadListPage { - public ResourcePackDownloadListPage(DownloadPage.DownloadCallback callback, boolean versionSelection) { +public final class HMCLLocalizedDownloadListPage extends DownloadListPage { + public static DownloadListPage ofMod(DownloadPage.DownloadCallback callback, boolean versionSelection) { + return new HMCLLocalizedDownloadListPage(callback, versionSelection, RemoteModRepository.Type.MOD, CurseForgeRemoteModRepository.MODS, ModrinthRemoteModRepository.MODS); + } + + public static DownloadListPage ofModPack(DownloadPage.DownloadCallback callback, boolean versionSelection) { + return new HMCLLocalizedDownloadListPage(callback, versionSelection, RemoteModRepository.Type.MODPACK, CurseForgeRemoteModRepository.MODPACKS, ModrinthRemoteModRepository.MODPACKS); + } + + public static DownloadListPage ofResourcePack(DownloadPage.DownloadCallback callback, boolean versionSelection) { + return new HMCLLocalizedDownloadListPage(callback, versionSelection, RemoteModRepository.Type.RESOURCE_PACK, CurseForgeRemoteModRepository.RESOURCE_PACKS, ModrinthRemoteModRepository.RESOURCE_PACKS); + } + + private HMCLLocalizedDownloadListPage(DownloadPage.DownloadCallback callback, boolean versionSelection, RemoteModRepository.Type type, CurseForgeRemoteModRepository curseForge, ModrinthRemoteModRepository modrinth) { super(null, callback, versionSelection); - repository = new Repository(); + repository = new Repository(type, curseForge, modrinth); supportChinese.set(true); downloadSources.get().setAll("mods.curseforge", "mods.modrinth"); @@ -43,13 +55,22 @@ public ResourcePackDownloadListPage(DownloadPage.DownloadCallback callback, bool } private class Repository extends LocalizedRemoteModRepository { + private final RemoteModRepository.Type type; + private final CurseForgeRemoteModRepository curseForge; + private final ModrinthRemoteModRepository modrinth; + + public Repository(Type type, CurseForgeRemoteModRepository curseForge, ModrinthRemoteModRepository modrinth) { + this.type = type; + this.curseForge = curseForge; + this.modrinth = modrinth; + } @Override protected RemoteModRepository getBackedRemoteModRepository() { if ("mods.modrinth".equals(downloadSource.get())) { - return ModrinthRemoteModRepository.RESOURCE_PACKS; + return modrinth; } else { - return CurseForgeRemoteModRepository.RESOURCE_PACKS; + return curseForge; } } @@ -64,19 +85,17 @@ protected SortType getBackedRemoteModRepositorySortOrder() { @Override public Type getType() { - return Type.MOD; + return type; } } @Override protected String getLocalizedCategory(String category) { - String key; - if ("mods.modrinth".equals(downloadSource.get())) { - key = "modrinth.category." + category; - } else { - key = "curse.category." + category; + if (category.isEmpty()) { + return ""; } + String key = ("mods.modrinth".equals(downloadSource.get()) ? "modrinth" : "curse") + ".category." + category; try { return I18n.getResourceBundle().getString(key); } catch (MissingResourceException e) { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModDownloadListPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModDownloadListPage.java deleted file mode 100644 index 5deea40292..0000000000 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModDownloadListPage.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Hello Minecraft! Launcher - * Copyright (C) 2021 huangyuhui and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.jackhuang.hmcl.ui.versions; - -import org.jackhuang.hmcl.game.LocalizedRemoteModRepository; -import org.jackhuang.hmcl.mod.RemoteModRepository; -import org.jackhuang.hmcl.mod.curse.CurseForgeRemoteModRepository; -import org.jackhuang.hmcl.mod.modrinth.ModrinthRemoteModRepository; - -import static org.jackhuang.hmcl.util.i18n.I18n.i18n; - -public class ModDownloadListPage extends DownloadListPage { - public ModDownloadListPage(DownloadPage.DownloadCallback callback, boolean versionSelection) { - super(null, callback, versionSelection); - - repository = new Repository(); - - supportChinese.set(true); - downloadSources.get().setAll("mods.curseforge", "mods.modrinth"); - if (CurseForgeRemoteModRepository.isAvailable()) - downloadSource.set("mods.curseforge"); - else - downloadSource.set("mods.modrinth"); - } - - private class Repository extends LocalizedRemoteModRepository { - - @Override - protected RemoteModRepository getBackedRemoteModRepository() { - if ("mods.modrinth".equals(downloadSource.get())) { - return ModrinthRemoteModRepository.MODS; - } else { - return CurseForgeRemoteModRepository.MODS; - } - } - - @Override - protected SortType getBackedRemoteModRepositorySortOrder() { - if ("mods.modrinth".equals(downloadSource.get())) { - return SortType.NAME; - } else { - return SortType.POPULARITY; - } - } - - @Override - public Type getType() { - return Type.MOD; - } - } - - @Override - protected String getLocalizedCategory(String category) { - if ("mods.modrinth".equals(downloadSource.get())) { - return i18n("modrinth.category." + category); - } else { - return i18n("curse.category." + category); - } - } - - @Override - protected String getLocalizedOfficialPage() { - if ("mods.modrinth".equals(downloadSource.get())) { - return i18n("mods.modrinth"); - } else { - return i18n("mods.curseforge"); - } - } -} diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModpackDownloadListPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModpackDownloadListPage.java deleted file mode 100644 index 91ee40d05c..0000000000 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModpackDownloadListPage.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Hello Minecraft! Launcher - * Copyright (C) 2022 huangyuhui and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.jackhuang.hmcl.ui.versions; - -import org.jackhuang.hmcl.game.LocalizedRemoteModRepository; -import org.jackhuang.hmcl.mod.RemoteModRepository; -import org.jackhuang.hmcl.mod.curse.CurseForgeRemoteModRepository; -import org.jackhuang.hmcl.mod.modrinth.ModrinthRemoteModRepository; - -import static org.jackhuang.hmcl.util.i18n.I18n.i18n; - -public class ModpackDownloadListPage extends DownloadListPage { - public ModpackDownloadListPage(DownloadPage.DownloadCallback callback, boolean versionSelection) { - super(null, callback, versionSelection); - - repository = new Repository(); - - supportChinese.set(true); - downloadSources.get().setAll("mods.curseforge", "mods.modrinth"); - if (CurseForgeRemoteModRepository.isAvailable()) - downloadSource.set("mods.curseforge"); - else - downloadSource.set("mods.modrinth"); - } - - private class Repository extends LocalizedRemoteModRepository { - - @Override - protected RemoteModRepository getBackedRemoteModRepository() { - if ("mods.modrinth".equals(downloadSource.get())) { - return ModrinthRemoteModRepository.MODPACKS; - } else { - return CurseForgeRemoteModRepository.MODPACKS; - } - } - - @Override - protected SortType getBackedRemoteModRepositorySortOrder() { - if ("mods.modrinth".equals(downloadSource.get())) { - return SortType.NAME; - } else { - return SortType.POPULARITY; - } - } - - @Override - public Type getType() { - return Type.MODPACK; - } - } - - @Override - protected String getLocalizedCategory(String category) { - if ("mods.modrinth".equals(downloadSource.get())) { - return i18n("modrinth.category." + category); - } else { - return i18n("curse.category." + category); - } - } - - @Override - protected String getLocalizedOfficialPage() { - if ("mods.modrinth".equals(downloadSource.get())) { - return i18n("mods.modrinth"); - } else { - return i18n("mods.curseforge"); - } - } -} diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index cbafeefbb8..18b995dace 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -320,7 +320,6 @@ download=Download download.hint=Install games and modpacks or download mods, resource packs and worlds download.code.404=File not found on the remote server: %s download.content=Addons -download.curseforge.customization=Shaders, and game customization download.curseforge.unavailable=HMCL nightly build does not support access to CurseForge, please use release version or beta version to download. download.existing=The file cannot be saved because it already exists. You can use 'Save As' to save the file elsewhere. download.external_link=Open Download Website diff --git a/HMCL/src/main/resources/assets/lang/I18N_es.properties b/HMCL/src/main/resources/assets/lang/I18N_es.properties index 4a30228865..a629abbda8 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_es.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_es.properties @@ -295,7 +295,6 @@ download=Descargar download.hint=Instalar juegos y modpacks o descargar mods, paquetes de recursos y mapas download.code.404=Archivo no encontrado en el servidor remoto: %s download.content=Complementos -download.curseforge.customization=Luz y sombras, y personalización del juego download.existing=El archivo no se puede guardar porque ya existe. Puedes usar 'Guardar como' para guardar el archivo en otro lugar. download.external_link=Abrir sitio web download.failed=Falló la descarga de %1$s, código de respuesta: %2$d diff --git a/HMCL/src/main/resources/assets/lang/I18N_ja.properties b/HMCL/src/main/resources/assets/lang/I18N_ja.properties index d311cd315b..d77dd2b54b 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_ja.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_ja.properties @@ -277,7 +277,6 @@ download=ダウンロード download.hint=ゲームや modpack をインストールするか、mod、リソース パック、マップをダウンロードします download.code.404=リモートサーバーにファイルが見つかりません:%s download.content=ゲームコンテンツ -download.curseforge.customization=光と影、およびゲームのカスタマイズ download.existing=ファイルは既に存在するため、保存できません。「名前を付けて保存」を選択して、ファイルを別の場所に保存できます。 download.external_link=ダウンロードサイトを開く download.failed=%1$s のダウンロードに失敗しました、応答コード:%2$d diff --git a/HMCL/src/main/resources/assets/lang/I18N_ru.properties b/HMCL/src/main/resources/assets/lang/I18N_ru.properties index 9b7ca88be6..928b699d2c 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_ru.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_ru.properties @@ -293,7 +293,6 @@ download=Скачать download.hint=Установите игры и пакеты модов или загрузите моды, пакеты ресурсов и карты download.code.404=Файл не найден на удалённом сервере: %s download.content=Игровой контент -download.curseforge.customization=Свет и тень, а также настройка игры download.curseforge.unavailable=Лаунчер версии Nightly не поддерживает доступ к CurseForge, используйте Release или Beta для скачивания. download.existing=Файл существует и по этому не может быть сохранён. Можно использовать «Сохранить как», чтобы сохранить файл в другом месте. download.external_link=Открыть сайт diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index 2cdb8948de..dc00ac1499 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -329,7 +329,6 @@ download=下載 download.hint=安裝遊戲和整合包或下載模組、資源包和地圖 download.code.404=遠端伺服器沒有需要下載的檔案: %s download.content=遊戲內容 -download.curseforge.customization=光影與遊戲定制 download.curseforge.unavailable=HMCL 預覽版暫不支持訪問 CurseForge,請使用穩定版或測試版進行下載。 download.existing=檔案已存在,無法保存。你可以選擇另存為將檔案保存至其他地方。 download.external_link=打開下載網站 diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties index ac4cb2e15f..8a5028d8f1 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -330,7 +330,6 @@ download=下载 download.hint=安装游戏和整合包或下载模组、资源包和地图 download.code.404=远程服务器不包含需要下载的文件: %s download.content=游戏内容 -download.curseforge.customization=光影与游戏定制 download.curseforge.unavailable=HMCL 预览版暂不支持访问 CurseForge,请使用稳定版或测试版进行下载。 download.existing=文件已存在,无法保存。你可以在模组选择栏中的右侧按钮另存为将文件保存至其他地方。 download.external_link=打开下载网站 From 5f84e8cfeb829a6a0aae051118ac678eb2025d97 Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Sat, 20 Jul 2024 20:09:36 +0800 Subject: [PATCH 18/24] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=201.8=20=E5=8F=8A=201.?= =?UTF-8?q?9=20=E5=AE=89=E8=A3=85=20OptiFine=20=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=20(#3130)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix: 1.8 & 1.9 OptiFine Install * Fix: checkstyle --- .../optifine/OptiFineBMCLVersionList.java | 141 ++++++++++++++---- .../download/optifine/OptiFineVersion.java | 90 ----------- 2 files changed, 115 insertions(+), 116 deletions(-) delete mode 100644 HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineVersion.java diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineBMCLVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineBMCLVersionList.java index 47aeb340ee..af5f8b7546 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineBMCLVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineBMCLVersionList.java @@ -17,6 +17,7 @@ */ package org.jackhuang.hmcl.download.optifine; +import com.google.gson.annotations.SerializedName; import com.google.gson.reflect.TypeToken; import org.jackhuang.hmcl.download.VersionList; import org.jackhuang.hmcl.util.StringUtils; @@ -30,7 +31,6 @@ import java.util.concurrent.CompletableFuture; /** - * * @author huangyuhui */ public final class OptiFineBMCLVersionList extends VersionList { @@ -48,34 +48,123 @@ public boolean hasType() { return true; } + private String fromLookupVersion(String version) { + switch (version) { + case "1.8.0": + return "1.8"; + case "1.9.0": + return "1.9"; + default: + return version; + } + } + + private String toLookupVersion(String version) { + switch (version) { + case "1.8": + return "1.8.0"; + case "1.9": + return "1.9.0"; + default: + return version; + } + } + @Override public CompletableFuture refreshAsync() { return HttpRequest.GET(apiRoot + "/optifine/versionlist").>getJsonAsync(new TypeToken>() { - }.getType()) - .thenAcceptAsync(root -> { - lock.writeLock().lock(); - - try { - versions.clear(); - Set duplicates = new HashSet<>(); - for (OptiFineVersion element : root) { - String version = element.getType() + "_" + element.getPatch(); - String mirror = "https://bmclapi2.bangbang93.com/optifine/" + element.getGameVersion() + "/" + element.getType() + "/" + element.getPatch(); - if (!duplicates.add(mirror)) - continue; - - boolean isPre = element.getPatch() != null && (element.getPatch().startsWith("pre") || element.getPatch().startsWith("alpha")); - - if (StringUtils.isBlank(element.getGameVersion())) - continue; - - String gameVersion = VersionNumber.normalize(element.getGameVersion()); - versions.put(gameVersion, new OptiFineRemoteVersion(gameVersion, version, Collections.singletonList(mirror), isPre)); - } - } finally { - lock.writeLock().unlock(); - } - }); + }.getType()).thenAcceptAsync(root -> { + lock.writeLock().lock(); + + try { + versions.clear(); + Set duplicates = new HashSet<>(); + for (OptiFineVersion element : root) { + String version = element.getType() + "_" + element.getPatch(); + String mirror = "https://bmclapi2.bangbang93.com/optifine/" + toLookupVersion(element.getGameVersion()) + "/" + element.getType() + "/" + element.getPatch(); + if (!duplicates.add(mirror)) + continue; + + boolean isPre = element.getPatch() != null && (element.getPatch().startsWith("pre") || element.getPatch().startsWith("alpha")); + + if (StringUtils.isBlank(element.getGameVersion())) + continue; + + String gameVersion = VersionNumber.normalize(fromLookupVersion(element.getGameVersion())); + versions.put(gameVersion, new OptiFineRemoteVersion(gameVersion, version, Collections.singletonList(mirror), isPre)); + } + } finally { + lock.writeLock().unlock(); + } + }); } + /** + * @author huangyuhui + */ + private static final class OptiFineVersion { + + @SerializedName("dl") + private final String downloadLink; + + @SerializedName("ver") + private final String version; + + @SerializedName("date") + private final String date; + + @SerializedName("type") + private final String type; + + @SerializedName("patch") + private final String patch; + + @SerializedName("mirror") + private final String mirror; + + @SerializedName("mcversion") + private final String gameVersion; + + public OptiFineVersion() { + this(null, null, null, null, null, null, null); + } + + public OptiFineVersion(String downloadLink, String version, String date, String type, String patch, String mirror, String gameVersion) { + this.downloadLink = downloadLink; + this.version = version; + this.date = date; + this.type = type; + this.patch = patch; + this.mirror = mirror; + this.gameVersion = gameVersion; + } + + public String getDownloadLink() { + return downloadLink; + } + + public String getVersion() { + return version; + } + + public String getDate() { + return date; + } + + public String getType() { + return type; + } + + public String getPatch() { + return patch; + } + + public String getMirror() { + return mirror; + } + + public String getGameVersion() { + return gameVersion; + } + } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineVersion.java deleted file mode 100644 index a18fe1b4fb..0000000000 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/optifine/OptiFineVersion.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Hello Minecraft! Launcher - * Copyright (C) 2020 huangyuhui and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.jackhuang.hmcl.download.optifine; - -import com.google.gson.annotations.SerializedName; - -/** - * - * @author huangyuhui - */ -public final class OptiFineVersion { - - @SerializedName("dl") - private final String downloadLink; - - @SerializedName("ver") - private final String version; - - @SerializedName("date") - private final String date; - - @SerializedName("type") - private final String type; - - @SerializedName("patch") - private final String patch; - - @SerializedName("mirror") - private final String mirror; - - @SerializedName("mcversion") - private final String gameVersion; - - public OptiFineVersion() { - this(null, null, null, null, null, null, null); - } - - public OptiFineVersion(String downloadLink, String version, String date, String type, String patch, String mirror, String gameVersion) { - this.downloadLink = downloadLink; - this.version = version; - this.date = date; - this.type = type; - this.patch = patch; - this.mirror = mirror; - this.gameVersion = gameVersion; - } - - public String getDownloadLink() { - return downloadLink; - } - - public String getVersion() { - return version; - } - - public String getDate() { - return date; - } - - public String getType() { - return type; - } - - public String getPatch() { - return patch; - } - - public String getMirror() { - return mirror; - } - - public String getGameVersion() { - return gameVersion; - } -} From ad5b74d8c7a357bdac6cadf0ac7806cb81458cc0 Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Sun, 21 Jul 2024 00:58:33 +0800 Subject: [PATCH 19/24] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=202830=20=E6=9C=AC?= =?UTF-8?q?=E5=9C=B0=E6=A8=A1=E7=BB=84=E6=9F=A5=E7=9C=8B=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=97=B6=E6=A0=87=E7=AD=BE=E9=94=99=E8=AF=AF=20(#2838)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Clean up duplicated codes in DownloadPage. * Remove useless codes. * Render the raw category when no i18n is provided. * Fix #2830. * Fix checkstyle. * format file * Remove the redundant lock. * Update ModListPageSkin * Update ModListPageSkin --------- Co-authored-by: Glavo --- .../HMCLLocalizedDownloadListPage.java | 15 +++++++- .../hmcl/ui/versions/ModListPageSkin.java | 37 +++++++++++-------- 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/HMCLLocalizedDownloadListPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/HMCLLocalizedDownloadListPage.java index a7cedd0c96..e00db972b9 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/HMCLLocalizedDownloadListPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/HMCLLocalizedDownloadListPage.java @@ -33,6 +33,14 @@ public static DownloadListPage ofMod(DownloadPage.DownloadCallback callback, boo return new HMCLLocalizedDownloadListPage(callback, versionSelection, RemoteModRepository.Type.MOD, CurseForgeRemoteModRepository.MODS, ModrinthRemoteModRepository.MODS); } + public static DownloadListPage ofCurseForgeMod(DownloadPage.DownloadCallback callback, boolean versionSelection) { + return new HMCLLocalizedDownloadListPage(callback, versionSelection, RemoteModRepository.Type.MOD, CurseForgeRemoteModRepository.MODS, null); + } + + public static DownloadListPage ofModrinthMod(DownloadPage.DownloadCallback callback, boolean versionSelection) { + return new HMCLLocalizedDownloadListPage(callback, versionSelection, RemoteModRepository.Type.MOD, null, ModrinthRemoteModRepository.MODS); + } + public static DownloadListPage ofModPack(DownloadPage.DownloadCallback callback, boolean versionSelection) { return new HMCLLocalizedDownloadListPage(callback, versionSelection, RemoteModRepository.Type.MODPACK, CurseForgeRemoteModRepository.MODPACKS, ModrinthRemoteModRepository.MODPACKS); } @@ -48,10 +56,13 @@ private HMCLLocalizedDownloadListPage(DownloadPage.DownloadCallback callback, bo supportChinese.set(true); downloadSources.get().setAll("mods.curseforge", "mods.modrinth"); - if (CurseForgeRemoteModRepository.isAvailable()) + if (curseForge != null) { downloadSource.set("mods.curseforge"); - else + } else if (modrinth != null) { downloadSource.set("mods.modrinth"); + } else { + throw new AssertionError("Should not be here."); + } } private class Repository extends LocalizedRemoteModRepository { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPageSkin.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPageSkin.java index 497a383cca..188a72bb8b 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPageSkin.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPageSkin.java @@ -33,7 +33,10 @@ import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; import javafx.scene.layout.StackPane; -import org.jackhuang.hmcl.mod.*; +import org.jackhuang.hmcl.mod.LocalModFile; +import org.jackhuang.hmcl.mod.ModLoaderType; +import org.jackhuang.hmcl.mod.RemoteMod; +import org.jackhuang.hmcl.mod.RemoteModRepository; import org.jackhuang.hmcl.mod.curse.CurseForgeRemoteModRepository; import org.jackhuang.hmcl.mod.modrinth.ModrinthRemoteModRepository; import org.jackhuang.hmcl.setting.Profile; @@ -46,7 +49,10 @@ import org.jackhuang.hmcl.ui.animation.ContainerAnimations; import org.jackhuang.hmcl.ui.animation.TransitionPane; import org.jackhuang.hmcl.ui.construct.*; -import org.jackhuang.hmcl.util.*; +import org.jackhuang.hmcl.util.Holder; +import org.jackhuang.hmcl.util.Lazy; +import org.jackhuang.hmcl.util.Pair; +import org.jackhuang.hmcl.util.StringUtils; import org.jackhuang.hmcl.util.i18n.I18n; import org.jackhuang.hmcl.util.io.CompressingUtils; import org.jackhuang.hmcl.util.io.FileUtils; @@ -58,6 +64,8 @@ import java.nio.file.FileSystem; import java.nio.file.Files; import java.nio.file.Path; +import java.util.Arrays; +import java.util.List; import java.util.Locale; import java.util.Optional; import java.util.function.Predicate; @@ -67,10 +75,10 @@ import static org.jackhuang.hmcl.ui.FXUtils.onEscPressed; import static org.jackhuang.hmcl.ui.ToolbarListPageSkin.createToolbarButton2; import static org.jackhuang.hmcl.util.Lang.mapOf; -import static org.jackhuang.hmcl.util.logging.Logger.LOG; import static org.jackhuang.hmcl.util.Pair.pair; import static org.jackhuang.hmcl.util.StringUtils.isNotBlank; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; +import static org.jackhuang.hmcl.util.logging.Logger.LOG; class ModListPageSkin extends SkinBase { @@ -323,18 +331,16 @@ class ModInfoDialog extends JFXDialogLayout { setBody(description); if (StringUtils.isNotBlank(modInfo.getModInfo().getId())) { - Lang.>immutableListOf( + for (Pair item : Arrays.asList( pair("mods.curseforge", CurseForgeRemoteModRepository.MODS), pair("mods.modrinth", ModrinthRemoteModRepository.MODS) - ).forEach(item -> { - String text = item.getKey(); - RemoteModRepository remoteModRepository = item.getValue(); - - JFXHyperlink button = new JFXHyperlink(i18n(text)); + )) { + RemoteModRepository repository = item.getValue(); + JFXHyperlink button = new JFXHyperlink(i18n(item.getKey())); Task.runAsync(() -> { - Optional versionOptional = remoteModRepository.getRemoteVersionByLocalFile(modInfo.getModInfo(), modInfo.getModInfo().getFile()); + Optional versionOptional = repository.getRemoteVersionByLocalFile(modInfo.getModInfo(), modInfo.getModInfo().getFile()); if (versionOptional.isPresent()) { - RemoteMod remoteMod = remoteModRepository.getModById(versionOptional.get().getModid()); + RemoteMod remoteMod = repository.getModById(versionOptional.get().getModid()); FXUtils.runInFX(() -> { for (ModLoaderType modLoaderType : versionOptional.get().getLoaders()) { String loaderName; @@ -357,15 +363,16 @@ class ModInfoDialog extends JFXDialogLayout { default: continue; } - if (!title.getTags().contains(loaderName)) { - title.getTags().add(loaderName); + List tags = title.getTags(); + if (!tags.contains(loaderName)) { + tags.add(loaderName); } } button.setOnAction(e -> { fireEvent(new DialogCloseEvent()); Controllers.navigate(new DownloadPage( - new DownloadListPage(remoteModRepository), + repository instanceof CurseForgeRemoteModRepository ? HMCLLocalizedDownloadListPage.ofCurseForgeMod(null, false) : HMCLLocalizedDownloadListPage.ofModrinthMod(null, false), remoteMod, new Profile.ProfileVersion(ModListPageSkin.this.getSkinnable().getProfile(), ModListPageSkin.this.getSkinnable().getVersionId()), null @@ -377,7 +384,7 @@ class ModInfoDialog extends JFXDialogLayout { }).start(); button.setDisable(true); getActions().add(button); - }); + } } if (StringUtils.isNotBlank(modInfo.getModInfo().getUrl())) { From 74abecaae756482d4db0807f5301d04dc71c8f53 Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Mon, 22 Jul 2024 23:06:20 +0800 Subject: [PATCH 20/24] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=20#3095=20=E5=BE=AE?= =?UTF-8?q?=E8=BD=AF=E7=99=BB=E5=BD=95=E7=95=8C=E9=9D=A2=E5=AF=B9=20XBox?= =?UTF-8?q?=20400=20=E9=94=99=E8=AF=AF=E7=BB=99=E4=BA=88=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=20(#3194)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmcl/auth/microsoft/MicrosoftService.java | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/microsoft/MicrosoftService.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/microsoft/MicrosoftService.java index ae3bc1b8c1..214f062de0 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/microsoft/MicrosoftService.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/microsoft/MicrosoftService.java @@ -112,21 +112,23 @@ private String getUhs(XBoxLiveAuthenticationResponse response, String existingUh } private MicrosoftSession authenticateViaLiveAccessToken(String liveAccessToken, String liveRefreshToken) throws IOException, JsonParseException, AuthenticationException { - // Authenticate with XBox Live - XBoxLiveAuthenticationResponse xboxResponse = HttpRequest - .POST("https://user.auth.xboxlive.com/user/authenticate") - .json(mapOf( - pair("Properties", - mapOf(pair("AuthMethod", "RPS"), pair("SiteName", "user.auth.xboxlive.com"), - pair("RpsTicket", "d=" + liveAccessToken))), - pair("RelyingParty", "http://auth.xboxlive.com"), pair("TokenType", "JWT"))) - .retry(5) - .accept("application/json").getJson(XBoxLiveAuthenticationResponse.class); + String uhs; + XBoxLiveAuthenticationResponse xboxResponse, minecraftXstsResponse; + try { + // Authenticate with XBox Live + xboxResponse = HttpRequest + .POST("https://user.auth.xboxlive.com/user/authenticate") + .json(mapOf( + pair("Properties", + mapOf(pair("AuthMethod", "RPS"), pair("SiteName", "user.auth.xboxlive.com"), + pair("RpsTicket", "d=" + liveAccessToken))), + pair("RelyingParty", "http://auth.xboxlive.com"), pair("TokenType", "JWT"))) + .retry(5) + .accept("application/json") + .getJson(XBoxLiveAuthenticationResponse.class); - String uhs = getUhs(xboxResponse, null); + uhs = getUhs(xboxResponse, null); - XBoxLiveAuthenticationResponse minecraftXstsResponse; - try { minecraftXstsResponse = HttpRequest .POST("https://xsts.auth.xboxlive.com/xsts/authorize") .json(mapOf( From 6f7c922ac0b12a81c7979a416664270a0d793c4e Mon Sep 17 00:00:00 2001 From: Glavo Date: Sat, 27 Jul 2024 09:16:33 +0800 Subject: [PATCH 21/24] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=A4=9A=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E6=94=AF=E6=8C=81=20(#3197)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update * Update PLATFORM.md * Update NativePatcher * Update NativePatcher * Update NativePatcher --- .../jackhuang/hmcl/util/NativePatcher.java | 24 +- HMCL/src/main/resources/assets/natives.json | 2489 +++++++++++++---- PLATFORM.md | 22 +- PLATFORM_cn.md | 22 +- 4 files changed, 1952 insertions(+), 605 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/NativePatcher.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/NativePatcher.java index 58a1fd9aad..ea8914d8c8 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/NativePatcher.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/NativePatcher.java @@ -1,3 +1,20 @@ +/* + * Hello Minecraft! Launcher + * Copyright (C) 2024 huangyuhui and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ package org.jackhuang.hmcl.util; import com.google.gson.reflect.TypeToken; @@ -19,6 +36,9 @@ import static org.jackhuang.hmcl.util.logging.Logger.LOG; +/** + * @author Glavo + */ public final class NativePatcher { private NativePatcher() { } @@ -114,9 +134,10 @@ public static Version patchNative(Version version, String gameVersion, JavaVersi if (library.isNative()) { Library replacement = replacements.getOrDefault(library.getName() + ":natives", NONEXISTENT_LIBRARY); if (replacement == NONEXISTENT_LIBRARY) { - LOG.warning("No alternative native library " + library.getName() + " provided for platform " + javaVersion.getPlatform()); + LOG.warning("No alternative native library " + library.getName() + ":natives provided for platform " + javaVersion.getPlatform()); newLibraries.add(library); } else if (replacement != null) { + LOG.info("Replace " + library.getName() + ":natives with " + replacement.getName()); newLibraries.add(replacement); } } else { @@ -124,6 +145,7 @@ public static Version patchNative(Version version, String gameVersion, JavaVersi if (replacement == NONEXISTENT_LIBRARY) { newLibraries.add(library); } else if (replacement != null) { + LOG.info("Replace " + library.getName() + " with " + replacement.getName()); newLibraries.add(replacement); } } diff --git a/HMCL/src/main/resources/assets/natives.json b/HMCL/src/main/resources/assets/natives.json index ede49575d4..558d2bd3e2 100644 --- a/HMCL/src/main/resources/assets/natives.json +++ b/HMCL/src/main/resources/assets/natives.json @@ -154,6 +154,160 @@ } } }, + "org.lwjgl:lwjgl:3.2.1": { + "name": "org.lwjgl:lwjgl:3.3.2", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl/3.3.2/lwjgl-3.3.2.jar", + "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl/3.3.2/lwjgl-3.3.2.jar", + "sha1": "4421d94af68e35dcaa31737a6fc59136a1e61b94", + "size": 786196 + } + } + }, + "org.lwjgl:lwjgl:3.2.1:natives": { + "name": "org.lwjgl:lwjgl:3.3.2:natives-linux-arm64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl/3.3.2/lwjgl-3.3.2-natives-linux-arm64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.2/lwjgl-3.3.2-natives-linux-arm64.jar", + "sha1": "8bd89332c90a90e6bc4aa997a25c05b7db02c90a", + "size": 90795 + } + } + }, + "org.lwjgl:lwjgl-jemalloc:3.2.1": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.2", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-jemalloc/3.3.2/lwjgl-jemalloc-3.3.2.jar", + "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-jemalloc/3.3.2/lwjgl-jemalloc-3.3.2.jar", + "sha1": "877e17e39ebcd58a9c956dc3b5b777813de0873a", + "size": 43233 + } + } + }, + "org.lwjgl:lwjgl-jemalloc:3.2.1:natives": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.2:natives-linux-arm64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-jemalloc/3.3.2/lwjgl-jemalloc-3.3.2-natives-linux-arm64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.2/lwjgl-jemalloc-3.3.2-natives-linux-arm64.jar", + "sha1": "5249f18a9ae20ea86c5816bc3107a888ce7a17d2", + "size": 206402 + } + } + }, + "org.lwjgl:lwjgl-openal:3.2.1": { + "name": "org.lwjgl:lwjgl-openal:3.3.2", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-openal/3.3.2/lwjgl-openal-3.3.2.jar", + "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-openal/3.3.2/lwjgl-openal-3.3.2.jar", + "sha1": "ae5357ed6d934546d3533993ea84c0cfb75eed95", + "size": 108230 + } + } + }, + "org.lwjgl:lwjgl-openal:3.2.1:natives": { + "name": "org.lwjgl:lwjgl-openal:3.3.2:natives-linux-arm64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-openal/3.3.2/lwjgl-openal-3.3.2-natives-linux-arm64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.2/lwjgl-openal-3.3.2-natives-linux-arm64.jar", + "sha1": "22408980cc579709feaf9acb807992d3ebcf693f", + "size": 590865 + } + } + }, + "org.lwjgl:lwjgl-opengl:3.2.1": { + "name": "org.lwjgl:lwjgl-opengl:3.3.2", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-opengl/3.3.2/lwjgl-opengl-3.3.2.jar", + "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-opengl/3.3.2/lwjgl-opengl-3.3.2.jar", + "sha1": "ee8e95be0b438602038bc1f02dc5e3d011b1b216", + "size": 928871 + } + } + }, + "org.lwjgl:lwjgl-opengl:3.2.1:natives": { + "name": "org.lwjgl:lwjgl-opengl:3.3.2:natives-linux-arm64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-opengl/3.3.2/lwjgl-opengl-3.3.2-natives-linux-arm64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.2/lwjgl-opengl-3.3.2-natives-linux-arm64.jar", + "sha1": "bb9eb56da6d1d549d6a767218e675e36bc568eb9", + "size": 58627 + } + } + }, + "org.lwjgl:lwjgl-glfw:3.2.1": { + "name": "org.lwjgl:lwjgl-glfw:3.3.2", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-glfw/3.3.2/lwjgl-glfw-3.3.2.jar", + "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-glfw/3.3.2/lwjgl-glfw-3.3.2.jar", + "sha1": "757920418805fb90bfebb3d46b1d9e7669fca2eb", + "size": 135828 + } + } + }, + "org.lwjgl:lwjgl-glfw:3.2.1:natives": { + "name": "org.lwjgl:lwjgl-glfw:3.3.2:natives-linux-arm64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-glfw/3.3.2/lwjgl-glfw-3.3.2-natives-linux-arm64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.2/lwjgl-glfw-3.3.2-natives-linux-arm64.jar", + "sha1": "bc49e64bae0f7ff103a312ee8074a34c4eb034c7", + "size": 120168 + } + } + }, + "org.lwjgl:lwjgl-stb:3.2.1": { + "name": "org.lwjgl:lwjgl-stb:3.3.2", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-stb/3.3.2/lwjgl-stb-3.3.2.jar", + "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-stb/3.3.2/lwjgl-stb-3.3.2.jar", + "sha1": "a2550795014d622b686e9caac50b14baa87d2c70", + "size": 118874 + } + } + }, + "org.lwjgl:lwjgl-stb:3.2.1:natives": { + "name": "org.lwjgl:lwjgl-stb:3.3.2:natives-linux-arm64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-stb/3.3.2/lwjgl-stb-3.3.2-natives-linux-arm64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.2/lwjgl-stb-3.3.2-natives-linux-arm64.jar", + "sha1": "11a380c37b0f03cb46db235e064528f84d736ff7", + "size": 207419 + } + } + }, + "org.lwjgl:lwjgl-tinyfd:3.2.1": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.2", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-tinyfd/3.3.2/lwjgl-tinyfd-3.3.2.jar", + "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-tinyfd/3.3.2/lwjgl-tinyfd-3.3.2.jar", + "sha1": "9f65c248dd77934105274fcf8351abb75b34327c", + "size": 13404 + } + } + }, + "org.lwjgl:lwjgl-tinyfd:3.2.1:natives": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.2:natives-linux-arm64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-tinyfd/3.3.2/lwjgl-tinyfd-3.3.2-natives-linux-arm64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.2/lwjgl-tinyfd-3.3.2-natives-linux-arm64.jar", + "sha1": "93f8c5bc1984963cd79109891fb5a9d1e580373e", + "size": 43381 + } + } + }, "org.lwjgl:lwjgl:3.2.2": { "name": "org.lwjgl:lwjgl:3.3.2", "downloads": { @@ -851,7 +1005,7 @@ } } }, - "org.lwjgl:lwjgl:3.2.2": { + "org.lwjgl:lwjgl:3.2.1": { "name": "org.lwjgl:lwjgl:3.2.3", "downloads": { "artifact": { @@ -862,7 +1016,7 @@ } } }, - "org.lwjgl:lwjgl:3.2.2:natives": { + "org.lwjgl:lwjgl:3.2.1:natives": { "name": "org.lwjgl:lwjgl:3.2.3:natives-linux-arm32", "downloads": { "artifact": { @@ -873,7 +1027,7 @@ } } }, - "org.lwjgl:lwjgl-jemalloc:3.2.2": { + "org.lwjgl:lwjgl-jemalloc:3.2.1": { "name": "org.lwjgl:lwjgl-jemalloc:3.2.3", "downloads": { "artifact": { @@ -884,7 +1038,7 @@ } } }, - "org.lwjgl:lwjgl-jemalloc:3.2.2:natives": { + "org.lwjgl:lwjgl-jemalloc:3.2.1:natives": { "name": "org.lwjgl:lwjgl-jemalloc:3.2.3:natives-linux-arm32", "downloads": { "artifact": { @@ -895,7 +1049,7 @@ } } }, - "org.lwjgl:lwjgl-openal:3.2.2": { + "org.lwjgl:lwjgl-openal:3.2.1": { "name": "org.lwjgl:lwjgl-openal:3.2.3", "downloads": { "artifact": { @@ -906,7 +1060,7 @@ } } }, - "org.lwjgl:lwjgl-openal:3.2.2:natives": { + "org.lwjgl:lwjgl-openal:3.2.1:natives": { "name": "org.lwjgl:lwjgl-openal:3.2.3:natives-linux-arm32", "downloads": { "artifact": { @@ -917,7 +1071,7 @@ } } }, - "org.lwjgl:lwjgl-opengl:3.2.2": { + "org.lwjgl:lwjgl-opengl:3.2.1": { "name": "org.lwjgl:lwjgl-opengl:3.2.3", "downloads": { "artifact": { @@ -928,7 +1082,7 @@ } } }, - "org.lwjgl:lwjgl-opengl:3.2.2:natives": { + "org.lwjgl:lwjgl-opengl:3.2.1:natives": { "name": "org.lwjgl:lwjgl-opengl:3.2.3:natives-linux-arm32", "downloads": { "artifact": { @@ -939,7 +1093,7 @@ } } }, - "org.lwjgl:lwjgl-glfw:3.2.2": { + "org.lwjgl:lwjgl-glfw:3.2.1": { "name": "org.lwjgl:lwjgl-glfw:3.2.3", "downloads": { "artifact": { @@ -950,7 +1104,7 @@ } } }, - "org.lwjgl:lwjgl-glfw:3.2.2:natives": { + "org.lwjgl:lwjgl-glfw:3.2.1:natives": { "name": "org.lwjgl:lwjgl-glfw:3.2.3:natives-linux-arm32", "downloads": { "artifact": { @@ -961,7 +1115,7 @@ } } }, - "org.lwjgl:lwjgl-stb:3.2.2": { + "org.lwjgl:lwjgl-stb:3.2.1": { "name": "org.lwjgl:lwjgl-stb:3.2.3", "downloads": { "artifact": { @@ -972,7 +1126,7 @@ } } }, - "org.lwjgl:lwjgl-stb:3.2.2:natives": { + "org.lwjgl:lwjgl-stb:3.2.1:natives": { "name": "org.lwjgl:lwjgl-stb:3.2.3:natives-linux-arm32", "downloads": { "artifact": { @@ -983,7 +1137,7 @@ } } }, - "org.lwjgl:lwjgl-tinyfd:3.2.2": { + "org.lwjgl:lwjgl-tinyfd:3.2.1": { "name": "org.lwjgl:lwjgl-tinyfd:3.2.3", "downloads": { "artifact": { @@ -994,7 +1148,7 @@ } } }, - "org.lwjgl:lwjgl-tinyfd:3.2.2:natives": { + "org.lwjgl:lwjgl-tinyfd:3.2.1:natives": { "name": "org.lwjgl:lwjgl-tinyfd:3.2.3:natives-linux-arm32", "downloads": { "artifact": { @@ -1005,74 +1159,228 @@ } } }, - "org.lwjgl:lwjgl:3.3.1:natives-linux": { - "name": "org.lwjgl:lwjgl:3.3.1:natives-linux-arm32", + "org.lwjgl:lwjgl:3.2.2": { + "name": "org.lwjgl:lwjgl:3.2.3", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl/3.3.1/lwjgl-3.3.1-natives-linux-arm32.jar", - "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.1/lwjgl-3.3.1-natives-linux-arm32.jar", - "sha1": "41a3c1dd15d6b964eb8196dde69720a3e3e5e969", - "size": 82374 + "path": "org/lwjgl/lwjgl/3.2.3/lwjgl-3.2.3.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.2.3/lwjgl-3.2.3.jar", + "sha1": "17a59ba0fe8d474ec9dbe0d5db40d2cfe59c4c08", + "size": 552997 } } }, - "org.lwjgl:lwjgl-jemalloc:3.3.1:natives-linux": { - "name": "org.lwjgl:lwjgl-jemalloc:3.3.1:natives-linux-arm32", + "org.lwjgl:lwjgl:3.2.2:natives": { + "name": "org.lwjgl:lwjgl:3.2.3:natives-linux-arm32", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-jemalloc/3.3.1/lwjgl-jemalloc-3.3.1-natives-linux-arm32.jar", - "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.1/lwjgl-jemalloc-3.3.1-natives-linux-arm32.jar", - "sha1": "a96a6d6cb3876d7813fcee53c3c24f246aeba3b3", - "size": 136157 + "path": "org/lwjgl/lwjgl/3.2.3/lwjgl-3.2.3-natives-linux-arm32.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.2.3/lwjgl-3.2.3-natives-linux-arm32.jar", + "sha1": "3180d363040744dfe0c6a0dd5d018cedae476e9a", + "size": 53035 } } }, - "org.lwjgl:lwjgl-openal:3.3.1:natives-linux": { - "name": "org.lwjgl:lwjgl-openal:3.3.1:natives-linux-arm32", + "org.lwjgl:lwjgl-jemalloc:3.2.2": { + "name": "org.lwjgl:lwjgl-jemalloc:3.2.3", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-openal/3.3.1/lwjgl-openal-3.3.1-natives-linux-arm32.jar", - "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.1/lwjgl-openal-3.3.1-natives-linux-arm32.jar", - "sha1": "ffbe35d7fa5ec9b7eca136a7c71f24d4025a510b", - "size": 400129 + "path": "org/lwjgl/lwjgl-jemalloc/3.2.3/lwjgl-jemalloc-3.2.3.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.2.3/lwjgl-jemalloc-3.2.3.jar", + "sha1": "b6fd0932171ba3f2eaa4547beddca3a3e645342d", + "size": 34130 } } }, - "org.lwjgl:lwjgl-opengl:3.3.1:natives-linux": { - "name": "org.lwjgl:lwjgl-opengl:3.3.1:natives-linux-arm32", + "org.lwjgl:lwjgl-jemalloc:3.2.2:natives": { + "name": "org.lwjgl:lwjgl-jemalloc:3.2.3:natives-linux-arm32", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-opengl/3.3.1/lwjgl-opengl-3.3.1-natives-linux-arm32.jar", - "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.1/lwjgl-opengl-3.3.1-natives-linux-arm32.jar", - "sha1": "e3550fa91097fd56e361b4370fa822220fef3595", - "size": 58474 + "path": "org/lwjgl/lwjgl-jemalloc/3.2.3/lwjgl-jemalloc-3.2.3-natives-linux-arm32.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.2.3/lwjgl-jemalloc-3.2.3-natives-linux-arm32.jar", + "sha1": "d7e5cecbf045b7b7863343273ffea94e0e2f6994", + "size": 137847 } } }, - "org.lwjgl:lwjgl-glfw:3.3.1:natives-linux": { - "name": "org.lwjgl:lwjgl-glfw:3.3.1:natives-linux-arm32", + "org.lwjgl:lwjgl-openal:3.2.2": { + "name": "org.lwjgl:lwjgl-openal:3.2.3", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-glfw/3.3.1/lwjgl-glfw-3.3.1-natives-linux-arm32.jar", - "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.1/lwjgl-glfw-3.3.1-natives-linux-arm32.jar", - "sha1": "816d935933f2dd743074c4e717cc25b55720f294", - "size": 104027 + "path": "org/lwjgl/lwjgl-openal/3.2.3/lwjgl-openal-3.2.3.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.2.3/lwjgl-openal-3.2.3.jar", + "sha1": "106742e805803ab9eab8e343f0fb31a3d263903c", + "size": 79432 } } }, - "org.lwjgl:lwjgl-stb:3.3.1:natives-linux": { - "name": "org.lwjgl:lwjgl-stb:3.3.1:natives-linux-arm32", + "org.lwjgl:lwjgl-openal:3.2.2:natives": { + "name": "org.lwjgl:lwjgl-openal:3.2.3:natives-linux-arm32", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-stb/3.3.1/lwjgl-stb-3.3.1-natives-linux-arm32.jar", - "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.1/lwjgl-stb-3.3.1-natives-linux-arm32.jar", - "sha1": "b08226bab162c06ae69337d8a1b0ee0a3fdf0b90", - "size": 153889 + "path": "org/lwjgl/lwjgl-openal/3.2.3/lwjgl-openal-3.2.3-natives-linux-arm32.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.2.3/lwjgl-openal-3.2.3-natives-linux-arm32.jar", + "sha1": "5c30ef08c829252e542f9fbc04772d51013326c5", + "size": 552314 } } }, - "org.lwjgl:lwjgl-tinyfd:3.3.1:natives-linux": { - "name": "org.lwjgl:lwjgl-tinyfd:3.3.1:natives-linux-arm32", + "org.lwjgl:lwjgl-opengl:3.2.2": { + "name": "org.lwjgl:lwjgl-opengl:3.2.3", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-opengl/3.2.3/lwjgl-opengl-3.2.3.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.2.3/lwjgl-opengl-3.2.3.jar", + "sha1": "bdd534a323d0c8f54969b95e424b6ac8984f7d6e", + "size": 936589 + } + } + }, + "org.lwjgl:lwjgl-opengl:3.2.2:natives": { + "name": "org.lwjgl:lwjgl-opengl:3.2.3:natives-linux-arm32", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-opengl/3.2.3/lwjgl-opengl-3.2.3-natives-linux-arm32.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.2.3/lwjgl-opengl-3.2.3-natives-linux-arm32.jar", + "sha1": "4925362a5f2412cb6467e6d6c6de26b9e1ccfc71", + "size": 58594 + } + } + }, + "org.lwjgl:lwjgl-glfw:3.2.2": { + "name": "org.lwjgl:lwjgl-glfw:3.2.3", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-glfw/3.2.3/lwjgl-glfw-3.2.3.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.2.3/lwjgl-glfw-3.2.3.jar", + "sha1": "5e520d5c290c8b012545a8d34fa5db5ab051ea53", + "size": 107999 + } + } + }, + "org.lwjgl:lwjgl-glfw:3.2.2:natives": { + "name": "org.lwjgl:lwjgl-glfw:3.2.3:natives-linux-arm32", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-glfw/3.2.3/lwjgl-glfw-3.2.3-natives-linux-arm32.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.2.3/lwjgl-glfw-3.2.3-natives-linux-arm32.jar", + "sha1": "aab1a5a1e21eca87f4acd5ba055f6bfd5d90951c", + "size": 138698 + } + } + }, + "org.lwjgl:lwjgl-stb:3.2.2": { + "name": "org.lwjgl:lwjgl-stb:3.2.3", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-stb/3.2.3/lwjgl-stb-3.2.3.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.2.3/lwjgl-stb-3.2.3.jar", + "sha1": "40eccaa4fa86fc815f2e17946a392fb5fdcc286a", + "size": 104049 + } + } + }, + "org.lwjgl:lwjgl-stb:3.2.2:natives": { + "name": "org.lwjgl:lwjgl-stb:3.2.3:natives-linux-arm32", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-stb/3.2.3/lwjgl-stb-3.2.3-natives-linux-arm32.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.2.3/lwjgl-stb-3.2.3-natives-linux-arm32.jar", + "sha1": "f28dc1e73025cf699a2cdd4f6db7964ed357ce50", + "size": 146890 + } + } + }, + "org.lwjgl:lwjgl-tinyfd:3.2.2": { + "name": "org.lwjgl:lwjgl-tinyfd:3.2.3", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-tinyfd/3.2.3/lwjgl-tinyfd-3.2.3.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.2.3/lwjgl-tinyfd-3.2.3.jar", + "sha1": "d5edf89c7b6ca1ea20865a6ba0a09bfc5efb29c1", + "size": 6392 + } + } + }, + "org.lwjgl:lwjgl-tinyfd:3.2.2:natives": { + "name": "org.lwjgl:lwjgl-tinyfd:3.2.3:natives-linux-arm32", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-tinyfd/3.2.3/lwjgl-tinyfd-3.2.3-natives-linux-arm32.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.2.3/lwjgl-tinyfd-3.2.3-natives-linux-arm32.jar", + "sha1": "b3ad16cb0e4c1307bf3d1ecb29559e18a4f8633c", + "size": 38752 + } + } + }, + "org.lwjgl:lwjgl:3.3.1:natives-linux": { + "name": "org.lwjgl:lwjgl:3.3.1:natives-linux-arm32", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl/3.3.1/lwjgl-3.3.1-natives-linux-arm32.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.1/lwjgl-3.3.1-natives-linux-arm32.jar", + "sha1": "41a3c1dd15d6b964eb8196dde69720a3e3e5e969", + "size": 82374 + } + } + }, + "org.lwjgl:lwjgl-jemalloc:3.3.1:natives-linux": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.1:natives-linux-arm32", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-jemalloc/3.3.1/lwjgl-jemalloc-3.3.1-natives-linux-arm32.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.1/lwjgl-jemalloc-3.3.1-natives-linux-arm32.jar", + "sha1": "a96a6d6cb3876d7813fcee53c3c24f246aeba3b3", + "size": 136157 + } + } + }, + "org.lwjgl:lwjgl-openal:3.3.1:natives-linux": { + "name": "org.lwjgl:lwjgl-openal:3.3.1:natives-linux-arm32", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-openal/3.3.1/lwjgl-openal-3.3.1-natives-linux-arm32.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.1/lwjgl-openal-3.3.1-natives-linux-arm32.jar", + "sha1": "ffbe35d7fa5ec9b7eca136a7c71f24d4025a510b", + "size": 400129 + } + } + }, + "org.lwjgl:lwjgl-opengl:3.3.1:natives-linux": { + "name": "org.lwjgl:lwjgl-opengl:3.3.1:natives-linux-arm32", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-opengl/3.3.1/lwjgl-opengl-3.3.1-natives-linux-arm32.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.1/lwjgl-opengl-3.3.1-natives-linux-arm32.jar", + "sha1": "e3550fa91097fd56e361b4370fa822220fef3595", + "size": 58474 + } + } + }, + "org.lwjgl:lwjgl-glfw:3.3.1:natives-linux": { + "name": "org.lwjgl:lwjgl-glfw:3.3.1:natives-linux-arm32", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-glfw/3.3.1/lwjgl-glfw-3.3.1-natives-linux-arm32.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.1/lwjgl-glfw-3.3.1-natives-linux-arm32.jar", + "sha1": "816d935933f2dd743074c4e717cc25b55720f294", + "size": 104027 + } + } + }, + "org.lwjgl:lwjgl-stb:3.3.1:natives-linux": { + "name": "org.lwjgl:lwjgl-stb:3.3.1:natives-linux-arm32", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-stb/3.3.1/lwjgl-stb-3.3.1-natives-linux-arm32.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.1/lwjgl-stb-3.3.1-natives-linux-arm32.jar", + "sha1": "b08226bab162c06ae69337d8a1b0ee0a3fdf0b90", + "size": 153889 + } + } + }, + "org.lwjgl:lwjgl-tinyfd:3.3.1:natives-linux": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.1:natives-linux-arm32", "downloads": { "artifact": { "path": "org/lwjgl/lwjgl-tinyfd/3.3.1/lwjgl-tinyfd-3.3.1-natives-linux-arm32.jar", @@ -1319,6 +1627,104 @@ } }, "org.lwjgl:lwjgl-tinyfd:3.1.6:natives": null, + "org.lwjgl:lwjgl:3.2.1": { + "name": "org.lwjgl:lwjgl:3.3.1", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl/3.3.1/lwjgl-3.3.1.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.1/lwjgl-3.3.1.jar", + "sha1": "ae58664f88e18a9bb2c77b063833ca7aaec484cb", + "size": 724243 + } + } + }, + "org.lwjgl:lwjgl:3.2.1:natives": { + "name": "org.glavo.hmcl:lwjgl3-natives:3.3.1-rc2", + "downloads": { + "classifiers": { + "linux-mips64el": { + "path": "org/glavo/hmcl/lwjgl3-natives/3.3.1-rc2/lwjgl3-natives-3.3.1-rc2-linux-mips64el.jar", + "url": "https://repo1.maven.org/maven2/org/glavo/hmcl/lwjgl3-natives/3.3.1-rc2-linux-mips64el/lwjgl3-natives-3.3.1-rc2-linux-mips64el.jar", + "sha1": "babec61846d8feb7a60cce1c9909281b1a3e0640", + "size": 2464146 + } + } + }, + "extract": { + "exclude": [ + "META-INF/" + ] + }, + "natives": { + "linux": "linux-mips64el" + } + }, + "org.lwjgl:lwjgl-jemalloc:3.2.1": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.1", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-jemalloc/3.3.1/lwjgl-jemalloc-3.3.1.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.1/lwjgl-jemalloc-3.3.1.jar", + "sha1": "a817bcf213db49f710603677457567c37d53e103", + "size": 36601 + } + } + }, + "org.lwjgl:lwjgl-openal:3.2.1": { + "name": "org.lwjgl:lwjgl-openal:3.3.1", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-openal/3.3.1/lwjgl-openal-3.3.1.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.1/lwjgl-openal-3.3.1.jar", + "sha1": "2623a6b8ae1dfcd880738656a9f0243d2e6840bd", + "size": 88237 + } + } + }, + "org.lwjgl:lwjgl-opengl:3.2.1": { + "name": "org.lwjgl:lwjgl-opengl:3.3.1", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-opengl/3.3.1/lwjgl-opengl-3.3.1.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.1/lwjgl-opengl-3.3.1.jar", + "sha1": "831a5533a21a5f4f81bbc51bb13e9899319b5411", + "size": 921563 + } + } + }, + "org.lwjgl:lwjgl-glfw:3.2.1": { + "name": "org.lwjgl:lwjgl-glfw:3.3.1", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-glfw/3.3.1/lwjgl-glfw-3.3.1.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.1/lwjgl-glfw-3.3.1.jar", + "sha1": "cbac1b8d30cb4795149c1ef540f912671a8616d0", + "size": 128801 + } + } + }, + "org.lwjgl:lwjgl-stb:3.2.1": { + "name": "org.lwjgl:lwjgl-stb:3.3.1", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-stb/3.3.1/lwjgl-stb-3.3.1.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.1/lwjgl-stb-3.3.1.jar", + "sha1": "b119297cf8ed01f247abe8685857f8e7fcf5980f", + "size": 112380 + } + } + }, + "org.lwjgl:lwjgl-tinyfd:3.2.1": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.1", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-tinyfd/3.3.1/lwjgl-tinyfd-3.3.1.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.1/lwjgl-tinyfd-3.3.1.jar", + "sha1": "0ff1914111ef2e3e0110ef2dabc8d8cdaad82347", + "size": 6767 + } + } + }, "org.lwjgl:lwjgl:3.2.2": { "name": "org.lwjgl:lwjgl:3.3.1", "downloads": { @@ -1624,7 +2030,111 @@ } }, "org.lwjgl:lwjgl-tinyfd:3.1.6:natives": null, - "org.lwjgl:lwjgl:3.2.2": { + "org.lwjgl:lwjgl:3.2.1": { + "name": "org.lwjgl:lwjgl:3.3.1", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl/3.3.1/lwjgl-3.3.1.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.1/lwjgl-3.3.1.jar", + "sha1": "ae58664f88e18a9bb2c77b063833ca7aaec484cb", + "size": 724243 + } + } + }, + "org.lwjgl:lwjgl:3.2.1:natives": { + "name": "org.glavo.hmcl:lwjgl3-natives:3.3.1-rc1", + "downloads": { + "classifiers": { + "linux-loongarch64": { + "path": "org/glavo/hmcl/lwjgl3-natives/3.3.1-rc1/lwjgl3-natives-3.3.1-rc1-linux-loongarch64.jar", + "url": "https://repo1.maven.org/maven2/org/glavo/hmcl/lwjgl3-natives/3.3.1-rc1-linux-loongarch64/lwjgl3-natives-3.3.1-rc1-linux-loongarch64.jar", + "sha1": "2375ec8e8094a765ef61f3c4f2f832b1b8dfed4b", + "size": 2651163 + } + } + }, + "extract": { + "exclude": [ + "META-INF/" + ] + }, + "natives": { + "linux": "linux-loongarch64" + } + }, + "org.lwjgl:lwjgl-jemalloc:3.2.1": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.1", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-jemalloc/3.3.1/lwjgl-jemalloc-3.3.1.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.1/lwjgl-jemalloc-3.3.1.jar", + "sha1": "a817bcf213db49f710603677457567c37d53e103", + "size": 36601 + } + } + }, + "org.lwjgl:lwjgl-jemalloc:3.2.1:natives": null, + "org.lwjgl:lwjgl-openal:3.2.1": { + "name": "org.lwjgl:lwjgl-openal:3.3.1", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-openal/3.3.1/lwjgl-openal-3.3.1.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.1/lwjgl-openal-3.3.1.jar", + "sha1": "2623a6b8ae1dfcd880738656a9f0243d2e6840bd", + "size": 88237 + } + } + }, + "org.lwjgl:lwjgl-openal:3.2.1:natives": null, + "org.lwjgl:lwjgl-opengl:3.2.1": { + "name": "org.lwjgl:lwjgl-opengl:3.3.1", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-opengl/3.3.1/lwjgl-opengl-3.3.1.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.1/lwjgl-opengl-3.3.1.jar", + "sha1": "831a5533a21a5f4f81bbc51bb13e9899319b5411", + "size": 921563 + } + } + }, + "org.lwjgl:lwjgl-opengl:3.2.1:natives": null, + "org.lwjgl:lwjgl-glfw:3.2.1": { + "name": "org.lwjgl:lwjgl-glfw:3.3.1", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-glfw/3.3.1/lwjgl-glfw-3.3.1.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.1/lwjgl-glfw-3.3.1.jar", + "sha1": "cbac1b8d30cb4795149c1ef540f912671a8616d0", + "size": 128801 + } + } + }, + "org.lwjgl:lwjgl-glfw:3.2.1:natives": null, + "org.lwjgl:lwjgl-stb:3.2.1": { + "name": "org.lwjgl:lwjgl-stb:3.3.1", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-stb/3.3.1/lwjgl-stb-3.3.1.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.1/lwjgl-stb-3.3.1.jar", + "sha1": "b119297cf8ed01f247abe8685857f8e7fcf5980f", + "size": 112380 + } + } + }, + "org.lwjgl:lwjgl-stb:3.2.1:natives": null, + "org.lwjgl:lwjgl-tinyfd:3.2.1": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.1", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-tinyfd/3.3.1/lwjgl-tinyfd-3.3.1.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.1/lwjgl-tinyfd-3.3.1.jar", + "sha1": "0ff1914111ef2e3e0110ef2dabc8d8cdaad82347", + "size": 6767 + } + } + }, + "org.lwjgl:lwjgl-tinyfd:3.2.1:natives": null, + "org.lwjgl:lwjgl:3.2.2": { "name": "org.lwjgl:lwjgl:3.3.1", "downloads": { "artifact": { @@ -1995,6 +2505,110 @@ } }, "org.lwjgl:lwjgl-tinyfd:3.1.6:natives": null, + "org.lwjgl:lwjgl:3.2.1": { + "name": "org.lwjgl:lwjgl:3.3.1", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl/3.3.1/lwjgl-3.3.1.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.1/lwjgl-3.3.1.jar", + "sha1": "ae58664f88e18a9bb2c77b063833ca7aaec484cb", + "size": 724243 + } + } + }, + "org.lwjgl:lwjgl:3.2.1:natives": { + "name": "org.glavo.hmcl:lwjgl3-natives:3.3.1-rc1", + "downloads": { + "classifiers": { + "linux-loongarch64_ow": { + "path": "org/glavo/hmcl/lwjgl3-natives/3.3.1-rc1/lwjgl3-natives-3.3.1-rc1-linux-loongarch64_ow.jar", + "url": "https://repo1.maven.org/maven2/org/glavo/hmcl/lwjgl3-natives/3.3.1-rc1-linux-loongarch64_ow/lwjgl3-natives-3.3.1-rc1-linux-loongarch64_ow.jar", + "sha1": "4c7d6978dae411e5041f478d78cc329c4c75fc73", + "size": 2311861 + } + } + }, + "extract": { + "exclude": [ + "META-INF/" + ] + }, + "natives": { + "linux": "linux-loongarch64_ow" + } + }, + "org.lwjgl:lwjgl-jemalloc:3.2.1": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.1", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-jemalloc/3.3.1/lwjgl-jemalloc-3.3.1.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.1/lwjgl-jemalloc-3.3.1.jar", + "sha1": "a817bcf213db49f710603677457567c37d53e103", + "size": 36601 + } + } + }, + "org.lwjgl:lwjgl-jemalloc:3.2.1:natives": null, + "org.lwjgl:lwjgl-openal:3.2.1": { + "name": "org.lwjgl:lwjgl-openal:3.3.1", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-openal/3.3.1/lwjgl-openal-3.3.1.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.1/lwjgl-openal-3.3.1.jar", + "sha1": "2623a6b8ae1dfcd880738656a9f0243d2e6840bd", + "size": 88237 + } + } + }, + "org.lwjgl:lwjgl-openal:3.2.1:natives": null, + "org.lwjgl:lwjgl-opengl:3.2.1": { + "name": "org.lwjgl:lwjgl-opengl:3.3.1", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-opengl/3.3.1/lwjgl-opengl-3.3.1.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.1/lwjgl-opengl-3.3.1.jar", + "sha1": "831a5533a21a5f4f81bbc51bb13e9899319b5411", + "size": 921563 + } + } + }, + "org.lwjgl:lwjgl-opengl:3.2.1:natives": null, + "org.lwjgl:lwjgl-glfw:3.2.1": { + "name": "org.lwjgl:lwjgl-glfw:3.3.1", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-glfw/3.3.1/lwjgl-glfw-3.3.1.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.1/lwjgl-glfw-3.3.1.jar", + "sha1": "cbac1b8d30cb4795149c1ef540f912671a8616d0", + "size": 128801 + } + } + }, + "org.lwjgl:lwjgl-glfw:3.2.1:natives": null, + "org.lwjgl:lwjgl-stb:3.2.1": { + "name": "org.lwjgl:lwjgl-stb:3.3.1", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-stb/3.3.1/lwjgl-stb-3.3.1.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.1/lwjgl-stb-3.3.1.jar", + "sha1": "b119297cf8ed01f247abe8685857f8e7fcf5980f", + "size": 112380 + } + } + }, + "org.lwjgl:lwjgl-stb:3.2.1:natives": null, + "org.lwjgl:lwjgl-tinyfd:3.2.1": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.1", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-tinyfd/3.3.1/lwjgl-tinyfd-3.3.1.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.1/lwjgl-tinyfd-3.3.1.jar", + "sha1": "0ff1914111ef2e3e0110ef2dabc8d8cdaad82347", + "size": 6767 + } + } + }, + "org.lwjgl:lwjgl-tinyfd:3.2.1:natives": null, "org.lwjgl:lwjgl:3.2.2": { "name": "org.lwjgl:lwjgl:3.3.1", "downloads": { @@ -2200,391 +2814,948 @@ }, "linux-riscv64": { "org.lwjgl:lwjgl:3.1.6": { - "name": "org.lwjgl:lwjgl:3.3.1", + "name": "org.lwjgl:lwjgl:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl/3.3.1/lwjgl-3.3.1.jar", - "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.1/lwjgl-3.3.1.jar", - "sha1": "ae58664f88e18a9bb2c77b063833ca7aaec484cb", - "size": 724243 + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "sha1": "b86c3e4832426e8a6b466013b7cb34b40e9ce956", + "size": 800127 } } }, "org.lwjgl:lwjgl:3.1.6:natives": { - "name": "org.glavo.hmcl:lwjgl3-natives:3.3.1-rc1", + "name": "org.lwjgl:lwjgl:3.3.4:natives-linux-riscv64", "downloads": { - "classifiers": { - "linux-riscv64": { - "path": "org/glavo/hmcl/lwjgl3-natives/3.3.1-rc1/lwjgl3-natives-3.3.1-rc1-linux-riscv64.jar", - "url": "https://repo1.maven.org/maven2/org/glavo/hmcl/lwjgl3-natives/3.3.1-rc1-linux-riscv64/lwjgl3-natives-3.3.1-rc1-linux-riscv64.jar", - "sha1": "8544853aa77b10692548b2a728cd890afd740ba5", - "size": 11905844 - } + "artifact": { + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-linux-riscv64.jar", + "sha1": "3ce36a5c5e6feb61bad2ea1426352482e04c6db1", + "size": 80164 + } + } + }, + "org.lwjgl:lwjgl-jemalloc:3.1.6": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "sha1": "e3f5dcb8e13f3a5ed3f740fd30a114cee2a80bc4", + "size": 46430 + } + } + }, + "org.lwjgl:lwjgl-jemalloc:3.1.6:natives": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-linux-riscv64.jar", + "sha1": "6c5d38aad1dbd1c4945bcbe86640e616ceb9588f", + "size": 197209 + } + } + }, + "org.lwjgl:lwjgl-openal:3.1.6": { + "name": "org.lwjgl:lwjgl-openal:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "sha1": "9b74d3ea380c83353d42af43ad9659e04dabe84a", + "size": 113103 + } + } + }, + "org.lwjgl:lwjgl-openal:3.1.6:natives": { + "name": "org.lwjgl:lwjgl-openal:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-linux-riscv64.jar", + "sha1": "74c5ddf47ad6bee41348bbb0735008694b5315af", + "size": 516661 + } + } + }, + "org.lwjgl:lwjgl-opengl:3.1.6": { + "name": "org.lwjgl:lwjgl-opengl:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "sha1": "2852ac7d9f6fc71349f1ce28e2708ff1977f18af", + "size": 931960 + } + } + }, + "org.lwjgl:lwjgl-opengl:3.1.6:natives": { + "name": "org.lwjgl:lwjgl-opengl:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-linux-riscv64.jar", + "sha1": "6ea07b47dd91af8f3ee4a24ddb3cbf086d157a4e", + "size": 57864 + } + } + }, + "org.lwjgl:lwjgl-glfw:3.1.6": { + "name": "org.lwjgl:lwjgl-glfw:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "sha1": "7e46ecdec85db8738053cfde1414352cd62dab74", + "size": 147044 + } + } + }, + "org.lwjgl:lwjgl-glfw:3.1.6:natives": { + "name": "org.lwjgl:lwjgl-glfw:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-linux-riscv64.jar", + "sha1": "9582481036b6fb762c3f791e2ed26128152a1cec", + "size": 117084 + } + } + }, + "org.lwjgl:lwjgl-stb:3.1.6": { + "name": "org.lwjgl:lwjgl-stb:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "sha1": "5821735d5ef23f6da8542887344e57eb181b7cac", + "size": 143112 + } + } + }, + "org.lwjgl:lwjgl-stb:3.1.6:natives": { + "name": "org.lwjgl:lwjgl-stb:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-linux-riscv64.jar", + "sha1": "502804ee61eb7adb30bbb5e4459899f9a0cb23cf", + "size": 215885 + } + } + }, + "org.lwjgl:lwjgl-tinyfd:3.1.6": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "sha1": "2d73789ffd8962b38d9d599cc38b2383ce818c7a", + "size": 15928 + } + } + }, + "org.lwjgl:lwjgl-tinyfd:3.1.6:natives": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-linux-riscv64.jar", + "sha1": "8bec171d3fa4ec3cfc20b4ddd675cb08935bd5f8", + "size": 46550 + } + } + }, + "org.lwjgl:lwjgl:3.2.1": { + "name": "org.lwjgl:lwjgl:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "sha1": "b86c3e4832426e8a6b466013b7cb34b40e9ce956", + "size": 800127 + } + } + }, + "org.lwjgl:lwjgl:3.2.1:natives": { + "name": "org.lwjgl:lwjgl:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-linux-riscv64.jar", + "sha1": "3ce36a5c5e6feb61bad2ea1426352482e04c6db1", + "size": 80164 + } + } + }, + "org.lwjgl:lwjgl-jemalloc:3.2.1": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "sha1": "e3f5dcb8e13f3a5ed3f740fd30a114cee2a80bc4", + "size": 46430 + } + } + }, + "org.lwjgl:lwjgl-jemalloc:3.2.1:natives": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-linux-riscv64.jar", + "sha1": "6c5d38aad1dbd1c4945bcbe86640e616ceb9588f", + "size": 197209 + } + } + }, + "org.lwjgl:lwjgl-openal:3.2.1": { + "name": "org.lwjgl:lwjgl-openal:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "sha1": "9b74d3ea380c83353d42af43ad9659e04dabe84a", + "size": 113103 + } + } + }, + "org.lwjgl:lwjgl-openal:3.2.1:natives": { + "name": "org.lwjgl:lwjgl-openal:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-linux-riscv64.jar", + "sha1": "74c5ddf47ad6bee41348bbb0735008694b5315af", + "size": 516661 + } + } + }, + "org.lwjgl:lwjgl-opengl:3.2.1": { + "name": "org.lwjgl:lwjgl-opengl:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "sha1": "2852ac7d9f6fc71349f1ce28e2708ff1977f18af", + "size": 931960 + } + } + }, + "org.lwjgl:lwjgl-opengl:3.2.1:natives": { + "name": "org.lwjgl:lwjgl-opengl:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-linux-riscv64.jar", + "sha1": "6ea07b47dd91af8f3ee4a24ddb3cbf086d157a4e", + "size": 57864 + } + } + }, + "org.lwjgl:lwjgl-glfw:3.2.1": { + "name": "org.lwjgl:lwjgl-glfw:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "sha1": "7e46ecdec85db8738053cfde1414352cd62dab74", + "size": 147044 + } + } + }, + "org.lwjgl:lwjgl-glfw:3.2.1:natives": { + "name": "org.lwjgl:lwjgl-glfw:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-linux-riscv64.jar", + "sha1": "9582481036b6fb762c3f791e2ed26128152a1cec", + "size": 117084 + } + } + }, + "org.lwjgl:lwjgl-stb:3.2.1": { + "name": "org.lwjgl:lwjgl-stb:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "sha1": "5821735d5ef23f6da8542887344e57eb181b7cac", + "size": 143112 + } + } + }, + "org.lwjgl:lwjgl-stb:3.2.1:natives": { + "name": "org.lwjgl:lwjgl-stb:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-linux-riscv64.jar", + "sha1": "502804ee61eb7adb30bbb5e4459899f9a0cb23cf", + "size": 215885 + } + } + }, + "org.lwjgl:lwjgl-tinyfd:3.2.1": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "sha1": "2d73789ffd8962b38d9d599cc38b2383ce818c7a", + "size": 15928 + } + } + }, + "org.lwjgl:lwjgl-tinyfd:3.2.1:natives": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-linux-riscv64.jar", + "sha1": "8bec171d3fa4ec3cfc20b4ddd675cb08935bd5f8", + "size": 46550 + } + } + }, + "org.lwjgl:lwjgl:3.2.2": { + "name": "org.lwjgl:lwjgl:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "sha1": "b86c3e4832426e8a6b466013b7cb34b40e9ce956", + "size": 800127 + } + } + }, + "org.lwjgl:lwjgl:3.2.2:natives": { + "name": "org.lwjgl:lwjgl:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-linux-riscv64.jar", + "sha1": "3ce36a5c5e6feb61bad2ea1426352482e04c6db1", + "size": 80164 + } + } + }, + "org.lwjgl:lwjgl-jemalloc:3.2.2": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "sha1": "e3f5dcb8e13f3a5ed3f740fd30a114cee2a80bc4", + "size": 46430 + } + } + }, + "org.lwjgl:lwjgl-jemalloc:3.2.2:natives": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-linux-riscv64.jar", + "sha1": "6c5d38aad1dbd1c4945bcbe86640e616ceb9588f", + "size": 197209 + } + } + }, + "org.lwjgl:lwjgl-openal:3.2.2": { + "name": "org.lwjgl:lwjgl-openal:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "sha1": "9b74d3ea380c83353d42af43ad9659e04dabe84a", + "size": 113103 + } + } + }, + "org.lwjgl:lwjgl-openal:3.2.2:natives": { + "name": "org.lwjgl:lwjgl-openal:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-linux-riscv64.jar", + "sha1": "74c5ddf47ad6bee41348bbb0735008694b5315af", + "size": 516661 + } + } + }, + "org.lwjgl:lwjgl-opengl:3.2.2": { + "name": "org.lwjgl:lwjgl-opengl:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "sha1": "2852ac7d9f6fc71349f1ce28e2708ff1977f18af", + "size": 931960 + } + } + }, + "org.lwjgl:lwjgl-opengl:3.2.2:natives": { + "name": "org.lwjgl:lwjgl-opengl:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-linux-riscv64.jar", + "sha1": "6ea07b47dd91af8f3ee4a24ddb3cbf086d157a4e", + "size": 57864 + } + } + }, + "org.lwjgl:lwjgl-glfw:3.2.2": { + "name": "org.lwjgl:lwjgl-glfw:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "sha1": "7e46ecdec85db8738053cfde1414352cd62dab74", + "size": 147044 + } + } + }, + "org.lwjgl:lwjgl-glfw:3.2.2:natives": { + "name": "org.lwjgl:lwjgl-glfw:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-linux-riscv64.jar", + "sha1": "9582481036b6fb762c3f791e2ed26128152a1cec", + "size": 117084 + } + } + }, + "org.lwjgl:lwjgl-stb:3.2.2": { + "name": "org.lwjgl:lwjgl-stb:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "sha1": "5821735d5ef23f6da8542887344e57eb181b7cac", + "size": 143112 + } + } + }, + "org.lwjgl:lwjgl-stb:3.2.2:natives": { + "name": "org.lwjgl:lwjgl-stb:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-linux-riscv64.jar", + "sha1": "502804ee61eb7adb30bbb5e4459899f9a0cb23cf", + "size": 215885 + } + } + }, + "org.lwjgl:lwjgl-tinyfd:3.2.2": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "sha1": "2d73789ffd8962b38d9d599cc38b2383ce818c7a", + "size": 15928 + } + } + }, + "org.lwjgl:lwjgl-tinyfd:3.2.2:natives": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-linux-riscv64.jar", + "sha1": "8bec171d3fa4ec3cfc20b4ddd675cb08935bd5f8", + "size": 46550 + } + } + }, + "org.lwjgl:lwjgl:3.3.1": { + "name": "org.lwjgl:lwjgl:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "sha1": "b86c3e4832426e8a6b466013b7cb34b40e9ce956", + "size": 800127 + } + } + }, + "org.lwjgl:lwjgl:3.3.1:natives-linux": { + "name": "org.lwjgl:lwjgl:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-linux-riscv64.jar", + "sha1": "3ce36a5c5e6feb61bad2ea1426352482e04c6db1", + "size": 80164 + } + } + }, + "org.lwjgl:lwjgl-jemalloc:3.3.1": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "sha1": "e3f5dcb8e13f3a5ed3f740fd30a114cee2a80bc4", + "size": 46430 + } + } + }, + "org.lwjgl:lwjgl-jemalloc:3.3.1:natives-linux": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-linux-riscv64.jar", + "sha1": "6c5d38aad1dbd1c4945bcbe86640e616ceb9588f", + "size": 197209 + } + } + }, + "org.lwjgl:lwjgl-openal:3.3.1": { + "name": "org.lwjgl:lwjgl-openal:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "sha1": "9b74d3ea380c83353d42af43ad9659e04dabe84a", + "size": 113103 + } + } + }, + "org.lwjgl:lwjgl-openal:3.3.1:natives-linux": { + "name": "org.lwjgl:lwjgl-openal:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-linux-riscv64.jar", + "sha1": "74c5ddf47ad6bee41348bbb0735008694b5315af", + "size": 516661 + } + } + }, + "org.lwjgl:lwjgl-opengl:3.3.1": { + "name": "org.lwjgl:lwjgl-opengl:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "sha1": "2852ac7d9f6fc71349f1ce28e2708ff1977f18af", + "size": 931960 + } + } + }, + "org.lwjgl:lwjgl-opengl:3.3.1:natives-linux": { + "name": "org.lwjgl:lwjgl-opengl:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-linux-riscv64.jar", + "sha1": "6ea07b47dd91af8f3ee4a24ddb3cbf086d157a4e", + "size": 57864 + } + } + }, + "org.lwjgl:lwjgl-glfw:3.3.1": { + "name": "org.lwjgl:lwjgl-glfw:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "sha1": "7e46ecdec85db8738053cfde1414352cd62dab74", + "size": 147044 + } + } + }, + "org.lwjgl:lwjgl-glfw:3.3.1:natives-linux": { + "name": "org.lwjgl:lwjgl-glfw:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-linux-riscv64.jar", + "sha1": "9582481036b6fb762c3f791e2ed26128152a1cec", + "size": 117084 + } + } + }, + "org.lwjgl:lwjgl-stb:3.3.1": { + "name": "org.lwjgl:lwjgl-stb:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "sha1": "5821735d5ef23f6da8542887344e57eb181b7cac", + "size": 143112 + } + } + }, + "org.lwjgl:lwjgl-stb:3.3.1:natives-linux": { + "name": "org.lwjgl:lwjgl-stb:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-linux-riscv64.jar", + "sha1": "502804ee61eb7adb30bbb5e4459899f9a0cb23cf", + "size": 215885 + } + } + }, + "org.lwjgl:lwjgl-tinyfd:3.3.1": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "sha1": "2d73789ffd8962b38d9d599cc38b2383ce818c7a", + "size": 15928 + } + } + }, + "org.lwjgl:lwjgl-tinyfd:3.3.1:natives-linux": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4:natives-linux-riscv64", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-linux-riscv64.jar", + "sha1": "8bec171d3fa4ec3cfc20b4ddd675cb08935bd5f8", + "size": 46550 + } + } + }, + "org.lwjgl:lwjgl:3.3.2": { + "name": "org.lwjgl:lwjgl:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "sha1": "b86c3e4832426e8a6b466013b7cb34b40e9ce956", + "size": 800127 } - }, - "extract": { - "exclude": [ - "META-INF/" - ] - }, - "natives": { - "linux": "linux-riscv64" } }, - "org.lwjgl:lwjgl-jemalloc:3.1.6": { - "name": "org.lwjgl:lwjgl-jemalloc:3.3.1", + "org.lwjgl:lwjgl:3.3.2:natives-linux": { + "name": "org.lwjgl:lwjgl:3.3.4:natives-linux-riscv64", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-jemalloc/3.3.1/lwjgl-jemalloc-3.3.1.jar", - "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.1/lwjgl-jemalloc-3.3.1.jar", - "sha1": "a817bcf213db49f710603677457567c37d53e103", - "size": 36601 + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-linux-riscv64.jar", + "sha1": "3ce36a5c5e6feb61bad2ea1426352482e04c6db1", + "size": 80164 } } }, - "org.lwjgl:lwjgl-jemalloc:3.1.6:natives": null, - "org.lwjgl:lwjgl-openal:3.1.6": { - "name": "org.lwjgl:lwjgl-openal:3.3.1", + "org.lwjgl:lwjgl-jemalloc:3.3.2": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-openal/3.3.1/lwjgl-openal-3.3.1.jar", - "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.1/lwjgl-openal-3.3.1.jar", - "sha1": "2623a6b8ae1dfcd880738656a9f0243d2e6840bd", - "size": 88237 + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "sha1": "e3f5dcb8e13f3a5ed3f740fd30a114cee2a80bc4", + "size": 46430 } } }, - "org.lwjgl:lwjgl-openal:3.1.6:natives": null, - "org.lwjgl:lwjgl-opengl:3.1.6": { - "name": "org.lwjgl:lwjgl-opengl:3.3.1", + "org.lwjgl:lwjgl-jemalloc:3.3.2:natives-linux": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4:natives-linux-riscv64", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-opengl/3.3.1/lwjgl-opengl-3.3.1.jar", - "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.1/lwjgl-opengl-3.3.1.jar", - "sha1": "831a5533a21a5f4f81bbc51bb13e9899319b5411", - "size": 921563 + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-linux-riscv64.jar", + "sha1": "6c5d38aad1dbd1c4945bcbe86640e616ceb9588f", + "size": 197209 } } }, - "org.lwjgl:lwjgl-opengl:3.1.6:natives": null, - "org.lwjgl:lwjgl-glfw:3.1.6": { - "name": "org.lwjgl:lwjgl-glfw:3.3.1", + "org.lwjgl:lwjgl-openal:3.3.2": { + "name": "org.lwjgl:lwjgl-openal:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-glfw/3.3.1/lwjgl-glfw-3.3.1.jar", - "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.1/lwjgl-glfw-3.3.1.jar", - "sha1": "cbac1b8d30cb4795149c1ef540f912671a8616d0", - "size": 128801 + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "sha1": "9b74d3ea380c83353d42af43ad9659e04dabe84a", + "size": 113103 } } }, - "org.lwjgl:lwjgl-glfw:3.1.6:natives": null, - "org.lwjgl:lwjgl-stb:3.1.6": { - "name": "org.lwjgl:lwjgl-stb:3.3.1", + "org.lwjgl:lwjgl-openal:3.3.2:natives-linux": { + "name": "org.lwjgl:lwjgl-openal:3.3.4:natives-linux-riscv64", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-stb/3.3.1/lwjgl-stb-3.3.1.jar", - "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.1/lwjgl-stb-3.3.1.jar", - "sha1": "b119297cf8ed01f247abe8685857f8e7fcf5980f", - "size": 112380 + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-linux-riscv64.jar", + "sha1": "74c5ddf47ad6bee41348bbb0735008694b5315af", + "size": 516661 } } }, - "org.lwjgl:lwjgl-stb:3.1.6:natives": null, - "org.lwjgl:lwjgl-tinyfd:3.1.6": { - "name": "org.lwjgl:lwjgl-tinyfd:3.3.1", + "org.lwjgl:lwjgl-opengl:3.3.2": { + "name": "org.lwjgl:lwjgl-opengl:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-tinyfd/3.3.1/lwjgl-tinyfd-3.3.1.jar", - "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.1/lwjgl-tinyfd-3.3.1.jar", - "sha1": "0ff1914111ef2e3e0110ef2dabc8d8cdaad82347", - "size": 6767 + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "sha1": "2852ac7d9f6fc71349f1ce28e2708ff1977f18af", + "size": 931960 } } }, - "org.lwjgl:lwjgl-tinyfd:3.1.6:natives": null, - "org.lwjgl:lwjgl:3.2.2": { - "name": "org.lwjgl:lwjgl:3.3.1", + "org.lwjgl:lwjgl-opengl:3.3.2:natives-linux": { + "name": "org.lwjgl:lwjgl-opengl:3.3.4:natives-linux-riscv64", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl/3.3.1/lwjgl-3.3.1.jar", - "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.1/lwjgl-3.3.1.jar", - "sha1": "ae58664f88e18a9bb2c77b063833ca7aaec484cb", - "size": 724243 + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-linux-riscv64.jar", + "sha1": "6ea07b47dd91af8f3ee4a24ddb3cbf086d157a4e", + "size": 57864 } } }, - "org.lwjgl:lwjgl:3.2.2:natives": { - "name": "org.glavo.hmcl:lwjgl3-natives:3.3.1-rc1", + "org.lwjgl:lwjgl-glfw:3.3.2": { + "name": "org.lwjgl:lwjgl-glfw:3.3.4", "downloads": { - "classifiers": { - "linux-riscv64": { - "path": "org/glavo/hmcl/lwjgl3-natives/3.3.1-rc1/lwjgl3-natives-3.3.1-rc1-linux-riscv64.jar", - "url": "https://repo1.maven.org/maven2/org/glavo/hmcl/lwjgl3-natives/3.3.1-rc1-linux-riscv64/lwjgl3-natives-3.3.1-rc1-linux-riscv64.jar", - "sha1": "8544853aa77b10692548b2a728cd890afd740ba5", - "size": 11905844 - } + "artifact": { + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "sha1": "7e46ecdec85db8738053cfde1414352cd62dab74", + "size": 147044 } - }, - "extract": { - "exclude": [ - "META-INF/" - ] - }, - "natives": { - "linux": "linux-riscv64" } }, - "org.lwjgl:lwjgl-jemalloc:3.2.2": { - "name": "org.lwjgl:lwjgl-jemalloc:3.3.1", + "org.lwjgl:lwjgl-glfw:3.3.2:natives-linux": { + "name": "org.lwjgl:lwjgl-glfw:3.3.4:natives-linux-riscv64", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-jemalloc/3.3.1/lwjgl-jemalloc-3.3.1.jar", - "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.1/lwjgl-jemalloc-3.3.1.jar", - "sha1": "a817bcf213db49f710603677457567c37d53e103", - "size": 36601 + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-linux-riscv64.jar", + "sha1": "9582481036b6fb762c3f791e2ed26128152a1cec", + "size": 117084 } } }, - "org.lwjgl:lwjgl-jemalloc:3.2.2:natives": null, - "org.lwjgl:lwjgl-openal:3.2.2": { - "name": "org.lwjgl:lwjgl-openal:3.3.1", + "org.lwjgl:lwjgl-stb:3.3.2": { + "name": "org.lwjgl:lwjgl-stb:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-openal/3.3.1/lwjgl-openal-3.3.1.jar", - "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.1/lwjgl-openal-3.3.1.jar", - "sha1": "2623a6b8ae1dfcd880738656a9f0243d2e6840bd", - "size": 88237 + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "sha1": "5821735d5ef23f6da8542887344e57eb181b7cac", + "size": 143112 } } }, - "org.lwjgl:lwjgl-openal:3.2.2:natives": null, - "org.lwjgl:lwjgl-opengl:3.2.2": { - "name": "org.lwjgl:lwjgl-opengl:3.3.1", + "org.lwjgl:lwjgl-stb:3.3.2:natives-linux": { + "name": "org.lwjgl:lwjgl-stb:3.3.4:natives-linux-riscv64", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-opengl/3.3.1/lwjgl-opengl-3.3.1.jar", - "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.1/lwjgl-opengl-3.3.1.jar", - "sha1": "831a5533a21a5f4f81bbc51bb13e9899319b5411", - "size": 921563 + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-linux-riscv64.jar", + "sha1": "502804ee61eb7adb30bbb5e4459899f9a0cb23cf", + "size": 215885 } } }, - "org.lwjgl:lwjgl-opengl:3.2.2:natives": null, - "org.lwjgl:lwjgl-glfw:3.2.2": { - "name": "org.lwjgl:lwjgl-glfw:3.3.1", + "org.lwjgl:lwjgl-tinyfd:3.3.2": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-glfw/3.3.1/lwjgl-glfw-3.3.1.jar", - "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.1/lwjgl-glfw-3.3.1.jar", - "sha1": "cbac1b8d30cb4795149c1ef540f912671a8616d0", - "size": 128801 + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "sha1": "2d73789ffd8962b38d9d599cc38b2383ce818c7a", + "size": 15928 } } }, - "org.lwjgl:lwjgl-glfw:3.2.2:natives": null, - "org.lwjgl:lwjgl-stb:3.2.2": { - "name": "org.lwjgl:lwjgl-stb:3.3.1", + "org.lwjgl:lwjgl-tinyfd:3.3.2:natives-linux": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4:natives-linux-riscv64", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-stb/3.3.1/lwjgl-stb-3.3.1.jar", - "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.1/lwjgl-stb-3.3.1.jar", - "sha1": "b119297cf8ed01f247abe8685857f8e7fcf5980f", - "size": 112380 + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-linux-riscv64.jar", + "sha1": "8bec171d3fa4ec3cfc20b4ddd675cb08935bd5f8", + "size": 46550 } } }, - "org.lwjgl:lwjgl-stb:3.2.2:natives": null, - "org.lwjgl:lwjgl-tinyfd:3.2.2": { - "name": "org.lwjgl:lwjgl-tinyfd:3.3.1", + "org.lwjgl:lwjgl:3.3.3": { + "name": "org.lwjgl:lwjgl:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-tinyfd/3.3.1/lwjgl-tinyfd-3.3.1.jar", - "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.1/lwjgl-tinyfd-3.3.1.jar", - "sha1": "0ff1914111ef2e3e0110ef2dabc8d8cdaad82347", - "size": 6767 + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "sha1": "b86c3e4832426e8a6b466013b7cb34b40e9ce956", + "size": 800127 } } }, - "org.lwjgl:lwjgl-tinyfd:3.2.2:natives": null, - "org.lwjgl:lwjgl:3.3.1:natives-linux": { - "name": "org.glavo.hmcl:lwjgl3-natives:3.3.1-rc1", + "org.lwjgl:lwjgl:3.3.3:natives-linux": { + "name": "org.lwjgl:lwjgl:3.3.4:natives-linux-riscv64", "downloads": { - "classifiers": { - "linux-riscv64": { - "path": "org/glavo/hmcl/lwjgl3-natives/3.3.1-rc1/lwjgl3-natives-3.3.1-rc1-linux-riscv64.jar", - "url": "https://repo1.maven.org/maven2/org/glavo/hmcl/lwjgl3-natives/3.3.1-rc1-linux-riscv64/lwjgl3-natives-3.3.1-rc1-linux-riscv64.jar", - "sha1": "8544853aa77b10692548b2a728cd890afd740ba5", - "size": 11905844 - } + "artifact": { + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-linux-riscv64.jar", + "sha1": "3ce36a5c5e6feb61bad2ea1426352482e04c6db1", + "size": 80164 } - }, - "extract": { - "exclude": [ - "META-INF/" - ] - }, - "natives": { - "linux": "linux-riscv64" } }, - "org.lwjgl:lwjgl-jemalloc:3.3.1:natives-linux": null, - "org.lwjgl:lwjgl-openal:3.3.1:natives-linux": null, - "org.lwjgl:lwjgl-opengl:3.3.1:natives-linux": null, - "org.lwjgl:lwjgl-glfw:3.3.1:natives-linux": null, - "org.lwjgl:lwjgl-stb:3.3.1:natives-linux": null, - "org.lwjgl:lwjgl-tinyfd:3.3.1:natives-linux": null, - "org.lwjgl:lwjgl:3.3.2": { - "name": "org.lwjgl:lwjgl:3.3.4-SNAPSHOT", + "org.lwjgl:lwjgl-jemalloc:3.3.3": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl/3.3.4-SNAPSHOT/lwjgl-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl/3.3.4-SNAPSHOT/lwjgl-3.3.4-20231218.151521-4.jar", - "sha1": "7202012cf0cadb9ffad4874494920fd8bbd93413", - "size": 792204 + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "sha1": "e3f5dcb8e13f3a5ed3f740fd30a114cee2a80bc4", + "size": 46430 } } }, - "org.lwjgl:lwjgl:3.3.2:natives-linux": { - "name": "org.lwjgl:lwjgl:3.3.4-SNAPSHOT:natives-linux-riscv64", + "org.lwjgl:lwjgl-jemalloc:3.3.3:natives-linux": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4:natives-linux-riscv64", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl/3.3.4-SNAPSHOT/lwjgl-3.3.4-20231218.151521-4-natives-linux-riscv64.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl/3.3.4-SNAPSHOT/lwjgl-3.3.4-20231218.151521-4-natives-linux-riscv64.jar", - "sha1": "642848dc964fc5332cda40225771a5143740b49c", - "size": 79691 + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-linux-riscv64.jar", + "sha1": "6c5d38aad1dbd1c4945bcbe86640e616ceb9588f", + "size": 197209 } } }, - "org.lwjgl:lwjgl-jemalloc:3.3.2": { - "name": "org.lwjgl:lwjgl-jemalloc:3.3.4-SNAPSHOT", + "org.lwjgl:lwjgl-openal:3.3.3": { + "name": "org.lwjgl:lwjgl-openal:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-jemalloc/3.3.4-SNAPSHOT/lwjgl-jemalloc-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-jemalloc/3.3.4-SNAPSHOT/lwjgl-jemalloc-3.3.4-20231218.151521-4.jar", - "sha1": "41256f2c098806304fd224613d3d01b02725470e", - "size": 46421 + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "sha1": "9b74d3ea380c83353d42af43ad9659e04dabe84a", + "size": 113103 } } }, - "org.lwjgl:lwjgl-jemalloc:3.3.2:natives-linux": { - "name": "org.lwjgl:lwjgl-jemalloc:3.3.4-SNAPSHOT:natives-linux-riscv64", + "org.lwjgl:lwjgl-openal:3.3.3:natives-linux": { + "name": "org.lwjgl:lwjgl-openal:3.3.4:natives-linux-riscv64", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-jemalloc/3.3.4-SNAPSHOT/lwjgl-jemalloc-3.3.4-20231218.151521-4-natives-linux-riscv64.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-jemalloc/3.3.4-SNAPSHOT/lwjgl-jemalloc-3.3.4-20231218.151521-4-natives-linux-riscv64.jar", - "sha1": "01129d98674994eb8204f62c26b5717d4d989536", - "size": 200633 + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-linux-riscv64.jar", + "sha1": "74c5ddf47ad6bee41348bbb0735008694b5315af", + "size": 516661 } } }, - "org.lwjgl:lwjgl-openal:3.3.2": { - "name": "org.lwjgl:lwjgl-openal:3.3.4-SNAPSHOT", + "org.lwjgl:lwjgl-opengl:3.3.3": { + "name": "org.lwjgl:lwjgl-opengl:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-openal/3.3.4-SNAPSHOT/lwjgl-openal-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-openal/3.3.4-SNAPSHOT/lwjgl-openal-3.3.4-20231218.151521-4.jar", - "sha1": "89d8868c2d688b55e3e923345e4a146c6d034229", - "size": 113094 + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "sha1": "2852ac7d9f6fc71349f1ce28e2708ff1977f18af", + "size": 931960 } } }, - "org.lwjgl:lwjgl-openal:3.3.2:natives-linux": { - "name": "org.lwjgl:lwjgl-openal:3.3.4-SNAPSHOT:natives-linux-riscv64", + "org.lwjgl:lwjgl-opengl:3.3.3:natives-linux": { + "name": "org.lwjgl:lwjgl-opengl:3.3.4:natives-linux-riscv64", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-openal/3.3.4-SNAPSHOT/lwjgl-openal-3.3.4-20231218.151521-4-natives-linux-riscv64.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-openal/3.3.4-SNAPSHOT/lwjgl-openal-3.3.4-20231218.151521-4-natives-linux-riscv64.jar", - "sha1": "bce3174f137d0ffcbbe88ddae305de11c5131137", - "size": 520217 + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-linux-riscv64.jar", + "sha1": "6ea07b47dd91af8f3ee4a24ddb3cbf086d157a4e", + "size": 57864 } } }, - "org.lwjgl:lwjgl-opengl:3.3.2": { - "name": "org.lwjgl:lwjgl-opengl:3.3.4-SNAPSHOT", + "org.lwjgl:lwjgl-glfw:3.3.3": { + "name": "org.lwjgl:lwjgl-glfw:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-opengl/3.3.4-SNAPSHOT/lwjgl-opengl-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-opengl/3.3.4-SNAPSHOT/lwjgl-opengl-3.3.4-20231218.151521-4.jar", - "sha1": "81d0a7fd96bf5eb6257fddf6b77e338d8918bf32", - "size": 931744 + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "sha1": "7e46ecdec85db8738053cfde1414352cd62dab74", + "size": 147044 } } }, - "org.lwjgl:lwjgl-opengl:3.3.2:natives-linux": { - "name": "org.lwjgl:lwjgl-opengl:3.3.4-SNAPSHOT:natives-linux-riscv64", + "org.lwjgl:lwjgl-glfw:3.3.3:natives-linux": { + "name": "org.lwjgl:lwjgl-glfw:3.3.4:natives-linux-riscv64", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-opengl/3.3.4-SNAPSHOT/lwjgl-opengl-3.3.4-20231218.151521-4-natives-linux-riscv64.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-opengl/3.3.4-SNAPSHOT/lwjgl-opengl-3.3.4-20231218.151521-4-natives-linux-riscv64.jar", - "sha1": "13dccf954b781883b0661bd55dfc423f8eece864", - "size": 57244 + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-linux-riscv64.jar", + "sha1": "9582481036b6fb762c3f791e2ed26128152a1cec", + "size": 117084 } } }, - "org.lwjgl:lwjgl-glfw:3.3.2": { - "name": "org.lwjgl:lwjgl-glfw:3.3.4-SNAPSHOT", + "org.lwjgl:lwjgl-stb:3.3.3": { + "name": "org.lwjgl:lwjgl-stb:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-glfw/3.3.4-SNAPSHOT/lwjgl-glfw-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-glfw/3.3.4-SNAPSHOT/lwjgl-glfw-3.3.4-20231218.151521-4.jar", - "sha1": "e6dba9ab8532cb6aac273adf26496ce689999943", - "size": 146829 + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "sha1": "5821735d5ef23f6da8542887344e57eb181b7cac", + "size": 143112 } } }, - "org.lwjgl:lwjgl-glfw:3.3.2:natives-linux": { - "name": "org.lwjgl:lwjgl-glfw:3.3.4-SNAPSHOT:natives-linux-riscv64", + "org.lwjgl:lwjgl-stb:3.3.3:natives-linux": { + "name": "org.lwjgl:lwjgl-stb:3.3.4:natives-linux-riscv64", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-glfw/3.3.4-SNAPSHOT/lwjgl-glfw-3.3.4-20231218.151521-4-natives-linux-riscv64.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-glfw/3.3.4-SNAPSHOT/lwjgl-glfw-3.3.4-20231218.151521-4-natives-linux-riscv64.jar", - "sha1": "865417f4aa171aa8e7a448d88877a82844896c92", - "size": 113875 + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-linux-riscv64.jar", + "sha1": "502804ee61eb7adb30bbb5e4459899f9a0cb23cf", + "size": 215885 } } }, - "org.lwjgl:lwjgl-stb:3.3.2": { - "name": "org.lwjgl:lwjgl-stb:3.3.4-SNAPSHOT", + "org.lwjgl:lwjgl-tinyfd:3.3.3": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-stb/3.3.4-SNAPSHOT/lwjgl-stb-3.3.4-20231218.151521-3.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-stb/3.3.4-SNAPSHOT/lwjgl-stb-3.3.4-20231218.151521-3.jar", - "sha1": "033fe42d1b37e35afd8b6e2653abc77deadb0730", - "size": 143099 + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "sha1": "2d73789ffd8962b38d9d599cc38b2383ce818c7a", + "size": 15928 } } }, - "org.lwjgl:lwjgl-stb:3.3.2:natives-linux": { - "name": "org.lwjgl:lwjgl-stb:3.3.4-SNAPSHOT:natives-linux-riscv64", + "org.lwjgl:lwjgl-tinyfd:3.3.3:natives-linux": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4:natives-linux-riscv64", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-stb/3.3.4-SNAPSHOT/lwjgl-stb-3.3.4-20231218.151521-3-natives-linux-riscv64.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-stb/3.3.4-SNAPSHOT/lwjgl-stb-3.3.4-20231218.151521-3-natives-linux-riscv64.jar", - "sha1": "f5b96c0fd649cb1e18816f63bed49e0dfe1d1f1a", - "size": 217005 + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-linux-riscv64.jar", + "sha1": "8bec171d3fa4ec3cfc20b4ddd675cb08935bd5f8", + "size": 46550 } } }, - "org.lwjgl:lwjgl-tinyfd:3.3.2": { - "name": "org.lwjgl:lwjgl-tinyfd:3.3.4-SNAPSHOT", + "org.lwjgl:lwjgl-freetype:3.3.3": { + "name": "org.lwjgl:lwjgl-freetype:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-tinyfd/3.3.4-SNAPSHOT/lwjgl-tinyfd-3.3.4-20231218.151521-3.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-tinyfd/3.3.4-SNAPSHOT/lwjgl-tinyfd-3.3.4-20231218.151521-3.jar", - "sha1": "8b7c94a57f56a5b38b23c02c1cada77dccba9930", - "size": 15917 + "path": "org/lwjgl/lwjgl-freetype/3.3.4/lwjgl-freetype-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-freetype/3.3.4/lwjgl-freetype-3.3.4.jar", + "sha1": "23f7bf165068ef2ca80ae1b79fd905af20498600", + "size": 453489 } } }, - "org.lwjgl:lwjgl-tinyfd:3.3.2:natives-linux": { - "name": "org.lwjgl:lwjgl-tinyfd:3.3.4-SNAPSHOT:natives-linux-riscv64", + "org.lwjgl:lwjgl-freetype:3.3.3:natives-linux": { + "name": "org.lwjgl:lwjgl-freetype:3.3.4:natives-linux-riscv64", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-tinyfd/3.3.4-SNAPSHOT/lwjgl-tinyfd-3.3.4-20231218.151521-3-natives-linux-riscv64.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-tinyfd/3.3.4-SNAPSHOT/lwjgl-tinyfd-3.3.4-20231218.151521-3-natives-linux-riscv64.jar", - "sha1": "f042c17188c5db910b195d298c284bbfbe550c53", - "size": 46885 + "path": "org/lwjgl/lwjgl-freetype/3.3.4/lwjgl-freetype-3.3.4-natives-linux-riscv64.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-freetype/3.3.4/lwjgl-freetype-3.3.4-natives-linux-riscv64.jar", + "sha1": "2cb82939dc283686f9febf5349b66e773f515c59", + "size": 1194584 } } }, @@ -3411,618 +4582,772 @@ }, "freebsd-x86_64": { "org.lwjgl:lwjgl:3.1.6": { - "name": "org.lwjgl:lwjgl:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl/3.3.4-SNAPSHOT/lwjgl-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl/3.3.4-SNAPSHOT/lwjgl-3.3.4-20231218.151521-4.jar", - "sha1": "7202012cf0cadb9ffad4874494920fd8bbd93413", - "size": 792204 + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "sha1": "b86c3e4832426e8a6b466013b7cb34b40e9ce956", + "size": 800127 } } }, "org.lwjgl:lwjgl:3.1.6:natives": { - "name": "org.lwjgl:lwjgl:3.3.4-SNAPSHOT:natives-freebsd", + "name": "org.lwjgl:lwjgl:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl/3.3.4-SNAPSHOT/lwjgl-3.3.4-20231218.151521-4-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl/3.3.4-SNAPSHOT/lwjgl-3.3.4-20231218.151521-4-natives-freebsd.jar", - "sha1": "2d38355b453edfe2daee1a567bcdb82c0485edcf", - "size": 95872 + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-freebsd.jar", + "sha1": "610d14530e637564d97d74af7cb98a737e70b77b", + "size": 96209 } } }, "org.lwjgl:lwjgl-jemalloc:3.1.6": { - "name": "org.lwjgl:lwjgl-jemalloc:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-jemalloc/3.3.4-SNAPSHOT/lwjgl-jemalloc-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-jemalloc/3.3.4-SNAPSHOT/lwjgl-jemalloc-3.3.4-20231218.151521-4.jar", - "sha1": "41256f2c098806304fd224613d3d01b02725470e", - "size": 46421 + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "sha1": "e3f5dcb8e13f3a5ed3f740fd30a114cee2a80bc4", + "size": 46430 } } }, "org.lwjgl:lwjgl-jemalloc:3.1.6:natives": { - "name": "org.lwjgl:lwjgl-jemalloc:3.3.4-SNAPSHOT:natives-freebsd", + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-jemalloc/3.3.4-SNAPSHOT/lwjgl-jemalloc-3.3.4-20231218.151521-4-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-jemalloc/3.3.4-SNAPSHOT/lwjgl-jemalloc-3.3.4-20231218.151521-4-natives-freebsd.jar", - "sha1": "bdba1662b621228679c7aed87945d1f28c590d5b", - "size": 155867 + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-freebsd.jar", + "sha1": "5ee27f3bad4715067cef0630682da4bb5a1b88ac", + "size": 157297 } } }, "org.lwjgl:lwjgl-openal:3.1.6": { - "name": "org.lwjgl:lwjgl-openal:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-openal:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-openal/3.3.4-SNAPSHOT/lwjgl-openal-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-openal/3.3.4-SNAPSHOT/lwjgl-openal-3.3.4-20231218.151521-4.jar", - "sha1": "89d8868c2d688b55e3e923345e4a146c6d034229", - "size": 113094 + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "sha1": "9b74d3ea380c83353d42af43ad9659e04dabe84a", + "size": 113103 } } }, "org.lwjgl:lwjgl-openal:3.1.6:natives": { - "name": "org.lwjgl:lwjgl-openal:3.3.4-SNAPSHOT:natives-freebsd", + "name": "org.lwjgl:lwjgl-openal:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-openal/3.3.4-SNAPSHOT/lwjgl-openal-3.3.4-20231218.151521-4-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-openal/3.3.4-SNAPSHOT/lwjgl-openal-3.3.4-20231218.151521-4-natives-freebsd.jar", - "sha1": "0fc6495e6752727b629cf03a105c9d56087d4edd", - "size": 597512 + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-freebsd.jar", + "sha1": "3863f8268f5515c27f1364257f8a018f0c6afa79", + "size": 597486 } } }, "org.lwjgl:lwjgl-opengl:3.1.6": { - "name": "org.lwjgl:lwjgl-opengl:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-opengl:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-opengl/3.3.4-SNAPSHOT/lwjgl-opengl-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-opengl/3.3.4-SNAPSHOT/lwjgl-opengl-3.3.4-20231218.151521-4.jar", - "sha1": "81d0a7fd96bf5eb6257fddf6b77e338d8918bf32", - "size": 931744 + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "sha1": "2852ac7d9f6fc71349f1ce28e2708ff1977f18af", + "size": 931960 } } }, "org.lwjgl:lwjgl-opengl:3.1.6:natives": { - "name": "org.lwjgl:lwjgl-opengl:3.3.4-SNAPSHOT:natives-freebsd", + "name": "org.lwjgl:lwjgl-opengl:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-opengl/3.3.4-SNAPSHOT/lwjgl-opengl-3.3.4-20231218.151521-4-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-opengl/3.3.4-SNAPSHOT/lwjgl-opengl-3.3.4-20231218.151521-4-natives-freebsd.jar", - "sha1": "d3e8ec997cef8bc66819c7e0ad7a54182f7aff2a", - "size": 81034 + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-freebsd.jar", + "sha1": "579071d2a3714f5662522f7d3edf58e941580587", + "size": 81028 } } }, "org.lwjgl:lwjgl-glfw:3.1.6": { - "name": "org.lwjgl:lwjgl-glfw:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-glfw:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-glfw/3.3.4-SNAPSHOT/lwjgl-glfw-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-glfw/3.3.4-SNAPSHOT/lwjgl-glfw-3.3.4-20231218.151521-4.jar", - "sha1": "e6dba9ab8532cb6aac273adf26496ce689999943", - "size": 146829 + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "sha1": "7e46ecdec85db8738053cfde1414352cd62dab74", + "size": 147044 } } }, "org.lwjgl:lwjgl-glfw:3.1.6:natives": { - "name": "org.lwjgl:lwjgl-glfw:3.3.4-SNAPSHOT:natives-freebsd", + "name": "org.lwjgl:lwjgl-glfw:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-glfw/3.3.4-SNAPSHOT/lwjgl-glfw-3.3.4-20231218.151521-4-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-glfw/3.3.4-SNAPSHOT/lwjgl-glfw-3.3.4-20231218.151521-4-natives-freebsd.jar", - "sha1": "4881a965c7679b4984c0d8a5890f07ea85c653c4", - "size": 101847 + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-freebsd.jar", + "sha1": "f67b9b6c29451d8fea66db17aaba2f65e908c7e9", + "size": 104415 } } }, "org.lwjgl:lwjgl-stb:3.1.6": { - "name": "org.lwjgl:lwjgl-stb:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-stb:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-stb/3.3.4-SNAPSHOT/lwjgl-stb-3.3.4-20231218.151521-3.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-stb/3.3.4-SNAPSHOT/lwjgl-stb-3.3.4-20231218.151521-3.jar", - "sha1": "033fe42d1b37e35afd8b6e2653abc77deadb0730", - "size": 143099 + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "sha1": "5821735d5ef23f6da8542887344e57eb181b7cac", + "size": 143112 } } }, "org.lwjgl:lwjgl-stb:3.1.6:natives": { - "name": "org.lwjgl:lwjgl-stb:3.3.4-SNAPSHOT:natives-freebsd", + "name": "org.lwjgl:lwjgl-stb:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-stb/3.3.4-SNAPSHOT/lwjgl-stb-3.3.4-20231218.151521-3-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-stb/3.3.4-SNAPSHOT/lwjgl-stb-3.3.4-20231218.151521-3-natives-freebsd.jar", - "sha1": "0aad82a857ebb9a3a212dc2c386761d57e11a8f2", - "size": 225735 + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-freebsd.jar", + "sha1": "f5551338a1e2035ff747053f0e985dc93db1235c", + "size": 226093 } } }, "org.lwjgl:lwjgl-tinyfd:3.1.6": { - "name": "org.lwjgl:lwjgl-tinyfd:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-tinyfd/3.3.4-SNAPSHOT/lwjgl-tinyfd-3.3.4-20231218.151521-3.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-tinyfd/3.3.4-SNAPSHOT/lwjgl-tinyfd-3.3.4-20231218.151521-3.jar", - "sha1": "8b7c94a57f56a5b38b23c02c1cada77dccba9930", - "size": 15917 + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "sha1": "2d73789ffd8962b38d9d599cc38b2383ce818c7a", + "size": 15928 } } }, "org.lwjgl:lwjgl-tinyfd:3.1.6:natives": { - "name": "org.lwjgl:lwjgl-tinyfd:3.3.4-SNAPSHOT:natives-freebsd", + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4:natives-freebsd", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-freebsd.jar", + "sha1": "acd5e1b9b9b99ce4d21867058ee468ee45a859e5", + "size": 40104 + } + } + }, + "org.lwjgl:lwjgl:3.2.1": { + "name": "org.lwjgl:lwjgl:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "sha1": "b86c3e4832426e8a6b466013b7cb34b40e9ce956", + "size": 800127 + } + } + }, + "org.lwjgl:lwjgl:3.2.1:natives": { + "name": "org.lwjgl:lwjgl:3.3.4:natives-freebsd", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-freebsd.jar", + "sha1": "610d14530e637564d97d74af7cb98a737e70b77b", + "size": 96209 + } + } + }, + "org.lwjgl:lwjgl-jemalloc:3.2.1": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "sha1": "e3f5dcb8e13f3a5ed3f740fd30a114cee2a80bc4", + "size": 46430 + } + } + }, + "org.lwjgl:lwjgl-jemalloc:3.2.1:natives": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4:natives-freebsd", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-freebsd.jar", + "sha1": "5ee27f3bad4715067cef0630682da4bb5a1b88ac", + "size": 157297 + } + } + }, + "org.lwjgl:lwjgl-openal:3.2.1": { + "name": "org.lwjgl:lwjgl-openal:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "sha1": "9b74d3ea380c83353d42af43ad9659e04dabe84a", + "size": 113103 + } + } + }, + "org.lwjgl:lwjgl-openal:3.2.1:natives": { + "name": "org.lwjgl:lwjgl-openal:3.3.4:natives-freebsd", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-freebsd.jar", + "sha1": "3863f8268f5515c27f1364257f8a018f0c6afa79", + "size": 597486 + } + } + }, + "org.lwjgl:lwjgl-opengl:3.2.1": { + "name": "org.lwjgl:lwjgl-opengl:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "sha1": "2852ac7d9f6fc71349f1ce28e2708ff1977f18af", + "size": 931960 + } + } + }, + "org.lwjgl:lwjgl-opengl:3.2.1:natives": { + "name": "org.lwjgl:lwjgl-opengl:3.3.4:natives-freebsd", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-freebsd.jar", + "sha1": "579071d2a3714f5662522f7d3edf58e941580587", + "size": 81028 + } + } + }, + "org.lwjgl:lwjgl-glfw:3.2.1": { + "name": "org.lwjgl:lwjgl-glfw:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "sha1": "7e46ecdec85db8738053cfde1414352cd62dab74", + "size": 147044 + } + } + }, + "org.lwjgl:lwjgl-glfw:3.2.1:natives": { + "name": "org.lwjgl:lwjgl-glfw:3.3.4:natives-freebsd", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-freebsd.jar", + "sha1": "f67b9b6c29451d8fea66db17aaba2f65e908c7e9", + "size": 104415 + } + } + }, + "org.lwjgl:lwjgl-stb:3.2.1": { + "name": "org.lwjgl:lwjgl-stb:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-tinyfd/3.3.4-SNAPSHOT/lwjgl-tinyfd-3.3.4-20231218.151521-3-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-tinyfd/3.3.4-SNAPSHOT/lwjgl-tinyfd-3.3.4-20231218.151521-3-natives-freebsd.jar", - "sha1": "124d0e48ae1584f09e5701588ae8ad139be26003", - "size": 39077 + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "sha1": "5821735d5ef23f6da8542887344e57eb181b7cac", + "size": 143112 + } + } + }, + "org.lwjgl:lwjgl-stb:3.2.1:natives": { + "name": "org.lwjgl:lwjgl-stb:3.3.4:natives-freebsd", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-freebsd.jar", + "sha1": "f5551338a1e2035ff747053f0e985dc93db1235c", + "size": 226093 + } + } + }, + "org.lwjgl:lwjgl-tinyfd:3.2.1": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "sha1": "2d73789ffd8962b38d9d599cc38b2383ce818c7a", + "size": 15928 + } + } + }, + "org.lwjgl:lwjgl-tinyfd:3.2.1:natives": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4:natives-freebsd", + "downloads": { + "artifact": { + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-freebsd.jar", + "sha1": "acd5e1b9b9b99ce4d21867058ee468ee45a859e5", + "size": 40104 } } }, "org.lwjgl:lwjgl:3.2.2": { - "name": "org.lwjgl:lwjgl:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl/3.3.4-SNAPSHOT/lwjgl-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl/3.3.4-SNAPSHOT/lwjgl-3.3.4-20231218.151521-4.jar", - "sha1": "7202012cf0cadb9ffad4874494920fd8bbd93413", - "size": 792204 + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "sha1": "b86c3e4832426e8a6b466013b7cb34b40e9ce956", + "size": 800127 } } }, "org.lwjgl:lwjgl:3.2.2:natives": { - "name": "org.lwjgl:lwjgl:3.3.4-SNAPSHOT:natives-freebsd", + "name": "org.lwjgl:lwjgl:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl/3.3.4-SNAPSHOT/lwjgl-3.3.4-20231218.151521-4-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl/3.3.4-SNAPSHOT/lwjgl-3.3.4-20231218.151521-4-natives-freebsd.jar", - "sha1": "2d38355b453edfe2daee1a567bcdb82c0485edcf", - "size": 95872 + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-freebsd.jar", + "sha1": "610d14530e637564d97d74af7cb98a737e70b77b", + "size": 96209 } } }, "org.lwjgl:lwjgl-jemalloc:3.2.2": { - "name": "org.lwjgl:lwjgl-jemalloc:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-jemalloc/3.3.4-SNAPSHOT/lwjgl-jemalloc-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-jemalloc/3.3.4-SNAPSHOT/lwjgl-jemalloc-3.3.4-20231218.151521-4.jar", - "sha1": "41256f2c098806304fd224613d3d01b02725470e", - "size": 46421 + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "sha1": "e3f5dcb8e13f3a5ed3f740fd30a114cee2a80bc4", + "size": 46430 } } }, "org.lwjgl:lwjgl-jemalloc:3.2.2:natives": { - "name": "org.lwjgl:lwjgl-jemalloc:3.3.4-SNAPSHOT:natives-freebsd", + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-jemalloc/3.3.4-SNAPSHOT/lwjgl-jemalloc-3.3.4-20231218.151521-4-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-jemalloc/3.3.4-SNAPSHOT/lwjgl-jemalloc-3.3.4-20231218.151521-4-natives-freebsd.jar", - "sha1": "bdba1662b621228679c7aed87945d1f28c590d5b", - "size": 155867 + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-freebsd.jar", + "sha1": "5ee27f3bad4715067cef0630682da4bb5a1b88ac", + "size": 157297 } } }, "org.lwjgl:lwjgl-openal:3.2.2": { - "name": "org.lwjgl:lwjgl-openal:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-openal:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-openal/3.3.4-SNAPSHOT/lwjgl-openal-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-openal/3.3.4-SNAPSHOT/lwjgl-openal-3.3.4-20231218.151521-4.jar", - "sha1": "89d8868c2d688b55e3e923345e4a146c6d034229", - "size": 113094 + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "sha1": "9b74d3ea380c83353d42af43ad9659e04dabe84a", + "size": 113103 } } }, "org.lwjgl:lwjgl-openal:3.2.2:natives": { - "name": "org.lwjgl:lwjgl-openal:3.3.4-SNAPSHOT:natives-freebsd", + "name": "org.lwjgl:lwjgl-openal:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-openal/3.3.4-SNAPSHOT/lwjgl-openal-3.3.4-20231218.151521-4-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-openal/3.3.4-SNAPSHOT/lwjgl-openal-3.3.4-20231218.151521-4-natives-freebsd.jar", - "sha1": "0fc6495e6752727b629cf03a105c9d56087d4edd", - "size": 597512 + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-freebsd.jar", + "sha1": "3863f8268f5515c27f1364257f8a018f0c6afa79", + "size": 597486 } } }, "org.lwjgl:lwjgl-opengl:3.2.2": { - "name": "org.lwjgl:lwjgl-opengl:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-opengl:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-opengl/3.3.4-SNAPSHOT/lwjgl-opengl-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-opengl/3.3.4-SNAPSHOT/lwjgl-opengl-3.3.4-20231218.151521-4.jar", - "sha1": "81d0a7fd96bf5eb6257fddf6b77e338d8918bf32", - "size": 931744 + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "sha1": "2852ac7d9f6fc71349f1ce28e2708ff1977f18af", + "size": 931960 } } }, "org.lwjgl:lwjgl-opengl:3.2.2:natives": { - "name": "org.lwjgl:lwjgl-opengl:3.3.4-SNAPSHOT:natives-freebsd", + "name": "org.lwjgl:lwjgl-opengl:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-opengl/3.3.4-SNAPSHOT/lwjgl-opengl-3.3.4-20231218.151521-4-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-opengl/3.3.4-SNAPSHOT/lwjgl-opengl-3.3.4-20231218.151521-4-natives-freebsd.jar", - "sha1": "d3e8ec997cef8bc66819c7e0ad7a54182f7aff2a", - "size": 81034 + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-freebsd.jar", + "sha1": "579071d2a3714f5662522f7d3edf58e941580587", + "size": 81028 } } }, "org.lwjgl:lwjgl-glfw:3.2.2": { - "name": "org.lwjgl:lwjgl-glfw:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-glfw:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-glfw/3.3.4-SNAPSHOT/lwjgl-glfw-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-glfw/3.3.4-SNAPSHOT/lwjgl-glfw-3.3.4-20231218.151521-4.jar", - "sha1": "e6dba9ab8532cb6aac273adf26496ce689999943", - "size": 146829 + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "sha1": "7e46ecdec85db8738053cfde1414352cd62dab74", + "size": 147044 } } }, "org.lwjgl:lwjgl-glfw:3.2.2:natives": { - "name": "org.lwjgl:lwjgl-glfw:3.3.4-SNAPSHOT:natives-freebsd", + "name": "org.lwjgl:lwjgl-glfw:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-glfw/3.3.4-SNAPSHOT/lwjgl-glfw-3.3.4-20231218.151521-4-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-glfw/3.3.4-SNAPSHOT/lwjgl-glfw-3.3.4-20231218.151521-4-natives-freebsd.jar", - "sha1": "4881a965c7679b4984c0d8a5890f07ea85c653c4", - "size": 101847 + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-freebsd.jar", + "sha1": "f67b9b6c29451d8fea66db17aaba2f65e908c7e9", + "size": 104415 } } }, "org.lwjgl:lwjgl-stb:3.2.2": { - "name": "org.lwjgl:lwjgl-stb:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-stb:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-stb/3.3.4-SNAPSHOT/lwjgl-stb-3.3.4-20231218.151521-3.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-stb/3.3.4-SNAPSHOT/lwjgl-stb-3.3.4-20231218.151521-3.jar", - "sha1": "033fe42d1b37e35afd8b6e2653abc77deadb0730", - "size": 143099 + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "sha1": "5821735d5ef23f6da8542887344e57eb181b7cac", + "size": 143112 } } }, "org.lwjgl:lwjgl-stb:3.2.2:natives": { - "name": "org.lwjgl:lwjgl-stb:3.3.4-SNAPSHOT:natives-freebsd", + "name": "org.lwjgl:lwjgl-stb:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-stb/3.3.4-SNAPSHOT/lwjgl-stb-3.3.4-20231218.151521-3-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-stb/3.3.4-SNAPSHOT/lwjgl-stb-3.3.4-20231218.151521-3-natives-freebsd.jar", - "sha1": "0aad82a857ebb9a3a212dc2c386761d57e11a8f2", - "size": 225735 + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-freebsd.jar", + "sha1": "f5551338a1e2035ff747053f0e985dc93db1235c", + "size": 226093 } } }, "org.lwjgl:lwjgl-tinyfd:3.2.2": { - "name": "org.lwjgl:lwjgl-tinyfd:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-tinyfd/3.3.4-SNAPSHOT/lwjgl-tinyfd-3.3.4-20231218.151521-3.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-tinyfd/3.3.4-SNAPSHOT/lwjgl-tinyfd-3.3.4-20231218.151521-3.jar", - "sha1": "8b7c94a57f56a5b38b23c02c1cada77dccba9930", - "size": 15917 + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "sha1": "2d73789ffd8962b38d9d599cc38b2383ce818c7a", + "size": 15928 } } }, "org.lwjgl:lwjgl-tinyfd:3.2.2:natives": { - "name": "org.lwjgl:lwjgl-tinyfd:3.3.4-SNAPSHOT:natives-freebsd", + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-tinyfd/3.3.4-SNAPSHOT/lwjgl-tinyfd-3.3.4-20231218.151521-3-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-tinyfd/3.3.4-SNAPSHOT/lwjgl-tinyfd-3.3.4-20231218.151521-3-natives-freebsd.jar", - "sha1": "124d0e48ae1584f09e5701588ae8ad139be26003", - "size": 39077 + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-freebsd.jar", + "sha1": "acd5e1b9b9b99ce4d21867058ee468ee45a859e5", + "size": 40104 } } }, "org.lwjgl:lwjgl:3.3.1": { - "name": "org.lwjgl:lwjgl:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl/3.3.4-SNAPSHOT/lwjgl-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl/3.3.4-SNAPSHOT/lwjgl-3.3.4-20231218.151521-4.jar", - "sha1": "7202012cf0cadb9ffad4874494920fd8bbd93413", - "size": 792204 + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "sha1": "b86c3e4832426e8a6b466013b7cb34b40e9ce956", + "size": 800127 } } }, - "org.lwjgl:lwjgl:3.3.1:natives-linux": { - "name": "org.lwjgl:lwjgl:3.3.4-SNAPSHOT:natives-freebsd", + "org.lwjgl:lwjgl:3.3.1:natives": { + "name": "org.lwjgl:lwjgl:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl/3.3.4-SNAPSHOT/lwjgl-3.3.4-20231218.151521-4-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl/3.3.4-SNAPSHOT/lwjgl-3.3.4-20231218.151521-4-natives-freebsd.jar", - "sha1": "2d38355b453edfe2daee1a567bcdb82c0485edcf", - "size": 95872 + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-freebsd.jar", + "sha1": "610d14530e637564d97d74af7cb98a737e70b77b", + "size": 96209 } } }, "org.lwjgl:lwjgl-jemalloc:3.3.1": { - "name": "org.lwjgl:lwjgl-jemalloc:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-jemalloc/3.3.4-SNAPSHOT/lwjgl-jemalloc-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-jemalloc/3.3.4-SNAPSHOT/lwjgl-jemalloc-3.3.4-20231218.151521-4.jar", - "sha1": "41256f2c098806304fd224613d3d01b02725470e", - "size": 46421 + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "sha1": "e3f5dcb8e13f3a5ed3f740fd30a114cee2a80bc4", + "size": 46430 } } }, - "org.lwjgl:lwjgl-jemalloc:3.3.1:natives-linux": { - "name": "org.lwjgl:lwjgl-jemalloc:3.3.4-SNAPSHOT:natives-freebsd", + "org.lwjgl:lwjgl-jemalloc:3.3.1:natives": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-jemalloc/3.3.4-SNAPSHOT/lwjgl-jemalloc-3.3.4-20231218.151521-4-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-jemalloc/3.3.4-SNAPSHOT/lwjgl-jemalloc-3.3.4-20231218.151521-4-natives-freebsd.jar", - "sha1": "bdba1662b621228679c7aed87945d1f28c590d5b", - "size": 155867 + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-freebsd.jar", + "sha1": "5ee27f3bad4715067cef0630682da4bb5a1b88ac", + "size": 157297 } } }, "org.lwjgl:lwjgl-openal:3.3.1": { - "name": "org.lwjgl:lwjgl-openal:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-openal:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-openal/3.3.4-SNAPSHOT/lwjgl-openal-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-openal/3.3.4-SNAPSHOT/lwjgl-openal-3.3.4-20231218.151521-4.jar", - "sha1": "89d8868c2d688b55e3e923345e4a146c6d034229", - "size": 113094 + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "sha1": "9b74d3ea380c83353d42af43ad9659e04dabe84a", + "size": 113103 } } }, - "org.lwjgl:lwjgl-openal:3.3.1:natives-linux": { - "name": "org.lwjgl:lwjgl-openal:3.3.4-SNAPSHOT:natives-freebsd", + "org.lwjgl:lwjgl-openal:3.3.1:natives": { + "name": "org.lwjgl:lwjgl-openal:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-openal/3.3.4-SNAPSHOT/lwjgl-openal-3.3.4-20231218.151521-4-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-openal/3.3.4-SNAPSHOT/lwjgl-openal-3.3.4-20231218.151521-4-natives-freebsd.jar", - "sha1": "0fc6495e6752727b629cf03a105c9d56087d4edd", - "size": 597512 + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-freebsd.jar", + "sha1": "3863f8268f5515c27f1364257f8a018f0c6afa79", + "size": 597486 } } }, "org.lwjgl:lwjgl-opengl:3.3.1": { - "name": "org.lwjgl:lwjgl-opengl:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-opengl:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-opengl/3.3.4-SNAPSHOT/lwjgl-opengl-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-opengl/3.3.4-SNAPSHOT/lwjgl-opengl-3.3.4-20231218.151521-4.jar", - "sha1": "81d0a7fd96bf5eb6257fddf6b77e338d8918bf32", - "size": 931744 + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "sha1": "2852ac7d9f6fc71349f1ce28e2708ff1977f18af", + "size": 931960 } } }, - "org.lwjgl:lwjgl-opengl:3.3.1:natives-linux": { - "name": "org.lwjgl:lwjgl-opengl:3.3.4-SNAPSHOT:natives-freebsd", + "org.lwjgl:lwjgl-opengl:3.3.1:natives": { + "name": "org.lwjgl:lwjgl-opengl:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-opengl/3.3.4-SNAPSHOT/lwjgl-opengl-3.3.4-20231218.151521-4-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-opengl/3.3.4-SNAPSHOT/lwjgl-opengl-3.3.4-20231218.151521-4-natives-freebsd.jar", - "sha1": "d3e8ec997cef8bc66819c7e0ad7a54182f7aff2a", - "size": 81034 + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-freebsd.jar", + "sha1": "579071d2a3714f5662522f7d3edf58e941580587", + "size": 81028 } } }, "org.lwjgl:lwjgl-glfw:3.3.1": { - "name": "org.lwjgl:lwjgl-glfw:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-glfw:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-glfw/3.3.4-SNAPSHOT/lwjgl-glfw-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-glfw/3.3.4-SNAPSHOT/lwjgl-glfw-3.3.4-20231218.151521-4.jar", - "sha1": "e6dba9ab8532cb6aac273adf26496ce689999943", - "size": 146829 + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "sha1": "7e46ecdec85db8738053cfde1414352cd62dab74", + "size": 147044 } } }, - "org.lwjgl:lwjgl-glfw:3.3.1:natives-linux": { - "name": "org.lwjgl:lwjgl-glfw:3.3.4-SNAPSHOT:natives-freebsd", + "org.lwjgl:lwjgl-glfw:3.3.1:natives": { + "name": "org.lwjgl:lwjgl-glfw:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-glfw/3.3.4-SNAPSHOT/lwjgl-glfw-3.3.4-20231218.151521-4-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-glfw/3.3.4-SNAPSHOT/lwjgl-glfw-3.3.4-20231218.151521-4-natives-freebsd.jar", - "sha1": "4881a965c7679b4984c0d8a5890f07ea85c653c4", - "size": 101847 + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-freebsd.jar", + "sha1": "f67b9b6c29451d8fea66db17aaba2f65e908c7e9", + "size": 104415 } } }, "org.lwjgl:lwjgl-stb:3.3.1": { - "name": "org.lwjgl:lwjgl-stb:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-stb:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-stb/3.3.4-SNAPSHOT/lwjgl-stb-3.3.4-20231218.151521-3.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-stb/3.3.4-SNAPSHOT/lwjgl-stb-3.3.4-20231218.151521-3.jar", - "sha1": "033fe42d1b37e35afd8b6e2653abc77deadb0730", - "size": 143099 + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "sha1": "5821735d5ef23f6da8542887344e57eb181b7cac", + "size": 143112 } } }, - "org.lwjgl:lwjgl-stb:3.3.1:natives-linux": { - "name": "org.lwjgl:lwjgl-stb:3.3.4-SNAPSHOT:natives-freebsd", + "org.lwjgl:lwjgl-stb:3.3.1:natives": { + "name": "org.lwjgl:lwjgl-stb:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-stb/3.3.4-SNAPSHOT/lwjgl-stb-3.3.4-20231218.151521-3-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-stb/3.3.4-SNAPSHOT/lwjgl-stb-3.3.4-20231218.151521-3-natives-freebsd.jar", - "sha1": "0aad82a857ebb9a3a212dc2c386761d57e11a8f2", - "size": 225735 + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-freebsd.jar", + "sha1": "f5551338a1e2035ff747053f0e985dc93db1235c", + "size": 226093 } } }, "org.lwjgl:lwjgl-tinyfd:3.3.1": { - "name": "org.lwjgl:lwjgl-tinyfd:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-tinyfd/3.3.4-SNAPSHOT/lwjgl-tinyfd-3.3.4-20231218.151521-3.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-tinyfd/3.3.4-SNAPSHOT/lwjgl-tinyfd-3.3.4-20231218.151521-3.jar", - "sha1": "8b7c94a57f56a5b38b23c02c1cada77dccba9930", - "size": 15917 + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "sha1": "2d73789ffd8962b38d9d599cc38b2383ce818c7a", + "size": 15928 } } }, - "org.lwjgl:lwjgl-tinyfd:3.3.1:natives-linux": { - "name": "org.lwjgl:lwjgl-tinyfd:3.3.4-SNAPSHOT:natives-freebsd", + "org.lwjgl:lwjgl-tinyfd:3.3.1:natives": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-tinyfd/3.3.4-SNAPSHOT/lwjgl-tinyfd-3.3.4-20231218.151521-3-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-tinyfd/3.3.4-SNAPSHOT/lwjgl-tinyfd-3.3.4-20231218.151521-3-natives-freebsd.jar", - "sha1": "124d0e48ae1584f09e5701588ae8ad139be26003", - "size": 39077 + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-freebsd.jar", + "sha1": "acd5e1b9b9b99ce4d21867058ee468ee45a859e5", + "size": 40104 } } }, "org.lwjgl:lwjgl:3.3.2": { - "name": "org.lwjgl:lwjgl:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl/3.3.4-SNAPSHOT/lwjgl-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl/3.3.4-SNAPSHOT/lwjgl-3.3.4-20231218.151521-4.jar", - "sha1": "7202012cf0cadb9ffad4874494920fd8bbd93413", - "size": 792204 + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4.jar", + "sha1": "b86c3e4832426e8a6b466013b7cb34b40e9ce956", + "size": 800127 } } }, - "org.lwjgl:lwjgl:3.3.2:natives-linux": { - "name": "org.lwjgl:lwjgl:3.3.4-SNAPSHOT:natives-freebsd", + "org.lwjgl:lwjgl:3.3.2:natives": { + "name": "org.lwjgl:lwjgl:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl/3.3.4-SNAPSHOT/lwjgl-3.3.4-20231218.151521-4-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl/3.3.4-SNAPSHOT/lwjgl-3.3.4-20231218.151521-4-natives-freebsd.jar", - "sha1": "2d38355b453edfe2daee1a567bcdb82c0485edcf", - "size": 95872 + "path": "org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl/3.3.4/lwjgl-3.3.4-natives-freebsd.jar", + "sha1": "610d14530e637564d97d74af7cb98a737e70b77b", + "size": 96209 } } }, "org.lwjgl:lwjgl-jemalloc:3.3.2": { - "name": "org.lwjgl:lwjgl-jemalloc:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-jemalloc/3.3.4-SNAPSHOT/lwjgl-jemalloc-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-jemalloc/3.3.4-SNAPSHOT/lwjgl-jemalloc-3.3.4-20231218.151521-4.jar", - "sha1": "41256f2c098806304fd224613d3d01b02725470e", - "size": 46421 + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4.jar", + "sha1": "e3f5dcb8e13f3a5ed3f740fd30a114cee2a80bc4", + "size": 46430 } } }, - "org.lwjgl:lwjgl-jemalloc:3.3.2:natives-linux": { - "name": "org.lwjgl:lwjgl-jemalloc:3.3.4-SNAPSHOT:natives-freebsd", + "org.lwjgl:lwjgl-jemalloc:3.3.2:natives": { + "name": "org.lwjgl:lwjgl-jemalloc:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-jemalloc/3.3.4-SNAPSHOT/lwjgl-jemalloc-3.3.4-20231218.151521-4-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-jemalloc/3.3.4-SNAPSHOT/lwjgl-jemalloc-3.3.4-20231218.151521-4-natives-freebsd.jar", - "sha1": "bdba1662b621228679c7aed87945d1f28c590d5b", - "size": 155867 + "path": "org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-jemalloc/3.3.4/lwjgl-jemalloc-3.3.4-natives-freebsd.jar", + "sha1": "5ee27f3bad4715067cef0630682da4bb5a1b88ac", + "size": 157297 } } }, "org.lwjgl:lwjgl-openal:3.3.2": { - "name": "org.lwjgl:lwjgl-openal:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-openal:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-openal/3.3.4-SNAPSHOT/lwjgl-openal-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-openal/3.3.4-SNAPSHOT/lwjgl-openal-3.3.4-20231218.151521-4.jar", - "sha1": "89d8868c2d688b55e3e923345e4a146c6d034229", - "size": 113094 + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4.jar", + "sha1": "9b74d3ea380c83353d42af43ad9659e04dabe84a", + "size": 113103 } } }, - "org.lwjgl:lwjgl-openal:3.3.2:natives-linux": { - "name": "org.lwjgl:lwjgl-openal:3.3.4-SNAPSHOT:natives-freebsd", + "org.lwjgl:lwjgl-openal:3.3.2:natives": { + "name": "org.lwjgl:lwjgl-openal:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-openal/3.3.4-SNAPSHOT/lwjgl-openal-3.3.4-20231218.151521-4-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-openal/3.3.4-SNAPSHOT/lwjgl-openal-3.3.4-20231218.151521-4-natives-freebsd.jar", - "sha1": "0fc6495e6752727b629cf03a105c9d56087d4edd", - "size": 597512 + "path": "org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-openal/3.3.4/lwjgl-openal-3.3.4-natives-freebsd.jar", + "sha1": "3863f8268f5515c27f1364257f8a018f0c6afa79", + "size": 597486 } } }, "org.lwjgl:lwjgl-opengl:3.3.2": { - "name": "org.lwjgl:lwjgl-opengl:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-opengl:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-opengl/3.3.4-SNAPSHOT/lwjgl-opengl-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-opengl/3.3.4-SNAPSHOT/lwjgl-opengl-3.3.4-20231218.151521-4.jar", - "sha1": "81d0a7fd96bf5eb6257fddf6b77e338d8918bf32", - "size": 931744 + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4.jar", + "sha1": "2852ac7d9f6fc71349f1ce28e2708ff1977f18af", + "size": 931960 } } }, - "org.lwjgl:lwjgl-opengl:3.3.2:natives-linux": { - "name": "org.lwjgl:lwjgl-opengl:3.3.4-SNAPSHOT:natives-freebsd", + "org.lwjgl:lwjgl-opengl:3.3.2:natives": { + "name": "org.lwjgl:lwjgl-opengl:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-opengl/3.3.4-SNAPSHOT/lwjgl-opengl-3.3.4-20231218.151521-4-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-opengl/3.3.4-SNAPSHOT/lwjgl-opengl-3.3.4-20231218.151521-4-natives-freebsd.jar", - "sha1": "d3e8ec997cef8bc66819c7e0ad7a54182f7aff2a", - "size": 81034 + "path": "org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-opengl/3.3.4/lwjgl-opengl-3.3.4-natives-freebsd.jar", + "sha1": "579071d2a3714f5662522f7d3edf58e941580587", + "size": 81028 } } }, "org.lwjgl:lwjgl-glfw:3.3.2": { - "name": "org.lwjgl:lwjgl-glfw:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-glfw:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-glfw/3.3.4-SNAPSHOT/lwjgl-glfw-3.3.4-20231218.151521-4.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-glfw/3.3.4-SNAPSHOT/lwjgl-glfw-3.3.4-20231218.151521-4.jar", - "sha1": "e6dba9ab8532cb6aac273adf26496ce689999943", - "size": 146829 + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4.jar", + "sha1": "7e46ecdec85db8738053cfde1414352cd62dab74", + "size": 147044 } } }, - "org.lwjgl:lwjgl-glfw:3.3.2:natives-linux": { - "name": "org.lwjgl:lwjgl-glfw:3.3.4-SNAPSHOT:natives-freebsd", + "org.lwjgl:lwjgl-glfw:3.3.2:natives": { + "name": "org.lwjgl:lwjgl-glfw:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-glfw/3.3.4-SNAPSHOT/lwjgl-glfw-3.3.4-20231218.151521-4-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-glfw/3.3.4-SNAPSHOT/lwjgl-glfw-3.3.4-20231218.151521-4-natives-freebsd.jar", - "sha1": "4881a965c7679b4984c0d8a5890f07ea85c653c4", - "size": 101847 + "path": "org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-glfw/3.3.4/lwjgl-glfw-3.3.4-natives-freebsd.jar", + "sha1": "f67b9b6c29451d8fea66db17aaba2f65e908c7e9", + "size": 104415 } } }, "org.lwjgl:lwjgl-stb:3.3.2": { - "name": "org.lwjgl:lwjgl-stb:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-stb:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-stb/3.3.4-SNAPSHOT/lwjgl-stb-3.3.4-20231218.151521-3.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-stb/3.3.4-SNAPSHOT/lwjgl-stb-3.3.4-20231218.151521-3.jar", - "sha1": "033fe42d1b37e35afd8b6e2653abc77deadb0730", - "size": 143099 + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4.jar", + "sha1": "5821735d5ef23f6da8542887344e57eb181b7cac", + "size": 143112 } } }, - "org.lwjgl:lwjgl-stb:3.3.2:natives-linux": { - "name": "org.lwjgl:lwjgl-stb:3.3.4-SNAPSHOT:natives-freebsd", + "org.lwjgl:lwjgl-stb:3.3.2:natives": { + "name": "org.lwjgl:lwjgl-stb:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-stb/3.3.4-SNAPSHOT/lwjgl-stb-3.3.4-20231218.151521-3-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-stb/3.3.4-SNAPSHOT/lwjgl-stb-3.3.4-20231218.151521-3-natives-freebsd.jar", - "sha1": "0aad82a857ebb9a3a212dc2c386761d57e11a8f2", - "size": 225735 + "path": "org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-stb/3.3.4/lwjgl-stb-3.3.4-natives-freebsd.jar", + "sha1": "f5551338a1e2035ff747053f0e985dc93db1235c", + "size": 226093 } } }, "org.lwjgl:lwjgl-tinyfd:3.3.2": { - "name": "org.lwjgl:lwjgl-tinyfd:3.3.4-SNAPSHOT", + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-tinyfd/3.3.4-SNAPSHOT/lwjgl-tinyfd-3.3.4-20231218.151521-3.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-tinyfd/3.3.4-SNAPSHOT/lwjgl-tinyfd-3.3.4-20231218.151521-3.jar", - "sha1": "8b7c94a57f56a5b38b23c02c1cada77dccba9930", - "size": 15917 + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4.jar", + "sha1": "2d73789ffd8962b38d9d599cc38b2383ce818c7a", + "size": 15928 } } }, - "org.lwjgl:lwjgl-tinyfd:3.3.2:natives-linux": { - "name": "org.lwjgl:lwjgl-tinyfd:3.3.4-SNAPSHOT:natives-freebsd", + "org.lwjgl:lwjgl-tinyfd:3.3.2:natives": { + "name": "org.lwjgl:lwjgl-tinyfd:3.3.4:natives-freebsd", "downloads": { "artifact": { - "path": "org/lwjgl/lwjgl-tinyfd/3.3.4-SNAPSHOT/lwjgl-tinyfd-3.3.4-20231218.151521-3-natives-freebsd.jar", - "url": "https://oss.sonatype.org/content/repositories/snapshots/org/lwjgl/lwjgl-tinyfd/3.3.4-SNAPSHOT/lwjgl-tinyfd-3.3.4-20231218.151521-3-natives-freebsd.jar", - "sha1": "124d0e48ae1584f09e5701588ae8ad139be26003", - "size": 39077 + "path": "org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-freebsd.jar", + "url": "https://repo1.maven.org/maven2/org/lwjgl/lwjgl-tinyfd/3.3.4/lwjgl-tinyfd-3.3.4-natives-freebsd.jar", + "sha1": "acd5e1b9b9b99ce4d21867058ee468ee45a859e5", + "size": 40104 } } }, diff --git a/PLATFORM.md b/PLATFORM.md index 3205c5ee37..3826696f8e 100644 --- a/PLATFORM.md +++ b/PLATFORM.md @@ -2,17 +2,17 @@ English | [简体中文](PLATFORM_cn.md) -| | Windows | Linux | Mac OS | FreeBSD | -|----------------------------|:--------------------------------------------------|:---------------------------|:------------------------------------------------------------------------|:---------------------------| -| x86-64 | ✅️ | ✅️ | ✅️ | 👌 (Minecraft 1.13~1.20.4) | -| x86 | ✅️ | ✅️ | / | / | -| ARM64 | 👌 (Minecraft 1.8~1.18.2)
✅ (Minecraft 1.19+) | 👌 (Minecraft 1.8~1.20.6) | 👌 (Minecraft 1.6~1.18.2)
✅ (Minecraft 1.19+)
✅ (use Rosetta 2) | ❔ | -| ARM32 | /️ | 👌 (Minecraft 1.8~1.20.1) | / | / | -| MIPS64el | / | 👌 (Minecraft 1.8~1.20.1) | / | / | -| RISC-V 64 | / | 👌 (Minecraft 1.13~1.20.4) | / | / | -| LoongArch64 | / | 👌 (Minecraft 1.6~1.20.1) | / | / | -| PowerPC-64 (Little-Endian) | / | ❔ | / | / | -| S390x | / | ❔ | / | / | +| | Windows | Linux | Mac OS | FreeBSD | +|----------------------------|:--------------------------------------------------|:--------------------------|:------------------------------------------------------------------------|:-------------------------| +| x86-64 | ✅️ | ✅️ | ✅️ | 👌 (Minecraft 1.13~1.21) | +| x86 | ✅️ (~1.20.4) | ✅️ (~1.20.4) | / | / | +| ARM64 | 👌 (Minecraft 1.8~1.18.2)
✅ (Minecraft 1.19+) | 👌 (Minecraft 1.8~1.20.6) | 👌 (Minecraft 1.6~1.18.2)
✅ (Minecraft 1.19+)
✅ (use Rosetta 2) | ❔ | +| ARM32 | /️ | 👌 (Minecraft 1.8~1.20.1) | / | / | +| MIPS64el | / | 👌 (Minecraft 1.8~1.20.1) | / | / | +| RISC-V 64 | / | 👌 (Minecraft 1.13~1.21) | / | / | +| LoongArch64 | / | 👌 (Minecraft 1.6~1.20.1) | / | / | +| PowerPC-64 (Little-Endian) | / | ❔ | / | / | +| S390x | / | ❔ | / | / | Legend: diff --git a/PLATFORM_cn.md b/PLATFORM_cn.md index c0298173b6..0fe094933f 100644 --- a/PLATFORM_cn.md +++ b/PLATFORM_cn.md @@ -2,17 +2,17 @@ [English](PLATFORM.md) | 简体中文 -| | Windows | Linux | Mac OS | FreeBSD | -|------------------|:---------------------------------------------------|:---------------------------|:-----------------------------------------------------------------------|:--------------------------| -| x86-64 | ✅️ | ✅️ | ✅️ | 👌(Minecraft 1.13~1.20.4) | -| x86 | ✅️ | ✅️ | / | / | -| ARM64 | 👌 (Minecraft 1.8~1.18.2)
✅ (Minecraft 1.19+) | 👌 (Minecraft 1.8~1.20.6) | 👌 (Minecraft 1.6~1.18.2)
✅ (Minecraft 1.19+)
✅ (使用 Rosetta 2) | ❔ | -| ARM32 | /️ | 👌 (Minecraft 1.6~1.20.1) | / | / | -| MIPS64el | / | 👌 (Minecraft 1.6~1.20.1) | / | / | -| RISC-V 64 | / | 👌 (Minecraft 1.13~1.20.4) | / | / | -| LoongArch64 | / | 👌 (Minecraft 1.6~1.20.1) | / | / | -| PowerPC-64 (小端序) | / | ❔ | / | / | -| S390x | / | ❔ | / | / | +| | Windows | Linux | Mac OS | FreeBSD | +|----------------------------|:--------------------------------------------------|:---------------------------|:-----------------------------------------------------------------------|:------------------------| +| x86-64 | ✅️ | ✅️ | ✅️ | 👌(Minecraft 1.13~1.21) | +| x86 | ✅️ (~1.20.4) | ✅️ (~1.20.4) | / | / | +| ARM64 | 👌 (Minecraft 1.8~1.18.2)
✅ (Minecraft 1.19+) | 👌 (Minecraft 1.8~1.21) | 👌 (Minecraft 1.6~1.18.2)
✅ (Minecraft 1.19+)
✅ (使用 Rosetta 2) | ❔ | +| ARM32 | /️ | 👌 (Minecraft 1.6~1.20.1) | / | / | +| MIPS64el | / | 👌 (Minecraft 1.6~1.20.1) | / | / | +| RISC-V 64 | / | 👌 (Minecraft 1.13~1.21) | / | / | +| LoongArch64 | / | 👌 (Minecraft 1.6~1.20.1) | / | / | +| PowerPC-64 (Little-Endian) | / | ❔ | / | / | +| S390x | / | ❔ | / | / | 图例: From e8306ea59a517b4367c070dca8bc5029ccf5895e Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Sun, 28 Jul 2024 02:41:08 +0800 Subject: [PATCH 22/24] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20#3099=20=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=AE=89=E8=A3=85=E9=80=89=E9=A1=B9=E5=8D=A1=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E9=80=89=E6=8B=A9=E7=89=88=E6=9C=AC=EF=BC=88Minecraft?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=92=8C=E6=A8=A1=E7=BB=84=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E5=99=A8=E7=89=88=E6=9C=AC=EF=BC=89=E7=9A=84=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E6=B6=88=E5=A4=B1=E7=9A=84=E9=97=AE=E9=A2=98=20(#3117)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix #3099 * Fix: checkstyle * Fix. * Fix #3144 * Update * Fix bugs. * Change I18N * Fix #3164 * Delete State.SEALED * fix typo --------- Co-authored-by: Glavo --- .../jackhuang/hmcl/ui/GameCrashWindow.java | 2 +- .../org/jackhuang/hmcl/ui/InstallerItem.java | 304 ++++++++++++------ .../ui/download/AdditionalInstallersPage.java | 10 +- .../hmcl/ui/download/DownloadPage.java | 2 +- .../hmcl/ui/download/InstallersPage.java | 28 +- .../hmcl/ui/download/ModpackPage.java | 2 +- .../hmcl/ui/versions/InstallerListPage.java | 61 ++-- .../hmcl/ui/versions/ModListPageSkin.java | 2 +- .../resources/assets/lang/I18N.properties | 6 +- .../resources/assets/lang/I18N_es.properties | 3 +- .../resources/assets/lang/I18N_ja.properties | 3 +- .../resources/assets/lang/I18N_ru.properties | 3 +- .../resources/assets/lang/I18N_zh.properties | 6 +- .../assets/lang/I18N_zh_CN.properties | 6 +- .../java/org/jackhuang/hmcl/game/Version.java | 4 +- config/checkstyle/checkstyle.xml | 2 +- 16 files changed, 264 insertions(+), 180 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameCrashWindow.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameCrashWindow.java index 327d17a308..50ec8535a2 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameCrashWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameCrashWindow.java @@ -337,7 +337,7 @@ private final class View extends VBox { TwoLineListItem version = new TwoLineListItem(); version.getStyleClass().setAll("two-line-item-second-large"); - version.setTitle(i18n("archive.game_version")); + version.setTitle(i18n("game.version")); version.setSubtitle(GameCrashWindow.this.version.getId()); TwoLineListItem total_memory = new TwoLineListItem(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java index b6cf2a2de9..4a6bffe799 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java @@ -18,9 +18,10 @@ package org.jackhuang.hmcl.ui; import com.jfoenix.controls.JFXButton; -import javafx.beans.InvalidationListener; +import javafx.beans.Observable; import javafx.beans.binding.Bindings; -import javafx.beans.property.*; +import javafx.beans.property.ObjectProperty; +import javafx.beans.property.SimpleObjectProperty; import javafx.css.PseudoClass; import javafx.event.EventHandler; import javafx.geometry.Insets; @@ -55,29 +56,77 @@ public class InstallerItem extends Control { private final String id; private final VersionIconType iconType; - public final StringProperty libraryVersion = new SimpleStringProperty(); - public final StringProperty incompatibleLibraryName = new SimpleStringProperty(); - public final StringProperty dependencyName = new SimpleStringProperty(); - public final BooleanProperty incompatibleWithGame = new SimpleBooleanProperty(); - public final BooleanProperty removable = new SimpleBooleanProperty(); - public final BooleanProperty upgradable = new SimpleBooleanProperty(false); - public final BooleanProperty installable = new SimpleBooleanProperty(true); - public final ObjectProperty> removeAction = new SimpleObjectProperty<>(); - public final ObjectProperty> action = new SimpleObjectProperty<>(); - - private Style style = Style.LIST_ITEM; + private final Style style; + private final ObjectProperty versionProperty = new SimpleObjectProperty<>(this, "version", null); + private final ObjectProperty resolvedStateProperty = new SimpleObjectProperty<>(this, "resolvedState", InstallableState.INSTANCE); + + private final ObjectProperty> installActionProperty = new SimpleObjectProperty<>(this, "installAction"); + private final ObjectProperty> removeActionProperty = new SimpleObjectProperty<>(this, "removeAction"); + + public interface State { + } + + public static final class InstallableState implements State { + public static final InstallableState INSTANCE = new InstallableState(); + + private InstallableState() { + } + } + + public static final class IncompatibleState implements State { + private final String incompatibleItemName; + private final String incompatibleItemVersion; + + public IncompatibleState(String incompatibleItemName, String incompatibleItemVersion) { + this.incompatibleItemName = incompatibleItemName; + this.incompatibleItemVersion = incompatibleItemVersion; + } + + public String getIncompatibleItemName() { + return incompatibleItemName; + } + + public String getIncompatibleItemVersion() { + return incompatibleItemVersion; + } + } + + public static final class InstalledState implements State { + private final String version; + private final boolean external; + private final boolean incompatibleWithGame; + + public InstalledState(String version, boolean external, boolean incompatibleWithGame) { + this.version = version; + this.external = external; + this.incompatibleWithGame = incompatibleWithGame; + } + + public String getVersion() { + return version; + } + + public boolean isExternal() { + return external; + } + + public boolean isIncompatibleWithGame() { + return incompatibleWithGame; + } + } public enum Style { LIST_ITEM, CARD, } - public InstallerItem(LibraryAnalyzer.LibraryType id) { - this(id.getPatchId()); + public InstallerItem(LibraryAnalyzer.LibraryType id, Style style) { + this(id.getPatchId(), style); } - public InstallerItem(String id) { + public InstallerItem(String id, Style style) { this.id = id; + this.style = style; switch (id) { case "game": @@ -109,18 +158,24 @@ public InstallerItem(String id) { } } - public void setStyleMode(Style style) { - this.style = style; + public String getLibraryId() { + return id; } - public void setState(String libraryVersion, boolean incompatibleWithGame, boolean removable) { - this.libraryVersion.set(libraryVersion); - this.incompatibleWithGame.set(incompatibleWithGame); - this.removable.set(removable); + public ObjectProperty versionProperty() { + return versionProperty; } - public String getLibraryId() { - return id; + public ObjectProperty resolvedStateProperty() { + return resolvedStateProperty; + } + + public ObjectProperty> installActionProperty() { + return installActionProperty; + } + + public ObjectProperty> removeActionProperty() { + return removeActionProperty; } @Override @@ -129,35 +184,25 @@ protected Skin createDefaultSkin() { } public final static class InstallerItemGroup { - public final InstallerItem game = new InstallerItem(MINECRAFT); - public final InstallerItem fabric = new InstallerItem(FABRIC); - public final InstallerItem fabricApi = new InstallerItem(FABRIC_API); - public final InstallerItem forge = new InstallerItem(FORGE); - public final InstallerItem neoForge = new InstallerItem(NEO_FORGE); - public final InstallerItem liteLoader = new InstallerItem(LITELOADER); - public final InstallerItem optiFine = new InstallerItem(OPTIFINE); - public final InstallerItem quilt = new InstallerItem(QUILT); - public final InstallerItem quiltApi = new InstallerItem(QUILT_API); + private final InstallerItem game; private final InstallerItem[] libraries; - private final HashMap> incompatibleMap = new HashMap<>(); - - private Set getIncompatibles(InstallerItem item) { + private Set getIncompatibles(Map> incompatibleMap, InstallerItem item) { return incompatibleMap.computeIfAbsent(item, it -> new HashSet<>()); } - private void addIncompatibles(InstallerItem item, InstallerItem... others) { - Set set = getIncompatibles(item); + private void addIncompatibles(Map> incompatibleMap, InstallerItem item, InstallerItem... others) { + Set set = getIncompatibles(incompatibleMap, item); for (InstallerItem other : others) { set.add(other); - getIncompatibles(other).add(item); + getIncompatibles(incompatibleMap, other).add(item); } } - private void mutualIncompatible(InstallerItem... items) { + private void mutualIncompatible(Map> incompatibleMap, InstallerItem... items) { for (InstallerItem item : items) { - Set set = getIncompatibles(item); + Set set = getIncompatibles(incompatibleMap, item); for (InstallerItem item2 : items) { if (item2 != item) { @@ -167,43 +212,65 @@ private void mutualIncompatible(InstallerItem... items) { } } - public InstallerItemGroup(String gameVersion) { - mutualIncompatible(forge, fabric, quilt, neoForge, liteLoader); - addIncompatibles(optiFine, fabric, quilt, neoForge); - addIncompatibles(fabricApi, forge, quiltApi, neoForge, liteLoader, optiFine); - addIncompatibles(quiltApi, forge, fabric, fabricApi, neoForge, liteLoader, optiFine); - - InvalidationListener listener = o -> { - for (Map.Entry> entry : incompatibleMap.entrySet()) { - InstallerItem item = entry.getKey(); - - String incompatibleId = null; - for (InstallerItem other : entry.getValue()) { - if (other.libraryVersion.get() != null) { - incompatibleId = other.id; - break; + public InstallerItemGroup(String gameVersion, Style style) { + game = new InstallerItem(MINECRAFT, style); + InstallerItem fabric = new InstallerItem(FABRIC, style); + InstallerItem fabricApi = new InstallerItem(FABRIC_API, style); + InstallerItem forge = new InstallerItem(FORGE, style); + InstallerItem neoForge = new InstallerItem(NEO_FORGE, style); + InstallerItem liteLoader = new InstallerItem(LITELOADER, style); + InstallerItem optiFine = new InstallerItem(OPTIFINE, style); + InstallerItem quilt = new InstallerItem(QUILT, style); + InstallerItem quiltApi = new InstallerItem(QUILT_API, style); + + Map> incompatibleMap = new HashMap<>(); + mutualIncompatible(incompatibleMap, forge, fabric, quilt, neoForge, liteLoader); + addIncompatibles(incompatibleMap, optiFine, fabric, quilt, neoForge); + addIncompatibles(incompatibleMap, fabricApi, forge, quiltApi, neoForge, liteLoader, optiFine); + addIncompatibles(incompatibleMap, quiltApi, forge, fabric, fabricApi, neoForge, liteLoader, optiFine); + + for (Map.Entry> entry : incompatibleMap.entrySet()) { + InstallerItem item = entry.getKey(); + Set incompatibleItems = entry.getValue(); + + Observable[] bindings = new Observable[incompatibleItems.size() + 1]; + bindings[0] = item.versionProperty; + int i = 1; + for (InstallerItem other : incompatibleItems) { + bindings[i++] = other.versionProperty; + } + + item.resolvedStateProperty.bind(Bindings.createObjectBinding(() -> { + InstalledState itemVersion = item.versionProperty.get(); + if (itemVersion != null) { + return itemVersion; + } + + for (InstallerItem other : incompatibleItems) { + InstalledState otherVersion = other.versionProperty.get(); + if (otherVersion != null) { + return new IncompatibleState(other.id, otherVersion.version); } } - item.incompatibleLibraryName.set(incompatibleId); - } - }; - for (InstallerItem item : incompatibleMap.keySet()) { - item.libraryVersion.addListener(listener); + return InstallableState.INSTANCE; + }, bindings)); } - fabricApi.dependencyName.bind(Bindings.createStringBinding(() -> { - if (fabric.libraryVersion.get() == null) return FABRIC.getPatchId(); - else return null; - }, fabric.libraryVersion)); + if (gameVersion != null) { + game.versionProperty.set(new InstalledState(gameVersion, false, false)); + } - quiltApi.dependencyName.bind(Bindings.createStringBinding(() -> { - if (quilt.libraryVersion.get() == null) return QUILT.getPatchId(); - else return null; - }, quilt.libraryVersion)); + InstallerItem[] all = {game, forge, neoForge, liteLoader, optiFine, fabric, fabricApi, quilt, quiltApi}; + + for (InstallerItem item : all) { + if (!item.resolvedStateProperty.isBound()) { + item.resolvedStateProperty.bind(item.versionProperty); + } + } if (gameVersion == null) { - this.libraries = new InstallerItem[]{game, forge, neoForge, liteLoader, optiFine, fabric, fabricApi, quilt, quiltApi}; + this.libraries = all; } else if (GameVersionNumber.compare(gameVersion, "1.13") < 0) { this.libraries = new InstallerItem[]{game, forge, liteLoader, optiFine}; } else { @@ -211,15 +278,19 @@ public InstallerItemGroup(String gameVersion) { } } + public InstallerItem getGame() { + return game; + } + public InstallerItem[] getLibraries() { return libraries; } } - public static class InstallerItemSkin extends SkinBase { - + private static final class InstallerItemSkin extends SkinBase { private static final PseudoClass LIST_ITEM = PseudoClass.getPseudoClass("list-item"); private static final PseudoClass CARD = PseudoClass.getPseudoClass("card"); + private static final WeakListenerHolder holder = new WeakListenerHolder(); InstallerItemSkin(InstallerItem control) { super(control); @@ -227,6 +298,7 @@ public static class InstallerItemSkin extends SkinBase { Pane pane; if (control.style == Style.CARD) { pane = new VBox(); + holder.add(FXUtils.onWeakChangeAndOperate(pane.widthProperty(), v -> FXUtils.setLimitHeight(pane, v.doubleValue() * 0.7))); } else { pane = new HBox(); } @@ -262,20 +334,25 @@ public static class InstallerItemSkin extends SkinBase { pane.getChildren().add(statusLabel); HBox.setHgrow(statusLabel, Priority.ALWAYS); statusLabel.textProperty().bind(Bindings.createStringBinding(() -> { - String incompatibleWith = control.incompatibleLibraryName.get(); - String version = control.libraryVersion.get(); - if (control.incompatibleWithGame.get()) { - return i18n("install.installer.change_version", version); - } else if (incompatibleWith != null) { - return i18n("install.installer.incompatible", i18n("install.installer." + incompatibleWith)); - } else if (version == null) { + State state = control.resolvedStateProperty.get(); + + if (state instanceof InstalledState) { + InstalledState s = (InstalledState) state; + if (s.incompatibleWithGame) { + return i18n("install.installer.change_version", s.version); + } + if (s.external) { + return i18n("install.installer.external_version", s.version); + } + return i18n("install.installer.version", s.version); + } else if (state instanceof InstallableState) { return i18n("install.installer.not_installed"); - } else if (control.id.equals(MINECRAFT.getPatchId()) || control.removable.get() || control.upgradable.get()) { - return i18n("install.installer.version", version); + } else if (state instanceof IncompatibleState) { + return i18n("install.installer.incompatible", i18n("install.installer." + ((IncompatibleState) state).incompatibleItemName)); } else { - return i18n("install.installer.external_version", version); + throw new AssertionError("Unknown state type: " + state.getClass()); } - }, control.incompatibleLibraryName, control.incompatibleWithGame, control.libraryVersion, control.installable, control.removable, control.upgradable)); + }, control.resolvedStateProperty)); BorderPane.setMargin(statusLabel, new Insets(0, 0, 0, 8)); BorderPane.setAlignment(statusLabel, Pos.CENTER_LEFT); @@ -284,31 +361,48 @@ public static class InstallerItemSkin extends SkinBase { buttonsContainer.setAlignment(Pos.CENTER); pane.getChildren().add(buttonsContainer); - JFXButton closeButton = new JFXButton(); - closeButton.setGraphic(SVG.CLOSE.createIcon(Theme.blackFill(), -1, -1)); - closeButton.getStyleClass().add("toggle-icon4"); - closeButton.visibleProperty().bind(control.removable); - closeButton.managedProperty().bind(closeButton.visibleProperty()); - closeButton.onMouseClickedProperty().bind(control.removeAction); - buttonsContainer.getChildren().add(closeButton); - - JFXButton arrowButton = new JFXButton(); - arrowButton.graphicProperty().bind(Bindings.createObjectBinding(() -> control.upgradable.get() - ? SVG.UPDATE.createIcon(Theme.blackFill(), -1, -1) - : SVG.ARROW_RIGHT.createIcon(Theme.blackFill(), -1, -1), - control.upgradable)); - arrowButton.getStyleClass().add("toggle-icon4"); - arrowButton.visibleProperty().bind(Bindings.createBooleanBinding( - () -> control.installable.get() && control.libraryVersion.get() == null && control.incompatibleLibraryName.get() == null, - control.installable, control.libraryVersion, control.incompatibleLibraryName + JFXButton removeButton = new JFXButton(); + removeButton.setGraphic(SVG.CLOSE.createIcon(Theme.blackFill(), -1, -1)); + removeButton.getStyleClass().add("toggle-icon4"); + if (control.id.equals(MINECRAFT.getPatchId())) { + removeButton.setVisible(false); + } else { + removeButton.visibleProperty().bind(Bindings.createBooleanBinding(() -> control.resolvedStateProperty.get() instanceof InstalledState, control.resolvedStateProperty)); + } + removeButton.managedProperty().bind(removeButton.visibleProperty()); + removeButton.onMouseClickedProperty().bind(control.removeActionProperty); + buttonsContainer.getChildren().add(removeButton); + + JFXButton installButton = new JFXButton(); + installButton.graphicProperty().bind(Bindings.createObjectBinding(() -> + control.resolvedStateProperty.get() instanceof InstallableState ? + SVG.ARROW_RIGHT.createIcon(Theme.blackFill(), -1, -1) : + SVG.UPDATE.createIcon(Theme.blackFill(), -1, -1), + control.resolvedStateProperty )); - arrowButton.managedProperty().bind(arrowButton.visibleProperty()); - arrowButton.onMouseClickedProperty().bind(control.action); - buttonsContainer.getChildren().add(arrowButton); + installButton.getStyleClass().add("toggle-icon4"); + installButton.visibleProperty().bind(Bindings.createBooleanBinding(() -> { + if (control.installActionProperty.get() == null) { + return false; + } + + State state = control.resolvedStateProperty.get(); + if (state instanceof InstallableState) { + return true; + } + if (state instanceof InstalledState) { + return !((InstalledState) state).external; + } + + return false; + }, control.resolvedStateProperty, control.installActionProperty)); + installButton.managedProperty().bind(installButton.visibleProperty()); + installButton.onMouseClickedProperty().bind(control.installActionProperty); + buttonsContainer.getChildren().add(installButton); - FXUtils.onChangeAndOperate(arrowButton.visibleProperty(), clickable -> { + FXUtils.onChangeAndOperate(installButton.visibleProperty(), clickable -> { if (clickable) { - container.onMouseClickedProperty().bind(control.action); + container.onMouseClickedProperty().bind(control.installActionProperty); pane.setCursor(Cursor.HAND); } else { container.onMouseClickedProperty().unbind(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AdditionalInstallersPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AdditionalInstallersPage.java index 0bbb02d654..e2b14a5986 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AdditionalInstallersPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/AdditionalInstallersPage.java @@ -33,7 +33,7 @@ import java.util.Map; import java.util.Optional; -import static org.jackhuang.hmcl.download.LibraryAnalyzer.LibraryType.*; +import static org.jackhuang.hmcl.download.LibraryAnalyzer.LibraryType.MINECRAFT; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; class AdditionalInstallersPage extends InstallersPage { @@ -59,7 +59,7 @@ public AdditionalInstallersPage(String gameVersion, Version version, WizardContr for (InstallerItem library : group.getLibraries()) { String libraryId = library.getLibraryId(); if (libraryId.equals("game")) continue; - library.removeAction.set(e -> { + library.removeActionProperty().set(e -> { controller.getSettings().put(libraryId, new UpdateInstallerWizardProvider.RemoveVersionAction(libraryId)); reload(); }); @@ -99,12 +99,12 @@ protected void reload() { if (!"game".equals(libraryId) && currentGameVersion != null && !currentGameVersion.equals(game) && getVersion(libraryId) == null && alreadyInstalled) { // For third-party libraries, if game version is being changed, and the library is not being reinstalled, // warns the user that we should update the library. - library.setState(libraryVersion, /* incompatibleWithGame */ true, /* removable */ true); + library.versionProperty().set(new InstallerItem.InstalledState(libraryVersion, false, true)); compatible = false; } else if (alreadyInstalled || getVersion(libraryId) != null) { - library.setState(libraryVersion, /* incompatibleWithGame */ false, /* removable */ true); + library.versionProperty().set(new InstallerItem.InstalledState(libraryVersion, false, false)); } else { - library.setState(/* libraryVersion */ null, /* incompatibleWithGame */ false, /* removable */ false); + library.versionProperty().set(null); } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadPage.java index 72d033ca8b..20a0692bd1 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/DownloadPage.java @@ -162,7 +162,7 @@ private static void download(Profile profile, @Nullable String version, RemoteMo Path runDirectory = profile.getRepository().hasVersion(version) ? profile.getRepository().getRunDirectory(version).toPath() : profile.getRepository().getBaseDirectory().toPath(); - Controllers.prompt(i18n("archive.name"), (result, resolve, reject) -> { + Controllers.prompt(i18n("archive.file.name"), (result, resolve, reject) -> { if (!OperatingSystem.isNameValid(result)) { reject.accept(i18n("install.new_game.malformed")); return; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallersPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallersPage.java index aa6cc4fa81..b9c8e0c338 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallersPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/InstallersPage.java @@ -54,7 +54,7 @@ public class InstallersPage extends Control implements WizardPage { public InstallersPage(WizardController controller, HMCLGameRepository repository, String gameVersion, DownloadProvider downloadProvider) { this.controller = controller; - this.group = new InstallerItem.InstallerItemGroup(gameVersion); + this.group = new InstallerItem.InstallerItemGroup(gameVersion, getInstallerItemStyle()); txtName.getValidators().addAll( new RequiredValidator(), @@ -63,33 +63,31 @@ public InstallersPage(WizardController controller, HMCLGameRepository repository installable.bind(createBooleanBinding(txtName::validate, txtName.textProperty())); txtName.setText(gameVersion); - group.game.installable.setValue(false); - - for (InstallerItem item : group.getLibraries()) { - item.setStyleMode(InstallerItem.Style.CARD); - } - for (InstallerItem library : group.getLibraries()) { String libraryId = library.getLibraryId(); if (libraryId.equals(LibraryAnalyzer.LibraryType.MINECRAFT.getPatchId())) continue; - library.action.set(e -> { + library.installActionProperty().set(e -> { if (LibraryAnalyzer.LibraryType.FABRIC_API.getPatchId().equals(libraryId)) { Controllers.dialog(i18n("install.installer.fabric-api.warning"), i18n("message.warning"), MessageDialogPane.MessageType.WARNING); } - if (library.incompatibleLibraryName.get() == null) + if (!(library.resolvedStateProperty().get() instanceof InstallerItem.IncompatibleState)) controller.onNext(new VersionsPage(controller, i18n("install.installer.choose", i18n("install.installer." + libraryId)), gameVersion, downloadProvider, libraryId, () -> controller.onPrev(false))); }); - library.removeAction.set(e -> { + library.removeActionProperty().set(e -> { controller.getSettings().remove(libraryId); reload(); }); } } + protected InstallerItem.Style getInstallerItemStyle() { + return InstallerItem.Style.CARD; + } + @Override public String getTitle() { - return i18n("install.new_game"); + return group.getGame().versionProperty().get().getVersion(); } private String getVersion(String id) { @@ -100,11 +98,9 @@ protected void reload() { for (InstallerItem library : group.getLibraries()) { String libraryId = library.getLibraryId(); if (controller.getSettings().containsKey(libraryId)) { - library.libraryVersion.set(getVersion(libraryId)); - library.removable.set(true); + library.versionProperty().set(new InstallerItem.InstalledState(getVersion(libraryId), false, false)); } else { - library.libraryVersion.set(null); - library.removable.set(false); + library.versionProperty().set(null); } } } @@ -148,7 +144,7 @@ protected InstallersPageSkin(InstallersPage control) { versionNamePane.setAlignment(Pos.CENTER_LEFT); control.txtName.setMaxWidth(300); - versionNamePane.getChildren().setAll(new Label(i18n("archive.name")), control.txtName); + versionNamePane.getChildren().setAll(new Label(i18n("version.name")), control.txtName); root.setTop(versionNamePane); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackPage.java index 0f93bd0ce0..2240b5d18f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackPage.java @@ -48,7 +48,7 @@ protected ModpackPage(WizardController controller) { BorderPane archiveNamePane = new BorderPane(); { - Label label = new Label(i18n("archive.name")); + Label label = new Label(i18n("archive.file.name")); BorderPane.setAlignment(label, Pos.CENTER_LEFT); archiveNamePane.setLeft(label); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/InstallerListPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/InstallerListPage.java index d65df18fc6..aea2967a7e 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/InstallerListPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/InstallerListPage.java @@ -38,7 +38,6 @@ import java.util.Collections; import java.util.List; import java.util.concurrent.CompletableFuture; -import java.util.function.Function; import static org.jackhuang.hmcl.ui.FXUtils.runInFX; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; @@ -73,37 +72,36 @@ public void loadVersion(Profile profile, String versionId) { return LibraryAnalyzer.analyze(profile.getRepository().getResolvedPreservingPatchesVersion(versionId), gameVersion); }).thenAcceptAsync(analyzer -> { - Function removeAction = libraryId -> () -> { - profile.getDependency().removeLibraryAsync(version, libraryId) - .thenComposeAsync(profile.getRepository()::saveAsync) - .withComposeAsync(profile.getRepository().refreshVersionsAsync()) - .withRunAsync(Schedulers.javafx(), () -> loadVersion(this.profile, this.versionId)) - .start(); - }; - itemsProperty().clear(); - InstallerItem.InstallerItemGroup group = new InstallerItem.InstallerItemGroup(gameVersion); + InstallerItem.InstallerItemGroup group = new InstallerItem.InstallerItemGroup(gameVersion, InstallerItem.Style.LIST_ITEM); // Conventional libraries: game, fabric, forge, neoforge, liteloader, optifine - for (InstallerItem installerItem : group.getLibraries()) { - String libraryId = installerItem.getLibraryId(); + for (InstallerItem item : group.getLibraries()) { + String libraryId = item.getLibraryId(); String libraryVersion = analyzer.getVersion(libraryId).orElse(null); - boolean libraryConfigurable = libraryVersion != null && analyzer.getLibraryStatus(libraryId) == LibraryAnalyzer.LibraryMark.LibraryStatus.CLEAR; - installerItem.libraryVersion.set(libraryVersion); - installerItem.upgradable.set(libraryConfigurable); - installerItem.installable.set(true); - installerItem.action.set(e -> { + if (libraryVersion != null) { + item.versionProperty().set(new InstallerItem.InstalledState( + libraryVersion, + analyzer.getLibraryStatus(libraryId) != LibraryAnalyzer.LibraryMark.LibraryStatus.CLEAR, + false + )); + } else { + item.versionProperty().set(null); + } + + item.installActionProperty().set(e -> { Controllers.getDecorator().startWizard(new UpdateInstallerWizardProvider(profile, gameVersion, version, libraryId, libraryVersion)); }); - boolean removable = !LibraryAnalyzer.LibraryType.MINECRAFT.getPatchId().equals(libraryId) && libraryConfigurable; - installerItem.removable.set(removable); - if (removable) { - Runnable action = removeAction.apply(libraryId); - installerItem.removeAction.set(e -> action.run()); - } - itemsProperty().add(installerItem); + + item.removeActionProperty().set(e -> profile.getDependency().removeLibraryAsync(version, libraryId) + .thenComposeAsync(profile.getRepository()::saveAsync) + .withComposeAsync(profile.getRepository().refreshVersionsAsync()) + .withRunAsync(Schedulers.javafx(), () -> loadVersion(this.profile, this.versionId)) + .start()); + + itemsProperty().add(item); } // other third-party libraries which are unable to manage. @@ -115,14 +113,13 @@ public void loadVersion(Profile profile, String versionId) { if (LibraryAnalyzer.LibraryType.fromPatchId(libraryId) != null) continue; - Runnable action = removeAction.apply(libraryId); - - InstallerItem installerItem = new InstallerItem(libraryId); - installerItem.libraryVersion.set(libraryVersion); - installerItem.installable.set(false); - installerItem.upgradable.set(false); - installerItem.removable.set(true); - installerItem.removeAction.set(e -> action.run()); + InstallerItem installerItem = new InstallerItem(libraryId, InstallerItem.Style.LIST_ITEM); + installerItem.versionProperty().set(new InstallerItem.InstalledState(libraryVersion, false, false)); + installerItem.removeActionProperty().set(e -> profile.getDependency().removeLibraryAsync(version, libraryId) + .thenComposeAsync(profile.getRepository()::saveAsync) + .withComposeAsync(profile.getRepository().refreshVersionsAsync()) + .withRunAsync(Schedulers.javafx(), () -> loadVersion(this.profile, this.versionId)) + .start()); itemsProperty().add(installerItem); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPageSkin.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPageSkin.java index 188a72bb8b..acd647a5fd 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPageSkin.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPageSkin.java @@ -260,7 +260,7 @@ static class ModInfoObject extends RecursiveTreeObject implements StringBuilder message = new StringBuilder(localModFile.getFileName()); if (isNotBlank(localModFile.getGameVersion())) - message.append(", ").append(i18n("archive.game_version")).append(": ").append(localModFile.getGameVersion()); + message.append(", ").append(i18n("game.version")).append(": ").append(localModFile.getGameVersion()); if (isNotBlank(localModFile.getAuthors())) message.append(", ").append(i18n("archive.author")).append(": ").append(localModFile.getAuthors()); this.message = message.toString(); diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index 18b995dace..dc1bdd651e 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -159,8 +159,7 @@ account.username=Username archive.author=Author(s) archive.date=Publish Date -archive.game_version=Game Version -archive.name=Filename +archive.file.name=File Name archive.version=Version assets.download=Downloading Assets @@ -615,7 +614,7 @@ install.failed.malformed=The downloaded files are corrupted. You can try fixing install.failed.optifine_conflict=Cannot install both Fabric, OptiFine, and Forge on Minecraft 1.13 or above. install.failed.optifine_forge_1.17=For Minecraft version 1.17.1 or lower, Forge only supports OptiFine H1 Pre2 or newer. You can install them under the snapshot versions tab. install.failed.version_mismatch=This library requires the game version %s, but the installed one is %s. -install.installer.change_version=Version %s is not compatible with the current game version. Click here to replace it with another version or delete it. +install.installer.change_version=%s Incompatible install.installer.choose=Choose Your %s Version install.installer.depend=Requires %s install.installer.fabric=Fabric @@ -1224,6 +1223,7 @@ update.no_browser=Cannot open in the system browser. But, we copied the link to update.tooltip=Update version=Games +version.name=Instance Name version.cannot_read=Unable to parse the game version, automatic installation cannot continue. version.empty=No Instances version.empty.add=Add an Instance diff --git a/HMCL/src/main/resources/assets/lang/I18N_es.properties b/HMCL/src/main/resources/assets/lang/I18N_es.properties index a629abbda8..0172d1c54f 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_es.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_es.properties @@ -138,8 +138,7 @@ account.username=Nombre de usuario archive.author=Autor(es) archive.date=Fecha de publicación -archive.game_version=Versión del juego -archive.name=Nombre de archivo +archive.file.name=Nombre de archivo archive.version=Versión assets.download=Descargando assets diff --git a/HMCL/src/main/resources/assets/lang/I18N_ja.properties b/HMCL/src/main/resources/assets/lang/I18N_ja.properties index d77dd2b54b..057ddc5e98 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_ja.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_ja.properties @@ -125,8 +125,7 @@ account.username=ユーザー名 archive.author=作成者 archive.date=公開日 -archive.game_version=ゲームバージョン -archive.name=名前 +archive.file.name=名前 archive.version=バージョン Assets.download=アセットのダウンロード diff --git a/HMCL/src/main/resources/assets/lang/I18N_ru.properties b/HMCL/src/main/resources/assets/lang/I18N_ru.properties index 928b699d2c..37b91035a7 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_ru.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_ru.properties @@ -133,8 +133,7 @@ account.username=Имя пользователя archive.author=Автор(ы) archive.date=Дата публикации -archive.game_version=Версия игры -archive.name=Имя файла +archive.file.name=Имя файла archive.version=Версия assets.download=Скачивание Assets diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index dc00ac1499..a11eb2474b 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -168,8 +168,7 @@ account.username=使用者名稱 archive.author=作者 archive.date=發布日期 -archive.game_version=遊戲版本 -archive.name=名稱 +archive.file.name=檔案名稱 archive.version=版本 assets.download=下載資源 @@ -499,7 +498,7 @@ install.failed.malformed=剛才下載的檔案格式損壞。您可以切換到 install.failed.optifine_conflict=暫不支援 OptiFine 與 Forge 同時安裝在 Minecraft 1.13 上 install.failed.optifine_forge_1.17=Minecraft 1.17.1 下,僅 OptiFine H1 Pre2 及以上版本能相容 Forge。你可以從 OptiFine 測試版中選擇最新版本。 install.failed.version_mismatch=該軟體需要的遊戲版本為 %s,但實際的遊戲版本為 %s。 -install.installer.change_version=%s,該版本與當前遊戲不相容,您需要點擊此處更換版本或刪除 +install.installer.change_version=%s 與當前遊戲不相容,請更換版本 install.installer.choose=選擇 %s 版本 install.installer.depend=需要先安裝 %s install.installer.fabric=Fabric @@ -1081,6 +1080,7 @@ update.no_browser=無法開啟瀏覽器,網址已經複製到剪貼簿了, update.tooltip=更新 version=遊戲 +version.name=遊戲版本名稱 version.cannot_read=讀取遊戲版本失敗,無法進行自動安裝 version.empty=沒有遊戲版本 version.empty.add=進入下載頁安裝遊戲 diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties index 8a5028d8f1..ededc00cd6 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -169,8 +169,7 @@ account.username=用户名 archive.author=作者 archive.date=发布日期 -archive.game_version=游戏版本 -archive.name=名称 +archive.file.name=文件名 archive.version=版本 assets.download=下载资源 @@ -498,7 +497,7 @@ install.failed.malformed=下载的文件格式损坏。您可以在设置-下载 install.failed.optifine_conflict=暂不支持 OptiFine, Fabric 或 OptiFine , Forge 同时安装在 Minecraft 1.13 及以上版本 install.failed.optifine_forge_1.17=Minecraft 1.17.1 下,仅 OptiFine H1 Pre2 及以上版本能兼容 Forge。你可以从 OptiFine 测试版中选择最新版本。 install.failed.version_mismatch=该组件需要的游戏版本为 %s,但实际的游戏版本为 %s。 -install.installer.change_version=%s,该版本与当前游戏不兼容,您需要点击此处更换版本或删除 +install.installer.change_version=%s 与当前游戏不兼容,请更换版本 install.installer.choose=选择 %s 版本 install.installer.depend=需要先安装 %s install.installer.fabric=Fabric @@ -1080,6 +1079,7 @@ update.no_browser=无法打开浏览器,网址已经复制到剪贴板了, update.tooltip=更新 version=游戏 +version.name=游戏版本名称 version.cannot_read=读取游戏版本失败,无法进行自动安装 version.empty=没有游戏版本 version.empty.add=进入下载页安装游戏 diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Version.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Version.java index b50bdd83c8..16bda75f0f 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Version.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/Version.java @@ -296,8 +296,8 @@ protected Version resolve(VersionProvider provider, Set resolvedSoFar) t } if (patches == null) { - // This is a version from external launcher. - thisVersion = thisVersion.merge(this, true); + // This is a version from external launcher. NO need to resolve the patches. + return thisVersion; } else if (!patches.isEmpty()) { // Assume patches themselves do not have patches recursively. List sortedPatches = patches.stream() diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml index daa5be2bf0..900c4340d8 100644 --- a/config/checkstyle/checkstyle.xml +++ b/config/checkstyle/checkstyle.xml @@ -54,7 +54,7 @@ - + From 3ebbdb60ef730f89fd8bef7e9c810aaf12de8e05 Mon Sep 17 00:00:00 2001 From: Glavo Date: Sun, 28 Jul 2024 02:47:52 +0800 Subject: [PATCH 23/24] =?UTF-8?q?Fix=20#3191:=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E5=90=8C=E6=97=B6=E5=AE=89=E8=A3=85=20LiteLo?= =?UTF-8?q?ader=20=E4=B8=8E=20Forge=20=E7=9A=84=E9=97=AE=E9=A2=98=20(#3198?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java index 4a6bffe799..9561bb23a6 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java @@ -224,7 +224,8 @@ public InstallerItemGroup(String gameVersion, Style style) { InstallerItem quiltApi = new InstallerItem(QUILT_API, style); Map> incompatibleMap = new HashMap<>(); - mutualIncompatible(incompatibleMap, forge, fabric, quilt, neoForge, liteLoader); + mutualIncompatible(incompatibleMap, forge, fabric, quilt, neoForge); + addIncompatibles(incompatibleMap, liteLoader, fabric, quilt, neoForge); addIncompatibles(incompatibleMap, optiFine, fabric, quilt, neoForge); addIncompatibles(incompatibleMap, fabricApi, forge, quiltApi, neoForge, liteLoader, optiFine); addIncompatibles(incompatibleMap, quiltApi, forge, fabric, fabricApi, neoForge, liteLoader, optiFine); From 47cc9ebe2bbd86691bf2376ef665e01c10f97fda Mon Sep 17 00:00:00 2001 From: Glavo Date: Mon, 29 Jul 2024 15:46:11 +0800 Subject: [PATCH 24/24] =?UTF-8?q?Fix=20#3199:=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E8=BF=90=E8=A1=8C=E5=9C=A8=20Java=208=20=E4=B8=8A=E6=97=B6?= =?UTF-8?q?=E6=B8=B8=E6=88=8F=E5=AE=89=E8=A3=85=E7=95=8C=E9=9D=A2=E5=8D=A1?= =?UTF-8?q?=E7=89=87=E5=B8=83=E5=B1=80=E7=9A=84=E9=97=AE=E9=A2=98=20(#3201?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java index 9561bb23a6..d622fe9c0b 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/InstallerItem.java @@ -299,7 +299,7 @@ private static final class InstallerItemSkin extends SkinBase { Pane pane; if (control.style == Style.CARD) { pane = new VBox(); - holder.add(FXUtils.onWeakChangeAndOperate(pane.widthProperty(), v -> FXUtils.setLimitHeight(pane, v.doubleValue() * 0.7))); + holder.add(FXUtils.onWeakChange(pane.widthProperty(), v -> FXUtils.setLimitHeight(pane, v.doubleValue() * 0.7))); } else { pane = new HBox(); }