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 01/20] =?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 02/20] =?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 03/20] =?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 04/20] =?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 05/20] =?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(); } From 95a1496389e6a8c2f51697706a20055a7952b8a5 Mon Sep 17 00:00:00 2001 From: Zkitefly <2573874409@qq.com> Date: Tue, 20 Aug 2024 01:08:49 +0800 Subject: [PATCH 06/20] =?UTF-8?q?Fix=20#3223:=20=E6=AD=A3=E7=A1=AE?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E5=8C=85=E5=90=AB=20hash=20=E7=9A=84?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8F=B7=20(#3224)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix #3223 * 使用正则表达式删除内容 * 添加日志 添加日志 * Update GameVersion.java * Update GameVersion.java * update * update * update --------- Co-authored-by: Glavo --- .../main/java/org/jackhuang/hmcl/game/GameVersion.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java index 063c90240d..04188c8857 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/GameVersion.java @@ -35,7 +35,6 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -import static org.jackhuang.hmcl.util.Lang.tryCast; import static org.jackhuang.hmcl.util.logging.Logger.LOG; /** @@ -48,8 +47,11 @@ private GameVersion() { private static Optional getVersionFromJson(InputStream versionJson) { try { Map version = JsonUtils.fromNonNullJsonFully(versionJson, Map.class); - return tryCast(version.get("id"), String.class); - } catch (IOException | JsonParseException e) { + String id = (String) version.get("id"); + if (id != null && id.contains(" / ")) + id = id.substring(0, id.indexOf(" / ")); + return Optional.ofNullable(id); + } catch (IOException | JsonParseException | ClassCastException e) { LOG.warning("Failed to parse version.json", e); return Optional.empty(); } From 0f0cf555090f2518103a9a6b833071ab677ca4c0 Mon Sep 17 00:00:00 2001 From: Zkitefly <2573874409@qq.com> Date: Sat, 24 Aug 2024 03:32:45 +0800 Subject: [PATCH 07/20] =?UTF-8?q?=E6=94=AF=E6=8C=81=20Forge=20=E5=AE=98?= =?UTF-8?q?=E6=96=B9=E6=BA=90=20(#3251)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 支持 Forge 官方源 * 更新 ForgeVersionList.java * 更新 ForgeVersionList.java --- .../hmcl/download/MojangDownloadProvider.java | 6 +++--- .../hmcl/download/forge/ForgeVersionList.java | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java index a0a677f250..86fc3e032f 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java @@ -19,7 +19,7 @@ import org.jackhuang.hmcl.download.fabric.FabricAPIVersionList; import org.jackhuang.hmcl.download.fabric.FabricVersionList; -import org.jackhuang.hmcl.download.forge.ForgeBMCLVersionList; +import org.jackhuang.hmcl.download.forge.ForgeVersionList; import org.jackhuang.hmcl.download.game.GameVersionList; import org.jackhuang.hmcl.download.liteloader.LiteLoaderVersionList; import org.jackhuang.hmcl.download.neoforge.NeoForgeOfficialVersionList; @@ -35,7 +35,7 @@ public class MojangDownloadProvider implements DownloadProvider { private final GameVersionList game; private final FabricVersionList fabric; private final FabricAPIVersionList fabricApi; - private final ForgeBMCLVersionList forge; + private final ForgeVersionList forge; private final NeoForgeOfficialVersionList neoforge; private final LiteLoaderVersionList liteLoader; private final OptiFineBMCLVersionList optifine; @@ -49,7 +49,7 @@ public MojangDownloadProvider() { this.game = new GameVersionList(this); this.fabric = new FabricVersionList(this); this.fabricApi = new FabricAPIVersionList(this); - this.forge = new ForgeBMCLVersionList(apiRoot); + this.forge = new ForgeVersionList(this); this.neoforge = new NeoForgeOfficialVersionList(this); this.liteLoader = new LiteLoaderVersionList(this); this.optifine = new OptiFineBMCLVersionList(apiRoot); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java index fa9a558133..e450a70c13 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java @@ -43,9 +43,17 @@ public boolean hasType() { return false; } + private static String toLookupVersion(String gameVersion) { + return "1.7.10-pre4".equals(gameVersion) ? "1.7.10_pre4" : gameVersion; + } + + private static String fromLookupVersion(String lookupVersion) { + return "1.7.10_pre4".equals(lookupVersion) ? "1.7.10-pre4" : lookupVersion; + } + @Override public CompletableFuture refreshAsync() { - return HttpRequest.GET(downloadProvider.injectURL(FORGE_LIST)).getJsonAsync(ForgeVersionRoot.class) + return HttpRequest.GET(FORGE_LIST).getJsonAsync(ForgeVersionRoot.class) .thenAcceptAsync(root -> { lock.writeLock().lock(); @@ -55,7 +63,7 @@ public CompletableFuture refreshAsync() { versions.clear(); for (Map.Entry entry : root.getGameVersions().entrySet()) { - String gameVersion = VersionNumber.normalize(entry.getKey()); + String gameVersion = fromLookupVersion(VersionNumber.normalize(entry.getKey())); for (int v : entry.getValue()) { ForgeVersion version = root.getNumber().get(v); if (version == null) @@ -72,7 +80,7 @@ public CompletableFuture refreshAsync() { if (jar == null) continue; versions.put(gameVersion, new ForgeRemoteVersion( - version.getGameVersion(), version.getVersion(), null, Collections.singletonList(jar) + toLookupVersion(version.getGameVersion()), version.getVersion(), null, Collections.singletonList(jar) )); } } @@ -82,5 +90,5 @@ public CompletableFuture refreshAsync() { }); } - public static final String FORGE_LIST = "https://files.minecraftforge.net/maven/net/minecraftforge/forge/json"; + public static final String FORGE_LIST = "https://zkitefly.github.io/forge-maven-metadata/list.json"; } From abd37a093ac04cdda61196e1fdf1b1a23a8b1dad Mon Sep 17 00:00:00 2001 From: Glavo Date: Sat, 24 Aug 2024 14:50:41 +0800 Subject: [PATCH 08/20] =?UTF-8?q?Revert=20"=E6=94=AF=E6=8C=81=20Forge=20?= =?UTF-8?q?=E5=AE=98=E6=96=B9=E6=BA=90=20(#3251)"=20(#3258)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 0f0cf555090f2518103a9a6b833071ab677ca4c0. --- .../hmcl/download/MojangDownloadProvider.java | 6 +++--- .../hmcl/download/forge/ForgeVersionList.java | 16 ++++------------ 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java index 86fc3e032f..a0a677f250 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java @@ -19,7 +19,7 @@ import org.jackhuang.hmcl.download.fabric.FabricAPIVersionList; import org.jackhuang.hmcl.download.fabric.FabricVersionList; -import org.jackhuang.hmcl.download.forge.ForgeVersionList; +import org.jackhuang.hmcl.download.forge.ForgeBMCLVersionList; import org.jackhuang.hmcl.download.game.GameVersionList; import org.jackhuang.hmcl.download.liteloader.LiteLoaderVersionList; import org.jackhuang.hmcl.download.neoforge.NeoForgeOfficialVersionList; @@ -35,7 +35,7 @@ public class MojangDownloadProvider implements DownloadProvider { private final GameVersionList game; private final FabricVersionList fabric; private final FabricAPIVersionList fabricApi; - private final ForgeVersionList forge; + private final ForgeBMCLVersionList forge; private final NeoForgeOfficialVersionList neoforge; private final LiteLoaderVersionList liteLoader; private final OptiFineBMCLVersionList optifine; @@ -49,7 +49,7 @@ public MojangDownloadProvider() { this.game = new GameVersionList(this); this.fabric = new FabricVersionList(this); this.fabricApi = new FabricAPIVersionList(this); - this.forge = new ForgeVersionList(this); + this.forge = new ForgeBMCLVersionList(apiRoot); this.neoforge = new NeoForgeOfficialVersionList(this); this.liteLoader = new LiteLoaderVersionList(this); this.optifine = new OptiFineBMCLVersionList(apiRoot); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java index e450a70c13..fa9a558133 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java @@ -43,17 +43,9 @@ public boolean hasType() { return false; } - private static String toLookupVersion(String gameVersion) { - return "1.7.10-pre4".equals(gameVersion) ? "1.7.10_pre4" : gameVersion; - } - - private static String fromLookupVersion(String lookupVersion) { - return "1.7.10_pre4".equals(lookupVersion) ? "1.7.10-pre4" : lookupVersion; - } - @Override public CompletableFuture refreshAsync() { - return HttpRequest.GET(FORGE_LIST).getJsonAsync(ForgeVersionRoot.class) + return HttpRequest.GET(downloadProvider.injectURL(FORGE_LIST)).getJsonAsync(ForgeVersionRoot.class) .thenAcceptAsync(root -> { lock.writeLock().lock(); @@ -63,7 +55,7 @@ public CompletableFuture refreshAsync() { versions.clear(); for (Map.Entry entry : root.getGameVersions().entrySet()) { - String gameVersion = fromLookupVersion(VersionNumber.normalize(entry.getKey())); + String gameVersion = VersionNumber.normalize(entry.getKey()); for (int v : entry.getValue()) { ForgeVersion version = root.getNumber().get(v); if (version == null) @@ -80,7 +72,7 @@ public CompletableFuture refreshAsync() { if (jar == null) continue; versions.put(gameVersion, new ForgeRemoteVersion( - toLookupVersion(version.getGameVersion()), version.getVersion(), null, Collections.singletonList(jar) + version.getGameVersion(), version.getVersion(), null, Collections.singletonList(jar) )); } } @@ -90,5 +82,5 @@ public CompletableFuture refreshAsync() { }); } - public static final String FORGE_LIST = "https://zkitefly.github.io/forge-maven-metadata/list.json"; + public static final String FORGE_LIST = "https://files.minecraftforge.net/maven/net/minecraftforge/forge/json"; } From fd97f6c321577ccdfa8e1c705794e667cea100b3 Mon Sep 17 00:00:00 2001 From: Zkitefly Date: Sat, 24 Aug 2024 23:43:50 +0800 Subject: [PATCH 09/20] =?UTF-8?q?=E6=94=AF=E6=8C=81=20Forge=20=E5=AE=98?= =?UTF-8?q?=E6=96=B9=E6=BA=90=20(#3259)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Revert "Revert "支持 Forge 官方源 (#3251)" (#3258)" This reverts commit abd37a093ac04cdda61196e1fdf1b1a23a8b1dad. * Update ForgeVersionList.java --- .../hmcl/download/MojangDownloadProvider.java | 6 +++--- .../hmcl/download/forge/ForgeVersionList.java | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java index a0a677f250..86fc3e032f 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java @@ -19,7 +19,7 @@ import org.jackhuang.hmcl.download.fabric.FabricAPIVersionList; import org.jackhuang.hmcl.download.fabric.FabricVersionList; -import org.jackhuang.hmcl.download.forge.ForgeBMCLVersionList; +import org.jackhuang.hmcl.download.forge.ForgeVersionList; import org.jackhuang.hmcl.download.game.GameVersionList; import org.jackhuang.hmcl.download.liteloader.LiteLoaderVersionList; import org.jackhuang.hmcl.download.neoforge.NeoForgeOfficialVersionList; @@ -35,7 +35,7 @@ public class MojangDownloadProvider implements DownloadProvider { private final GameVersionList game; private final FabricVersionList fabric; private final FabricAPIVersionList fabricApi; - private final ForgeBMCLVersionList forge; + private final ForgeVersionList forge; private final NeoForgeOfficialVersionList neoforge; private final LiteLoaderVersionList liteLoader; private final OptiFineBMCLVersionList optifine; @@ -49,7 +49,7 @@ public MojangDownloadProvider() { this.game = new GameVersionList(this); this.fabric = new FabricVersionList(this); this.fabricApi = new FabricAPIVersionList(this); - this.forge = new ForgeBMCLVersionList(apiRoot); + this.forge = new ForgeVersionList(this); this.neoforge = new NeoForgeOfficialVersionList(this); this.liteLoader = new LiteLoaderVersionList(this); this.optifine = new OptiFineBMCLVersionList(apiRoot); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java index fa9a558133..95199986da 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java @@ -43,9 +43,17 @@ public boolean hasType() { return false; } + private static String toLookupVersion(String gameVersion) { + return "1.7.10-pre4".equals(gameVersion) ? "1.7.10_pre4" : gameVersion; + } + + private static String fromLookupVersion(String lookupVersion) { + return "1.7.10_pre4".equals(lookupVersion) ? "1.7.10-pre4" : lookupVersion; + } + @Override public CompletableFuture refreshAsync() { - return HttpRequest.GET(downloadProvider.injectURL(FORGE_LIST)).getJsonAsync(ForgeVersionRoot.class) + return HttpRequest.GET(FORGE_LIST).getJsonAsync(ForgeVersionRoot.class) .thenAcceptAsync(root -> { lock.writeLock().lock(); @@ -55,7 +63,7 @@ public CompletableFuture refreshAsync() { versions.clear(); for (Map.Entry entry : root.getGameVersions().entrySet()) { - String gameVersion = VersionNumber.normalize(entry.getKey()); + String gameVersion = fromLookupVersion(VersionNumber.normalize(entry.getKey())); for (int v : entry.getValue()) { ForgeVersion version = root.getNumber().get(v); if (version == null) @@ -72,7 +80,7 @@ public CompletableFuture refreshAsync() { if (jar == null) continue; versions.put(gameVersion, new ForgeRemoteVersion( - version.getGameVersion(), version.getVersion(), null, Collections.singletonList(jar) + toLookupVersion(version.getGameVersion()), version.getVersion(), null, Collections.singletonList(jar) )); } } @@ -82,5 +90,5 @@ public CompletableFuture refreshAsync() { }); } - public static final String FORGE_LIST = "https://files.minecraftforge.net/maven/net/minecraftforge/forge/json"; + public static final String FORGE_LIST = "https://hmcl-dev.github.io/metadata/forge/"; } From abf58b2c20337cc624d9b41462861cbf1535f036 Mon Sep 17 00:00:00 2001 From: Haowei Wen Date: Sat, 24 Aug 2024 23:44:13 +0800 Subject: [PATCH 10/20] Fix missing i18n key curse.category.7418 (#3260) --- HMCL/src/main/resources/assets/lang/I18N.properties | 1 + HMCL/src/main/resources/assets/lang/I18N_es.properties | 1 + HMCL/src/main/resources/assets/lang/I18N_ja.properties | 1 + HMCL/src/main/resources/assets/lang/I18N_ru.properties | 1 + HMCL/src/main/resources/assets/lang/I18N_zh.properties | 1 + HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties | 1 + 6 files changed, 6 insertions(+) diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index dc1bdd651e..2f48a992f0 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -211,6 +211,7 @@ curse.category.4482=Extra Large curse.category.4472=Tech curse.category.4473=Magic curse.category.5128=Vanilla+ +curse.category.7418=Horror # https://addons-ecs.forgesvc.net/api/v2/category/section/6 curse.category.5299=Education diff --git a/HMCL/src/main/resources/assets/lang/I18N_es.properties b/HMCL/src/main/resources/assets/lang/I18N_es.properties index 0172d1c54f..57cd8908d8 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_es.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_es.properties @@ -187,6 +187,7 @@ curse.category.4482=Extra grande curse.category.4472=Tecnología curse.category.4473=Magia curse.category.5128=Vanilla+ +curse.category.7418=Horror # https://addons-ecs.forgesvc.net/api/v2/category/section/6 curse.category.5299=Educación diff --git a/HMCL/src/main/resources/assets/lang/I18N_ja.properties b/HMCL/src/main/resources/assets/lang/I18N_ja.properties index 057ddc5e98..e93f3186b7 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_ja.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_ja.properties @@ -173,6 +173,7 @@ curse.category.4479=ハードコア curse.category.4482=特大 curse.category.4472=Tech curse.category.4473=魔法 +curse.category.7418=ホラー # https://addons-ecs.forgesvc.net/api/v2/category/section/6 curse.category.5129=Vanilla+ diff --git a/HMCL/src/main/resources/assets/lang/I18N_ru.properties b/HMCL/src/main/resources/assets/lang/I18N_ru.properties index 37b91035a7..c50bb7178a 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_ru.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_ru.properties @@ -184,6 +184,7 @@ curse.category.4482=Extra Large curse.category.4472=Tech curse.category.4473=Magic curse.category.5128=Vanilla+ +curse.category.7418=Horror # https://addons-ecs.forgesvc.net/api/v2/category/section/6 curse.category.5299=Education diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index a11eb2474b..57fa6e02a6 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -221,6 +221,7 @@ curse.category.4482=大型模組包 curse.category.4472=科技 curse.category.4473=魔法 curse.category.5128=原版增強 +curse.category.7418=恐怖 # https://addons-ecs.forgesvc.net/api/v2/category/section/6 curse.category.5299=教育 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 ededc00cd6..7746fe32af 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -222,6 +222,7 @@ curse.category.4482=大型整合包 curse.category.4472=科技 curse.category.4473=魔法 curse.category.5128=原版增强 +curse.category.7418=恐怖 # https://addons-ecs.forgesvc.net/api/v2/category/section/6 curse.category.5299=教育 From 9b5445b6866453396b68326c0e47d9a65d8e6833 Mon Sep 17 00:00:00 2001 From: Zkitefly Date: Sun, 25 Aug 2024 02:55:55 +0800 Subject: [PATCH 11/20] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=A8=A1=E7=BB=84?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E9=A1=B5=E5=9B=BE=E6=A0=87=E9=97=AE=E9=A2=98?= =?UTF-8?q?=20(#3227)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update ModListPageSkin.java * Update ModListPageSkin.java * Update ModListPageSkin.java * Update ModListPageSkin.java * Update ModListPageSkin.java * Update ModListPageSkin.java * Update ModListPageSkin.java * Update ModListPageSkin.java * Update ModListPageSkin.java * Update ModListPageSkin.java * Update ModListPageSkin.java * update * 调整判断逻辑 * update * update --------- Co-authored-by: Glavo --- .../hmcl/ui/versions/ModListPageSkin.java | 78 ++++++++++++++----- 1 file changed, 57 insertions(+), 21 deletions(-) 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 acd647a5fd..4c35fe6308 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 @@ -59,15 +59,11 @@ import org.jackhuang.hmcl.util.io.NetworkUtils; import org.jetbrains.annotations.NotNull; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; +import java.io.InputStream; 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.*; import java.util.function.Predicate; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -297,25 +293,65 @@ class ModInfoDialog extends JFXDialogLayout { titleContainer.setSpacing(8); ImageView imageView = new ImageView(); - if (StringUtils.isNotBlank(modInfo.getModInfo().getLogoPath())) { - Task.supplyAsync(() -> { - try (FileSystem fs = CompressingUtils.createReadOnlyZipFileSystem(modInfo.getModInfo().getFile())) { - Path iconPath = fs.getPath(modInfo.getModInfo().getLogoPath()); + Task.supplyAsync(() -> { + try (FileSystem fs = CompressingUtils.createReadOnlyZipFileSystem(modInfo.getModInfo().getFile())) { + String logoPath = modInfo.getModInfo().getLogoPath(); + if (StringUtils.isNotBlank(logoPath)) { + Path iconPath = fs.getPath(logoPath); if (Files.exists(iconPath)) { - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - Files.copy(iconPath, stream); - return new ByteArrayInputStream(stream.toByteArray()); + try (InputStream stream = Files.newInputStream(iconPath)) { + Image image = new Image(stream, 40, 40, true, true); + if (!image.isError() && image.getWidth() == image.getHeight()) + return image; + } catch (Throwable e) { + LOG.warning("Failed to load image " + logoPath, e); + } } } - return null; - }).whenComplete(Schedulers.javafx(), (stream, exception) -> { - if (stream != null) { - imageView.setImage(new Image(stream, 40, 40, true, true)); - } else { - imageView.setImage(FXUtils.newBuiltinImage("/assets/img/command.png", 40, 40, true, true)); + + List defaultPaths = new ArrayList<>(Arrays.asList( + "icon.png", + "logo.png", + "mod_logo.png", + "pack.png", + "logoFile.png" + )); + + String id = modInfo.getModInfo().getId(); + if (StringUtils.isNotBlank(id)) { + defaultPaths.addAll(Arrays.asList( + "assets/" + id + "/icon.png", + "assets/" + id.replace("-", "") + "/icon.png", + id + ".png", + id + "-logo.png", + id + "-icon.png", + id + "_logo.png", + id + "_icon.png" + )); } - }).start(); - } + + for (String path : defaultPaths) { + Path iconPath = fs.getPath(path); + if (Files.exists(iconPath)) { + try (InputStream stream = Files.newInputStream(iconPath)) { + Image image = new Image(stream, 40, 40, true, true); + if (!image.isError() && image.getWidth() == image.getHeight()) + return image; + } + } + } + } catch (Exception e) { + LOG.warning("Failed to load icon", e); + } + + return null; + }).whenComplete(Schedulers.javafx(), (image, exception) -> { + if (image != null) { + imageView.setImage(image); + } else { + imageView.setImage(FXUtils.newBuiltinImage("/assets/img/command.png", 40, 40, true, true)); + } + }).start(); TwoLineListItem title = new TwoLineListItem(); title.setTitle(modInfo.getModInfo().getName()); From 738000ff399bf38e18a149af76f52e50b6cabb1f Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Sun, 25 Aug 2024 03:03:48 +0800 Subject: [PATCH 12/20] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E7=B1=BB=E4=B8=8E=E6=96=B9=E6=B3=95=20(#3132)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Remove useless classes. * Remove useless methods --- .../org/jackhuang/hmcl/countly/Countly.java | 86 ------------------- .../jackhuang/hmcl/countly/CrashReport.java | 56 ------------ .../org/jackhuang/hmcl/game/LoadingState.java | 38 -------- 3 files changed, 180 deletions(-) delete mode 100644 HMCL/src/main/java/org/jackhuang/hmcl/countly/Countly.java delete mode 100644 HMCL/src/main/java/org/jackhuang/hmcl/game/LoadingState.java diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/countly/Countly.java b/HMCL/src/main/java/org/jackhuang/hmcl/countly/Countly.java deleted file mode 100644 index f18b196859..0000000000 --- a/HMCL/src/main/java/org/jackhuang/hmcl/countly/Countly.java +++ /dev/null @@ -1,86 +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.countly; - -import org.jackhuang.hmcl.util.io.HttpRequest; - -import java.io.IOException; -import java.time.ZonedDateTime; -import java.util.Calendar; -import java.util.Locale; - -import static org.jackhuang.hmcl.util.Pair.pair; - -public class Countly { - - private String deviceId; - private String endpoint; - private String serverURL; - - public void sendMetric(String metrics) throws IOException { - HttpRequest.GET(serverURL + endpoint, - pair("begin_session", "1"), - pair("session_id", "1"), - pair("metrics", metrics), - pair("device_id", deviceId), - pair("timestamp", Long.toString(System.currentTimeMillis())), - pair("tz", Integer.toString(getTimezoneOffset())), - pair("hour", Integer.toString(currentHour())), - pair("dow", Integer.toString(currentDayOfWeek())), - pair("app_key", APP_KEY), - pair("sdk_name", "java-native"), - pair("sdk_version", "20.11.1")) - .getString(); - } - - private static int getTimezoneOffset() { - return ZonedDateTime.now().getOffset().getTotalSeconds() / 60; - } - - private static String getLocale() { - final Locale locale = Locale.getDefault(); - return locale.getLanguage() + "_" + locale.getCountry(); - } - - private static int currentHour() { - return Calendar.getInstance().get(Calendar.HOUR_OF_DAY); - } - - private int currentDayOfWeek() { - int day = Calendar.getInstance().get(Calendar.DAY_OF_WEEK); - switch (day) { - case Calendar.SUNDAY: - return 0; - case Calendar.MONDAY: - return 1; - case Calendar.TUESDAY: - return 2; - case Calendar.WEDNESDAY: - return 3; - case Calendar.THURSDAY: - return 4; - case Calendar.FRIDAY: - return 5; - case Calendar.SATURDAY: - return 6; - } - return 0; - } - - private static final String APP_KEY = ""; -} diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/countly/CrashReport.java b/HMCL/src/main/java/org/jackhuang/hmcl/countly/CrashReport.java index a18d405f7a..6c3847e587 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/countly/CrashReport.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/countly/CrashReport.java @@ -5,14 +5,8 @@ import org.jackhuang.hmcl.util.platform.Architecture; import org.jackhuang.hmcl.util.platform.OperatingSystem; -import java.io.File; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.Map; - -import static org.jackhuang.hmcl.util.Lang.mapOf; -import static org.jackhuang.hmcl.util.Pair.pair; -import static org.jackhuang.hmcl.util.logging.Logger.LOG; public class CrashReport { @@ -20,24 +14,16 @@ public class CrashReport { private final Throwable throwable; private final String stackTrace; - private boolean nonFatal; - public CrashReport(Thread thread, Throwable throwable) { this.thread = thread; this.throwable = throwable; stackTrace = StringUtils.getStackTrace(throwable); - nonFatal = false; } public Throwable getThrowable() { return this.throwable; } - public CrashReport setNonFatal() { - nonFatal = true; - return this; - } - public boolean shouldBeReport() { if (!stackTrace.contains("org.jackhuang")) return false; @@ -48,23 +34,6 @@ public boolean shouldBeReport() { return true; } - public Map getMetrics(long runningTime) { - return mapOf( - pair("_run", runningTime), - pair("_app_version", Metadata.VERSION), - pair("_os", OperatingSystem.SYSTEM_NAME), - pair("_os_version", OperatingSystem.SYSTEM_VERSION), - pair("_disk_current", getDiskAvailable()), - pair("_disk_total", getDiskTotal()), - pair("_ram_current", getMemoryAvailable()), - pair("_ram_total", Runtime.getRuntime().maxMemory() / BYTES_IN_MB), - pair("_error", stackTrace), - pair("_logs", LOG.getLogs()), - pair("_name", throwable.getLocalizedMessage()), - pair("_nonfatal", nonFatal) - ); - } - public String getDisplayText() { return "---- Hello Minecraft! Crash Report ----\n" + " Version: " + Metadata.VERSION + "\n" + @@ -82,29 +51,4 @@ public String getDisplayText() { " JVM Total Memory: " + Runtime.getRuntime().totalMemory() + "\n" + " JVM Free Memory: " + Runtime.getRuntime().freeMemory() + "\n"; } - - private static final Long BYTES_IN_MB = 1024L * 1024; - - private static long getMemoryAvailable() { - Long total = Runtime.getRuntime().totalMemory(); - Long availMem = Runtime.getRuntime().freeMemory(); - return (total - availMem) / BYTES_IN_MB; - } - - private static long getDiskAvailable() { - long total = 0, free = 0; - for (File f : File.listRoots()) { - total += f.getTotalSpace(); - free += f.getUsableSpace(); - } - return (total - free) / BYTES_IN_MB; - } - - private static long getDiskTotal() { - long total = 0; - for (File f : File.listRoots()) { - total += f.getTotalSpace(); - } - return total / BYTES_IN_MB; - } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LoadingState.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LoadingState.java deleted file mode 100644 index 6b434a9b59..0000000000 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LoadingState.java +++ /dev/null @@ -1,38 +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.game; - -import static org.jackhuang.hmcl.util.i18n.I18n.i18n; - -public enum LoadingState { - DEPENDENCIES("launch.state.dependencies"), - MODS("launch.state.modpack"), - LOGGING_IN("launch.state.logging_in"), - LAUNCHING("launch.state.waiting_launching"), - DONE("launch.state.done"); - - private final String key; - - LoadingState(String key) { - this.key = key; - } - - public String getLocalizedMessage() { - return i18n(key); - } -} From 48417b9b7b62f6bcd6e0c35a8ff76137046d3e28 Mon Sep 17 00:00:00 2001 From: Zkitefly <2573874409@qq.com> Date: Sat, 31 Aug 2024 00:44:43 +0800 Subject: [PATCH 13/20] =?UTF-8?q?=E6=98=BE=E7=A4=BA=20Forge=20=E5=8F=91?= =?UTF-8?q?=E7=89=88=E6=97=B6=E9=97=B4=20(#3256)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 显示时间 * Fix * update * update --------- Co-authored-by: Glavo --- .../org/jackhuang/hmcl/download/forge/ForgeVersion.java | 6 +++--- .../jackhuang/hmcl/download/forge/ForgeVersionList.java | 7 ++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersion.java index 429f61d371..a7bb771935 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersion.java @@ -33,7 +33,7 @@ public final class ForgeVersion implements Validation { private final String jobver; private final String version; private final int build; - private final double modified; + private final long modified; private final String[][] files; /** @@ -44,7 +44,7 @@ public ForgeVersion() { this(null, null, null, null, 0, 0, null); } - public ForgeVersion(String branch, String mcversion, String jobver, String version, int build, double modified, String[][] files) { + public ForgeVersion(String branch, String mcversion, String jobver, String version, int build, long modified, String[][] files) { this.branch = branch; this.mcversion = mcversion; this.jobver = jobver; @@ -74,7 +74,7 @@ public int getBuild() { return build; } - public double getModified() { + public long getModified() { return modified; } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java index 95199986da..acb97fef3c 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/forge/ForgeVersionList.java @@ -23,6 +23,7 @@ import org.jackhuang.hmcl.util.io.HttpRequest; import org.jackhuang.hmcl.util.versioning.VersionNumber; +import java.time.Instant; import java.util.Collections; import java.util.Map; import java.util.concurrent.CompletableFuture; @@ -79,8 +80,12 @@ public CompletableFuture refreshAsync() { if (jar == null) continue; + versions.put(gameVersion, new ForgeRemoteVersion( - toLookupVersion(version.getGameVersion()), version.getVersion(), null, Collections.singletonList(jar) + toLookupVersion(version.getGameVersion()), + version.getVersion(), + version.getModified() > 0 ? Instant.ofEpochSecond(version.getModified()) : null, + Collections.singletonList(jar) )); } } From 6348166dac8ee9e9fa3a787a02005a1b8e0bec2f Mon Sep 17 00:00:00 2001 From: Zkitefly <2573874409@qq.com> Date: Sun, 1 Sep 2024 00:27:06 +0800 Subject: [PATCH 14/20] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=9C=A8=20Linux/BSD?= =?UTF-8?q?=20=E5=B9=B3=E5=8F=B0=E4=BD=BF=E7=94=A8=20showFileInExplorer=20?= =?UTF-8?q?(#3233)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update ModListPageSkin.java * Update ModListPageSkin.java * Update FXUtils.java * Update ModListPageSkin.java * 使用 dbus-send * Update FXUtils.java * Update FXUtils.java * update * update --------- Co-authored-by: Glavo --- .../java/org/jackhuang/hmcl/ui/FXUtils.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java index 0cb5c433f0..d9d78d5f75 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java @@ -408,6 +408,17 @@ else if (OperatingSystem.CURRENT_OS.isLinuxOrBSD() && new File("/usr/bin/xdg-ope }); } + private static boolean testLinuxCommand(String command) { + try (final InputStream is = Runtime.getRuntime().exec(new String[]{"which", command}).getInputStream()) { + if (is.read() != -1) { + return true; + } + } catch (Throwable ignored) { + } + + return false; + } + public static void showFileInExplorer(Path file) { String path = file.toAbsolutePath().toString(); @@ -416,6 +427,16 @@ public static void showFileInExplorer(Path file) { openCommands = new String[]{"explorer.exe", "/select,", path}; else if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) openCommands = new String[]{"/usr/bin/open", "-R", path}; + else if (OperatingSystem.CURRENT_OS.isLinuxOrBSD() && testLinuxCommand("dbus-send")) + openCommands = new String[]{ + "dbus-send", + "--print-reply", + "--dest=org.freedesktop.FileManager1", + "/org/freedesktop/FileManager1", + "org.freedesktop.FileManager1.ShowItems", + "array:string:" + file.toAbsolutePath().toUri(), + "string:" + }; else openCommands = null; From 6409841cca11e62376ccb78891eb2b7588393d28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=9E=E5=BA=90?= <109708109+CiLuQwQ@users.noreply.github.com> Date: Mon, 2 Sep 2024 01:51:53 +0800 Subject: [PATCH 15/20] =?UTF-8?q?Fix=20#3138:=20HMCL=20=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E5=9C=B0=E5=B0=86=20Authlib=20=E6=97=A5=E5=BF=97=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E4=B8=BA=20ERROR=20(#3142)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Close#3138 * 恢复gradle-wrapper.properties * 恢复gradle-wrapper.properties * 添加空格 * 修复控制台输出的日志 * Merge if statement * update * update --------- Co-authored-by: CiLuQwQ Co-authored-by: burningtnt Co-authored-by: Glavo --- 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 33fc9ed4ca..750acba806 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -804,7 +804,7 @@ public void onLog(String log, boolean isErrorStream) { System.out.println(filteredLog); Log4jLevel level; - if (isErrorStream) + if (isErrorStream && !filteredLog.startsWith("[authlib-injector]")) level = Log4jLevel.ERROR; else level = showLogs ? Optional.ofNullable(Log4jLevel.guessLevel(filteredLog)).orElse(Log4jLevel.INFO) : null; From 8a816f7f35ab297693c2127e3da0a91a770de3de Mon Sep 17 00:00:00 2001 From: Glavo Date: Mon, 2 Sep 2024 20:54:33 +0800 Subject: [PATCH 16/20] =?UTF-8?q?=E4=BC=98=E5=8C=96=20LogWindow=20(#3274)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update * update * update * update * update --- .../jackhuang/hmcl/game/LauncherHelper.java | 143 +++++---- .../java/org/jackhuang/hmcl/game/Log.java | 72 +++++ .../org/jackhuang/hmcl/setting/Config.java | 8 +- .../java/org/jackhuang/hmcl/ui/FXUtils.java | 8 + .../jackhuang/hmcl/ui/GameCrashWindow.java | 18 +- .../java/org/jackhuang/hmcl/ui/LogWindow.java | 286 ++++++++---------- .../resources/assets/lang/I18N.properties | 6 +- .../resources/assets/lang/I18N_es.properties | 6 +- .../resources/assets/lang/I18N_zh.properties | 6 +- .../assets/lang/I18N_zh_CN.properties | 6 +- .../hmcl/ui/GameCrashWindowTest.java | 6 +- .../org/jackhuang/hmcl/util/StringUtils.java | 10 +- 12 files changed, 330 insertions(+), 245 deletions(-) create mode 100644 HMCL/src/main/java/org/jackhuang/hmcl/game/Log.java 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 750acba806..2230728e26 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -55,18 +55,13 @@ import java.net.URL; import java.nio.file.AccessDeniedException; import java.util.*; -import java.util.concurrent.CancellationException; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.concurrent.CountDownLatch; +import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; -import static org.jackhuang.hmcl.setting.ConfigHolder.config; import static org.jackhuang.hmcl.ui.FXUtils.runInFX; import static org.jackhuang.hmcl.util.Lang.resolveException; 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; public final class LauncherHelper { @@ -717,14 +712,14 @@ private final class HMCLProcessListener implements ProcessListener { private final Version version; private final LaunchOptions launchOptions; private ManagedProcess process; - private boolean lwjgl; + private volatile boolean lwjgl; private LogWindow logWindow; private final boolean detectWindow; - private final ArrayDeque logs; - private final ArrayDeque levels; - private final CountDownLatch logWindowLatch = new CountDownLatch(1); + private final CircularArrayList logs; private final CountDownLatch launchingLatch; private final String forbiddenAccessToken; + private Thread submitLogThread; + private LinkedBlockingQueue logBuffer; public HMCLProcessListener(HMCLGameRepository repository, Version version, AuthInfo authInfo, LaunchOptions launchOptions, CountDownLatch launchingLatch, boolean detectWindow) { this.repository = repository; @@ -733,10 +728,7 @@ public HMCLProcessListener(HMCLGameRepository repository, Version version, AuthI this.launchingLatch = launchingLatch; this.detectWindow = detectWindow; this.forbiddenAccessToken = authInfo != null ? authInfo.getAccessToken() : null; - - final int numLogs = config().getLogLines() + 1; - this.logs = new ArrayDeque<>(numLogs); - this.levels = new ArrayDeque<>(numLogs); + this.logs = new CircularArrayList<>(Log.getLogLines() + 1); } @Override @@ -752,12 +744,60 @@ public void setProcess(ManagedProcess process) { LOG.info("Process ClassPath: " + classpath); } - if (showLogs) + if (showLogs) { + CountDownLatch logWindowLatch = new CountDownLatch(1); Platform.runLater(() -> { - logWindow = new LogWindow(process); - logWindow.showNormal(); + logWindow = new LogWindow(process, logs); + logWindow.show(); logWindowLatch.countDown(); }); + + logBuffer = new LinkedBlockingQueue<>(); + submitLogThread = Lang.thread(new Runnable() { + private final ArrayList currentLogs = new ArrayList<>(); + private final Semaphore semaphore = new Semaphore(0); + + private void submitLogs() { + if (currentLogs.size() == 1) { + Log log = currentLogs.get(0); + Platform.runLater(() -> logWindow.logLine(log)); + } else { + Platform.runLater(() -> { + logWindow.logLines(currentLogs); + semaphore.release(); + }); + semaphore.acquireUninterruptibly(); + } + currentLogs.clear(); + } + + @Override + public void run() { + while (true) { + try { + currentLogs.add(logBuffer.take()); + //noinspection BusyWait + Thread.sleep(200); // Wait for more logs + } catch (InterruptedException e) { + break; + } + + logBuffer.drainTo(currentLogs); + submitLogs(); + } + + do { + submitLogs(); + } while (logBuffer.drainTo(currentLogs) > 0); + } + }, "Game Log Submitter", true); + + try { + logWindowLatch.await(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } } private void finishLaunch() { @@ -796,44 +836,37 @@ private void finishLaunch() { @Override public void onLog(String log, boolean isErrorStream) { - String filteredLog = forbiddenAccessToken == null ? log : log.replace(forbiddenAccessToken, ""); - if (isErrorStream) - System.err.println(filteredLog); + System.err.println(log); else - System.out.println(filteredLog); + System.out.println(log); - Log4jLevel level; - if (isErrorStream && !filteredLog.startsWith("[authlib-injector]")) - level = Log4jLevel.ERROR; - else - level = showLogs ? Optional.ofNullable(Log4jLevel.guessLevel(filteredLog)).orElse(Log4jLevel.INFO) : null; - - synchronized (this) { - logs.add(filteredLog); - levels.add(level != null ? level : Optional.empty()); // Use 'Optional.empty()' as hole - if (logs.size() > config().getLogLines()) { - logs.removeFirst(); - levels.removeFirst(); - } - } + log = StringUtils.parseEscapeSequence(log); + if (forbiddenAccessToken != null) + log = log.replace(forbiddenAccessToken, ""); + Log4jLevel level = isErrorStream && !log.startsWith("[authlib-injector]") ? Log4jLevel.ERROR : null; if (showLogs) { - try { - logWindowLatch.await(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - return; + if (level == null) + level = Lang.requireNonNullElse(Log4jLevel.guessLevel(log), Log4jLevel.INFO); + logBuffer.add(new Log(log, level)); + } else { + synchronized (this) { + logs.addLast(new Log(log, level)); + if (logs.size() > Log.getLogLines()) + logs.removeFirst(); } - - Platform.runLater(() -> logWindow.logLine(filteredLog, level)); } if (!lwjgl) { - String lowerCaseLog = filteredLog.toLowerCase(Locale.ROOT); + String lowerCaseLog = log.toLowerCase(Locale.ROOT); if (!detectWindow || lowerCaseLog.contains("lwjgl version") || lowerCaseLog.contains("lwjgl openal")) { - lwjgl = true; - finishLaunch(); + synchronized (this) { + if (!lwjgl) { + lwjgl = true; + finishLaunch(); + } + } } } } @@ -841,7 +874,13 @@ public void onLog(String log, boolean isErrorStream) { @Override public void onExit(int exitCode, ExitType exitType) { if (showLogs) { - Platform.runLater(() -> logWindow.logLine(String.format("[HMCL ProcessListener] Minecraft exit with code %d(0x%x), type is %s.", exitCode, exitCode, exitType), Log4jLevel.INFO)); + logBuffer.add(new Log(String.format("[HMCL ProcessListener] Minecraft exit with code %d(0x%x), type is %s.", exitCode, exitCode, exitType), Log4jLevel.INFO)); + submitLogThread.interrupt(); + try { + submitLogThread.join(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } } launchingLatch.countDown(); @@ -850,14 +889,16 @@ public void onExit(int exitCode, ExitType exitType) { return; // Game crashed before opening the game window. - if (!lwjgl) finishLaunch(); + if (!lwjgl) { + synchronized (this) { + if (!lwjgl) + finishLaunch(); + } + } if (exitType != ExitType.NORMAL) { - ArrayList> pairs = new ArrayList<>(logs.size()); - Lang.forEachZipped(logs, levels, - (log, l) -> pairs.add(pair(log, l instanceof Log4jLevel ? ((Log4jLevel) l) : Optional.ofNullable(Log4jLevel.guessLevel(log)).orElse(Log4jLevel.INFO)))); repository.markVersionLaunchedAbnormally(version.getId()); - Platform.runLater(() -> new GameCrashWindow(process, exitType, repository, version, launchOptions, pairs).show()); + Platform.runLater(() -> new GameCrashWindow(process, exitType, repository, version, launchOptions, logs).show()); } checkExit(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/Log.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/Log.java new file mode 100644 index 0000000000..ea01aee3ec --- /dev/null +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/Log.java @@ -0,0 +1,72 @@ +/* + * 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.game; + +import org.jackhuang.hmcl.util.Log4jLevel; + +import static org.jackhuang.hmcl.setting.ConfigHolder.config; + +public final class Log { + public static final int DEFAULT_LOG_LINES = 2000; + + public static int getLogLines() { + Integer lines = config().getLogLines(); + return lines != null && lines > 0 ? lines : DEFAULT_LOG_LINES; + } + + private final String log; + private Log4jLevel level; + private boolean selected = false; + + public Log(String log) { + this.log = log; + } + + public Log(String log, Log4jLevel level) { + this.log = log; + this.level = level; + } + + public String getLog() { + return log; + } + + public Log4jLevel getLevel() { + Log4jLevel level = this.level; + if (level == null) { + level = Log4jLevel.guessLevel(log); + if (level == null) + level = Log4jLevel.INFO; + this.level = level; + } + return level; + } + + public boolean isSelected() { + return selected; + } + + public void setSelected(boolean selected) { + this.selected = selected; + } + + @Override + public String toString() { + return log; + } +} diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java index f9611ed483..b124c509a5 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java @@ -164,7 +164,7 @@ public static Config fromJson(String json) throws JsonParseException { private StringProperty launcherFontFamily = new SimpleStringProperty(); @SerializedName("logLines") - private IntegerProperty logLines = new SimpleIntegerProperty(1000); + private ObjectProperty logLines = new SimpleObjectProperty<>(); @SerializedName("titleTransparent") private BooleanProperty titleTransparent = new SimpleBooleanProperty(false); @@ -573,15 +573,15 @@ public void setLauncherFontFamily(String launcherFontFamily) { this.launcherFontFamily.set(launcherFontFamily); } - public int getLogLines() { + public Integer getLogLines() { return logLines.get(); } - public void setLogLines(int logLines) { + public void setLogLines(Integer logLines) { this.logLines.set(logLines); } - public IntegerProperty logLinesProperty() { + public ObjectProperty logLinesProperty() { return logLines; } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java index d9d78d5f75..79bc0a8970 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java @@ -40,6 +40,7 @@ import javafx.scene.layout.Priority; import javafx.scene.layout.Region; import javafx.scene.layout.StackPane; +import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; import javafx.scene.text.Text; import javafx.scene.text.TextFlow; @@ -998,4 +999,11 @@ public static TextFlow segmentToTextFlow(final String segment, Consumer return tf; } + public static String toWeb(Color color) { + int r = (int) Math.round(color.getRed() * 255.0); + int g = (int) Math.round(color.getGreen() * 255.0); + int b = (int) Math.round(color.getBlue() * 255.0); + + return String.format("#%02x%02x%02x", r, g, b); + } } 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 50ec8535a2..653dd6d3f9 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameCrashWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameCrashWindow.java @@ -89,9 +89,9 @@ public class GameCrashWindow extends Stage { private final LaunchOptions launchOptions; private final View view; - private final Collection> logs; + private final List logs; - public GameCrashWindow(ManagedProcess managedProcess, ProcessListener.ExitType exitType, DefaultGameRepository repository, Version version, LaunchOptions launchOptions, Collection> logs) { + public GameCrashWindow(ManagedProcess managedProcess, ProcessListener.ExitType exitType, DefaultGameRepository repository, Version version, LaunchOptions launchOptions, List logs) { this.managedProcess = managedProcess; this.exitType = exitType; this.repository = repository; @@ -124,7 +124,7 @@ public GameCrashWindow(ManagedProcess managedProcess, ProcessListener.ExitType e private void analyzeCrashReport() { loading.set(true); Task.allOf(Task.supplyAsync(() -> { - String rawLog = logs.stream().map(Pair::getKey).collect(Collectors.joining("\n")); + String rawLog = logs.stream().map(Log::getLog).collect(Collectors.joining("\n")); // Get the crash-report from the crash-reports/xxx, or the output of console. String crashReport = null; @@ -264,20 +264,18 @@ private String parseFabricModId(String modName) { private void showLogWindow() { LogWindow logWindow = new LogWindow(managedProcess); - logWindow.logLine(Logger.filterForbiddenToken("Command: " + new CommandBuilder().addAll(managedProcess.getCommands())), Log4jLevel.INFO); + logWindow.logLine(new Log(Logger.filterForbiddenToken("Command: " + new CommandBuilder().addAll(managedProcess.getCommands())), Log4jLevel.INFO)); if (managedProcess.getClasspath() != null) - logWindow.logLine("ClassPath: " + managedProcess.getClasspath(), Log4jLevel.INFO); - for (Map.Entry entry : logs) - logWindow.logLine(entry.getKey(), entry.getValue()); - - logWindow.showNormal(); + logWindow.logLine(new Log("ClassPath: " + managedProcess.getClasspath(), Log4jLevel.INFO)); + logWindow.logLines(logs); + logWindow.show(); } private void exportGameCrashInfo() { Path logFile = Paths.get("minecraft-exported-crash-info-" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH-mm-ss")) + ".zip").toAbsolutePath(); CompletableFuture.supplyAsync(() -> - logs.stream().map(Pair::getKey).collect(Collectors.joining(OperatingSystem.LINE_SEPARATOR))) + logs.stream().map(Log::getLog).collect(Collectors.joining(OperatingSystem.LINE_SEPARATOR))) .thenComposeAsync(logs -> LogExporter.exportLogs(logFile, repository, launchOptions.getVersionName(), logs, new CommandBuilder().addAll(managedProcess.getCommands()).toString())) .handleAsync((result, exception) -> { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java index c216bb74a2..7e28b6d7d9 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java @@ -25,8 +25,8 @@ import javafx.beans.InvalidationListener; import javafx.beans.binding.Bindings; import javafx.beans.property.*; -import javafx.beans.value.ChangeListener; import javafx.collections.FXCollections; +import javafx.collections.ObservableList; import javafx.css.PseudoClass; import javafx.geometry.Insets; import javafx.geometry.Pos; @@ -38,13 +38,14 @@ import javafx.stage.Stage; import org.jackhuang.hmcl.game.GameDumpGenerator; import org.jackhuang.hmcl.game.LauncherHelper; +import org.jackhuang.hmcl.game.Log; import org.jackhuang.hmcl.setting.Theme; +import org.jackhuang.hmcl.ui.construct.SpinnerPane; import org.jackhuang.hmcl.util.Holder; import org.jackhuang.hmcl.util.CircularArrayList; import org.jackhuang.hmcl.util.Lang; import org.jackhuang.hmcl.util.Log4jLevel; import org.jackhuang.hmcl.util.platform.ManagedProcess; -import org.jackhuang.hmcl.util.platform.OperatingSystem; import org.jackhuang.hmcl.util.platform.SystemUtils; import java.io.IOException; @@ -54,14 +55,11 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; -import java.util.function.Consumer; import java.util.stream.Collectors; -import java.util.stream.IntStream; import static org.jackhuang.hmcl.setting.ConfigHolder.config; import static org.jackhuang.hmcl.util.Lang.thread; import static org.jackhuang.hmcl.util.logging.Logger.LOG; -import static org.jackhuang.hmcl.util.StringUtils.parseEscapeSequence; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; /** @@ -69,128 +67,120 @@ */ public final class LogWindow extends Stage { - private final ArrayDeque logs = new ArrayDeque<>(); - private final Map levelCountMap = new EnumMap(Log4jLevel.class) { - { - for (Log4jLevel level : Log4jLevel.values()) put(level, new SimpleIntegerProperty()); - } - }; - private final Map levelShownMap = new EnumMap(Log4jLevel.class) { - { - for (Log4jLevel level : Log4jLevel.values()) { - SimpleBooleanProperty property = new SimpleBooleanProperty(true); - put(level, property); - } - } - }; - private final LogWindowImpl impl = new LogWindowImpl(); - private final ChangeListener logLinesListener = FXUtils.onWeakChange(config().logLinesProperty(), logLines -> checkLogCount()); + private static final Log4jLevel[] LEVELS = {Log4jLevel.FATAL, Log4jLevel.ERROR, Log4jLevel.WARN, Log4jLevel.INFO, Log4jLevel.DEBUG}; - private Consumer exportGameCrashInfoCallback; + private final CircularArrayList logs; + private final Map levelCountMap = new EnumMap<>(Log4jLevel.class); + private final Map levelShownMap = new EnumMap<>(Log4jLevel.class); - private boolean stopCheckLogCount = false; + { + for (Log4jLevel level : Log4jLevel.values()) { + levelCountMap.put(level, new SimpleIntegerProperty()); + levelShownMap.put(level, new SimpleBooleanProperty(true)); + } + } + private final LogWindowImpl impl; private final ManagedProcess gameProcess; public LogWindow(ManagedProcess gameProcess) { + this(gameProcess, new CircularArrayList<>()); + } + + public LogWindow(ManagedProcess gameProcess, CircularArrayList logs) { + this.logs = logs; + this.impl = new LogWindowImpl(); setScene(new Scene(impl, 800, 480)); getScene().getStylesheets().addAll(Theme.getTheme().getStylesheets(config().getLauncherFontFamily())); setTitle(i18n("logwindow.title")); FXUtils.setIcon(this); - levelShownMap.values().forEach(property -> property.addListener((a, b, newValue) -> shakeLogs())); + for (SimpleBooleanProperty property : levelShownMap.values()) { + property.addListener(o -> shakeLogs()); + } this.gameProcess = gameProcess; } - public void logLine(String filteredLine, Log4jLevel level) { - Log log = new Log(parseEscapeSequence(filteredLine), level); + public void logLine(Log log) { + Log4jLevel level = log.getLevel(); logs.add(log); if (levelShownMap.get(level).get()) impl.listView.getItems().add(log); - levelCountMap.get(level).setValue(levelCountMap.get(level).getValue() + 1); - if (!stopCheckLogCount) checkLogCount(); + SimpleIntegerProperty property = levelCountMap.get(log.getLevel()); + property.set(property.get() + 1); + checkLogCount(); + autoScroll(); } - public void showGameCrashReport(Consumer exportGameCrashInfoCallback) { - this.exportGameCrashInfoCallback = exportGameCrashInfoCallback; - this.impl.showCrashReport.set(true); - stopCheckLogCount = true; - for (Log log : impl.listView.getItems()) { - if (log.log.contains("Minecraft Crash Report")) { - Platform.runLater(() -> { - impl.listView.scrollTo(log); - }); - break; - } - } - show(); - } + public void logLines(List logs) { + for (Log log : logs) { + Log4jLevel level = log.getLevel(); + this.logs.add(log); + if (levelShownMap.get(level).get()) + impl.listView.getItems().add(log); - public void showNormal() { - this.impl.showCrashReport.set(false); - show(); + SimpleIntegerProperty property = levelCountMap.get(log.getLevel()); + property.set(property.get() + 1); + } + checkLogCount(); + autoScroll(); } private void shakeLogs() { - impl.listView.getItems().setAll(logs.stream().filter(log -> levelShownMap.get(log.level).get()).collect(Collectors.toList())); + impl.listView.getItems().setAll(logs.stream().filter(log -> levelShownMap.get(log.getLevel()).get()).collect(Collectors.toList())); + autoScroll(); } private void checkLogCount() { - while (logs.size() > config().getLogLines()) { + int nRemove = logs.size() - Log.getLogLines(); + if (nRemove <= 0) + return; + + ObservableList items = impl.listView.getItems(); + int itemsSize = items.size(); + int count = 0; + + for (int i = 0; i < nRemove; i++) { Log removedLog = logs.removeFirst(); - if (!impl.listView.getItems().isEmpty() && impl.listView.getItems().get(0) == removedLog) { - impl.listView.getItems().remove(0); - } + if (itemsSize > count && items.get(count) == removedLog) + count++; } - } - private static class Log { - private final String log; - private final Log4jLevel level; - private boolean selected = false; + items.remove(0, count); + } - public Log(String log, Log4jLevel level) { - this.log = log; - this.level = level; - } + private void autoScroll() { + if (!impl.listView.getItems().isEmpty() && impl.autoScroll.get()) + impl.listView.scrollTo(impl.listView.getItems().size() - 1); } - public class LogWindowImpl extends Control { + private final class LogWindowImpl extends Control { private final ListView listView = new JFXListView<>(); private final BooleanProperty autoScroll = new SimpleBooleanProperty(); - private final List buttonText = IntStream.range(0, 5).mapToObj(x -> new SimpleStringProperty()).collect(Collectors.toList()); - private final List showLevel = IntStream.range(0, 5).mapToObj(x -> new SimpleBooleanProperty(true)).collect(Collectors.toList()); - private final JFXComboBox cboLines = new JFXComboBox<>(); - private final BooleanProperty showCrashReport = new SimpleBooleanProperty(); + private final StringProperty[] buttonText = new StringProperty[LEVELS.length]; + private final BooleanProperty[] showLevel = new BooleanProperty[LEVELS.length]; + private final JFXComboBox cboLines = new JFXComboBox<>(); LogWindowImpl() { getStyleClass().add("log-window"); - listView.setItems(FXCollections.observableList(new CircularArrayList<>(config().getLogLines() + 1))); - - boolean flag = false; - cboLines.getItems().setAll("500", "2000", "5000", "10000"); - for (String i : cboLines.getItems()) - if (Integer.toString(config().getLogLines()).equals(i)) { - cboLines.getSelectionModel().select(i); - flag = true; - } + listView.setItems(FXCollections.observableList(new CircularArrayList<>(logs.size()))); - if (!flag) - cboLines.getSelectionModel().select(2); + for (int i = 0; i < LEVELS.length; i++) { + buttonText[i] = new SimpleStringProperty(); + showLevel[i] = new SimpleBooleanProperty(true); + } - cboLines.getSelectionModel().selectedItemProperty().addListener((a, b, newValue) -> { - config().setLogLines(newValue == null ? 1000 : Integer.parseInt(newValue)); - }); + cboLines.getItems().setAll(500, 2000, 5000, 10000); + cboLines.setValue(Log.getLogLines()); + cboLines.getSelectionModel().selectedItemProperty().addListener((a, b, newValue) -> config().setLogLines(newValue)); - Log4jLevel[] levels = new Log4jLevel[]{Log4jLevel.FATAL, Log4jLevel.ERROR, Log4jLevel.WARN, Log4jLevel.INFO, Log4jLevel.DEBUG}; - String[] suffix = new String[]{"fatals", "errors", "warns", "infos", "debugs"}; - for (int i = 0; i < 5; ++i) { - buttonText.get(i).bind(Bindings.concat(levelCountMap.get(levels[i]), " " + suffix[i])); - levelShownMap.get(levels[i]).bind(showLevel.get(i)); + for (int i = 0; i < LEVELS.length; ++i) { + buttonText[i].bind(Bindings.concat(levelCountMap.get(LEVELS[i]), " " + LEVELS[i].name().toLowerCase(Locale.ROOT) + "s")); + levelShownMap.get(LEVELS[i]).bind(showLevel[i]); } } @@ -207,7 +197,7 @@ private void onExportLogs() { thread(() -> { Path logFile = Paths.get("minecraft-exported-logs-" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH-mm-ss")) + ".log").toAbsolutePath(); try { - Files.write(logFile, logs.stream().map(x -> x.log).collect(Collectors.toList())); + Files.write(logFile, logs.stream().map(Log::getLog).collect(Collectors.toList())); } catch (IOException e) { LOG.warning("Failed to export logs", e); return; @@ -223,38 +213,31 @@ private void onExportLogs() { }); } - private void onExportDump(JFXButton button) { - thread(() -> { - if (button.getText().equals(i18n("logwindow.export_dump.dependency_ok.button"))) { - if (SystemUtils.supportJVMAttachment()) { - Platform.runLater(() -> button.setText(i18n("logwindow.export_dump.dependency_ok.doing_button"))); + private void onExportDump(SpinnerPane pane) { + assert SystemUtils.supportJVMAttachment(); - Path dumpFile = Paths.get("minecraft-exported-jstack-dump-" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH-mm-ss")) + ".log").toAbsolutePath(); + pane.setLoading(true); - try { - if (gameProcess.isRunning()) { - GameDumpGenerator.writeDumpTo(gameProcess.getPID(), dumpFile); - FXUtils.showFileInExplorer(dumpFile); - } - } catch (Throwable e) { - LOG.warning("Failed to create minecraft jstack dump", e); - - Platform.runLater(() -> { - Alert alert = new Alert(Alert.AlertType.ERROR, i18n("logwindow.export_dump.dependency_ok.button")); - alert.setTitle(i18n("message.error")); - alert.showAndWait(); - }); - } + thread(() -> { + Path dumpFile = Paths.get("minecraft-exported-jstack-dump-" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH-mm-ss")) + ".log").toAbsolutePath(); - Platform.runLater(() -> button.setText(i18n("logwindow.export_dump.dependency_ok.button"))); + try { + if (gameProcess.isRunning()) { + GameDumpGenerator.writeDumpTo(gameProcess.getPID(), dumpFile); + FXUtils.showFileInExplorer(dumpFile); } + } catch (Throwable e) { + LOG.warning("Failed to create minecraft jstack dump", e); + + Platform.runLater(() -> { + Alert alert = new Alert(Alert.AlertType.ERROR, i18n("logwindow.export_dump")); + alert.setTitle(i18n("message.error")); + alert.showAndWait(); + }); } - }); - } - private void onExportGameCrashInfo() { - if (exportGameCrashInfoCallback == null) return; - exportGameCrashInfoCallback.accept(logs.stream().map(x -> x.log).collect(Collectors.joining(OperatingSystem.LINE_SEPARATOR))); + Platform.runLater(() -> pane.setLoading(false)); + }); } @Override @@ -263,7 +246,7 @@ protected Skin createDefaultSkin() { } } - private static class LogWindowSkin extends SkinBase { + private static final class LogWindowSkin extends SkinBase { private static final PseudoClass EMPTY = PseudoClass.getPseudoClass("empty"); private static final PseudoClass FATAL = PseudoClass.getPseudoClass("fatal"); private static final PseudoClass ERROR = PseudoClass.getPseudoClass("error"); @@ -275,17 +258,7 @@ private static class LogWindowSkin extends SkinBase { private final Set> selected = new HashSet<>(); - private static ToggleButton createToggleButton(String backgroundColor, StringProperty buttonText, BooleanProperty showLevel) { - ToggleButton button = new ToggleButton(); - button.setStyle("-fx-background-color: " + backgroundColor + ";"); - button.getStyleClass().add("log-toggle"); - button.textProperty().bind(buttonText); - button.setSelected(true); - showLevel.bind(button.selectedProperty()); - return button; - } - - protected LogWindowSkin(LogWindowImpl control) { + LogWindowSkin(LogWindowImpl control) { super(control); VBox vbox = new VBox(3); @@ -310,13 +283,16 @@ protected LogWindowSkin(LogWindowImpl control) { { HBox hBox = new HBox(3); - hBox.getChildren().setAll( - createToggleButton("#F7A699", control.buttonText.get(0), control.showLevel.get(0)), - createToggleButton("#FFCCBB", control.buttonText.get(1), control.showLevel.get(1)), - createToggleButton("#FFEECC", control.buttonText.get(2), control.showLevel.get(2)), - createToggleButton("#FBFBFB", control.buttonText.get(3), control.showLevel.get(3)), - createToggleButton("#EEE9E0", control.buttonText.get(4), control.showLevel.get(4)) - ); + for (int i = 0; i < LEVELS.length; i++) { + ToggleButton button = new ToggleButton(); + button.setStyle("-fx-background-color: " + FXUtils.toWeb(LEVELS[i].getColor()) + ";"); + button.getStyleClass().add("log-toggle"); + button.textProperty().bind(control.buttonText[i]); + button.setSelected(true); + control.showLevel[i].bind(button.selectedProperty()); + hBox.getChildren().add(button); + } + borderPane.setRight(hBox); } @@ -347,11 +323,11 @@ protected LogWindowSkin(LogWindowImpl control) { setOnMouseClicked(event -> { if (!event.isControlDown()) { - for (ListCell logListCell: selected) { + for (ListCell logListCell : selected) { if (logListCell != this) { logListCell.pseudoClassStateChanged(SELECTED, false); if (logListCell.getItem() != null) { - logListCell.getItem().selected = false; + logListCell.getItem().setSelected(false); } } } @@ -362,7 +338,7 @@ protected LogWindowSkin(LogWindowImpl control) { selected.add(this); pseudoClassStateChanged(SELECTED, true); if (getItem() != null) { - getItem().selected = true; + getItem().setSelected(true); } }); } @@ -377,18 +353,18 @@ protected void updateItem(Log item, boolean empty) { lastCell.value = this; pseudoClassStateChanged(EMPTY, empty); - pseudoClassStateChanged(FATAL, !empty && item.level == Log4jLevel.FATAL); - pseudoClassStateChanged(ERROR, !empty && item.level == Log4jLevel.ERROR); - pseudoClassStateChanged(WARN, !empty && item.level == Log4jLevel.WARN); - pseudoClassStateChanged(INFO, !empty && item.level == Log4jLevel.INFO); - pseudoClassStateChanged(DEBUG, !empty && item.level == Log4jLevel.DEBUG); - pseudoClassStateChanged(TRACE, !empty && item.level == Log4jLevel.TRACE); - pseudoClassStateChanged(SELECTED, !empty && item.selected); + pseudoClassStateChanged(FATAL, !empty && item.getLevel() == Log4jLevel.FATAL); + pseudoClassStateChanged(ERROR, !empty && item.getLevel() == Log4jLevel.ERROR); + pseudoClassStateChanged(WARN, !empty && item.getLevel() == Log4jLevel.WARN); + pseudoClassStateChanged(INFO, !empty && item.getLevel() == Log4jLevel.INFO); + pseudoClassStateChanged(DEBUG, !empty && item.getLevel() == Log4jLevel.DEBUG); + pseudoClassStateChanged(TRACE, !empty && item.getLevel() == Log4jLevel.TRACE); + pseudoClassStateChanged(SELECTED, !empty && item.isSelected()); if (empty) { setText(null); } else { - setText(item.log); + setText(item.getLog()); } } }); @@ -398,10 +374,9 @@ protected void updateItem(Log item, boolean empty) { StringBuilder stringBuilder = new StringBuilder(); for (Log item : listView.getItems()) { - if (item != null && item.selected) { - if (item.log != null) { - stringBuilder.append(item.log); - } + if (item != null && item.isSelected()) { + if (item.getLog() != null) + stringBuilder.append(item.getLog()); stringBuilder.append('\n'); } } @@ -417,11 +392,6 @@ protected void updateItem(Log item, boolean empty) { { BorderPane bottom = new BorderPane(); - JFXButton exportGameCrashInfoButton = new JFXButton(i18n("logwindow.export_game_crash_logs")); - exportGameCrashInfoButton.setOnMouseClicked(e -> getSkinnable().onExportGameCrashInfo()); - exportGameCrashInfoButton.visibleProperty().bind(getSkinnable().showCrashReport); - bottom.setLeft(exportGameCrashInfoButton); - HBox hBox = new HBox(3); bottom.setRight(hBox); hBox.setAlignment(Pos.CENTER_RIGHT); @@ -432,24 +402,24 @@ protected void updateItem(Log item, boolean empty) { control.autoScroll.bind(autoScrollCheckBox.selectedProperty()); JFXButton exportLogsButton = new JFXButton(i18n("button.export")); - exportLogsButton.setOnMouseClicked(e -> getSkinnable().onExportLogs()); + exportLogsButton.setOnAction(e -> getSkinnable().onExportLogs()); JFXButton terminateButton = new JFXButton(i18n("logwindow.terminate_game")); - terminateButton.setOnMouseClicked(e -> getSkinnable().onTerminateGame()); + terminateButton.setOnAction(e -> getSkinnable().onTerminateGame()); - JFXButton exportDumpButton = new JFXButton(); + SpinnerPane exportDumpPane = new SpinnerPane(); + JFXButton exportDumpButton = new JFXButton(i18n("logwindow.export_dump")); if (SystemUtils.supportJVMAttachment()) { - exportDumpButton.setText(i18n("logwindow.export_dump.dependency_ok.button")); - exportDumpButton.setOnAction(e -> getSkinnable().onExportDump(exportDumpButton)); + exportDumpButton.setOnAction(e -> getSkinnable().onExportDump(exportDumpPane)); } else { - exportDumpButton.setText(i18n("logwindow.export_dump.no_dependency.button")); - exportDumpButton.setTooltip(new Tooltip(i18n("logwindow.export_dump.no_dependency.tooltip"))); + exportDumpButton.setTooltip(new Tooltip(i18n("logwindow.export_dump.no_dependency"))); exportDumpButton.setDisable(true); } + exportDumpPane.setContent(exportDumpButton); JFXButton clearButton = new JFXButton(i18n("button.clear")); - clearButton.setOnMouseClicked(e -> getSkinnable().onClear()); - hBox.getChildren().setAll(autoScrollCheckBox, exportLogsButton, terminateButton, exportDumpButton, clearButton); + clearButton.setOnAction(e -> getSkinnable().onClear()); + hBox.getChildren().setAll(autoScrollCheckBox, exportLogsButton, terminateButton, exportDumpPane, clearButton); vbox.getChildren().add(bottom); } diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index 2f48a992f0..a0b1cc636e 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -728,10 +728,8 @@ logwindow.title=Log logwindow.help=You can go to the HMCL community and find others for help logwindow.autoscroll=Auto-scroll logwindow.export_game_crash_logs=Export Crash Logs -logwindow.export_dump.dependency_ok.button=Export Game Stack Dump -logwindow.export_dump.dependency_ok.doing_button=Exporting Game Stack Dump (May take up to 15 seconds) -logwindow.export_dump.no_dependency.button=Export Game Stack Dump (Not compatible) -logwindow.export_dump.no_dependency.tooltip=Your Java does not contain the dependencies to create the stack dump. Please turn to HMCL QQ group or HMCL Discord for help. +logwindow.export_dump=Export Game Stack Dump +logwindow.export_dump.no_dependency=Your Java does not contain the dependencies to create the stack dump. Please turn to HMCL QQ group or HMCL Discord for help. main_page=Home diff --git a/HMCL/src/main/resources/assets/lang/I18N_es.properties b/HMCL/src/main/resources/assets/lang/I18N_es.properties index 57cd8908d8..666b0bd011 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_es.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_es.properties @@ -673,10 +673,8 @@ logwindow.title=Registro logwindow.help=Puede ir a la comunidad HMCL y encontrar a otros para ayudar logwindow.autoscroll=Desplazamiento automático logwindow.export_game_crash_logs=Exportar registros de errores -logwindow.export_dump.dependency_ok.button=Exportar volcado de pila de juegos -logwindow.export_dump.dependency_ok.doing_button=Exportación de volcado de pila de juego (puede tardar hasta 15 segundos) -logwindow.export_dump.no_dependency.button=Exportar volcado de pila de juegos (no compatible) -logwindow.export_dump.no_dependency.tooltip=Su Java no contiene las dependencias para crear el volcado de pila. Dirígete a HMCL QQ o HMCL Discord para obtener ayuda. +logwindow.export_dump=Exportar volcado de pila de juegos +logwindow.export_dump.no_dependency=Su Java no contiene las dependencias para crear el volcado de pila. Dirígete a HMCL QQ o HMCL Discord para obtener ayuda. main_page=Inicio diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index 57fa6e02a6..27b7b87696 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -607,10 +607,8 @@ logwindow.title=記錄 logwindow.help=你可以前往 HMCL 社區,尋找他人幫助 logwindow.autoscroll=自動滾動 logwindow.export_game_crash_logs=導出遊戲崩潰訊息 -logwindow.export_dump.dependency_ok.button=導出遊戲運行棧 -logwindow.export_dump.dependency_ok.doing_button=正在導出遊戲運行棧(可能需要 15 秒) -logwindow.export_dump.no_dependency.button=導出遊戲運行棧(不兼容) -logwindow.export_dump.no_dependency.tooltip=你的 Java 不包含用於創建遊戲運行棧的依賴。請前往 HMCL QQ 群或 Discord 频道尋求幫助。 +logwindow.export_dump=導出遊戲運行棧 +logwindow.export_dump.no_dependency=你的 Java 不包含用於創建遊戲運行棧的依賴。請前往 HMCL QQ 群或 Discord 频道尋求幫助。 main_page=首頁 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 7746fe32af..df4623147b 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -606,10 +606,8 @@ logwindow.title=日志 logwindow.help=你可以前往 HMCL 社区,寻找他人帮助 logwindow.autoscroll=自动滚动 logwindow.export_game_crash_logs=导出游戏崩溃信息 -logwindow.export_dump.dependency_ok.button=导出游戏运行栈 -logwindow.export_dump.dependency_ok.doing_button=正在导出游戏运行栈(可能需要 15 秒) -logwindow.export_dump.no_dependency.button=导出游戏运行栈(不兼容) -logwindow.export_dump.no_dependency.tooltip=你的 Java 不包含用于创建游戏运行栈的依赖。请前往 HMCL QQ 群或 Discord 频道寻求帮助。 +logwindow.export_dump=导出游戏运行栈 +logwindow.export_dump.no_dependency=你的 Java 不包含用于创建游戏运行栈的依赖。请前往 HMCL QQ 群或 Discord 频道寻求帮助。 main_page=主页 diff --git a/HMCL/src/test/java/org/jackhuang/hmcl/ui/GameCrashWindowTest.java b/HMCL/src/test/java/org/jackhuang/hmcl/ui/GameCrashWindowTest.java index 016e790a63..8734e8367b 100644 --- a/HMCL/src/test/java/org/jackhuang/hmcl/ui/GameCrashWindowTest.java +++ b/HMCL/src/test/java/org/jackhuang/hmcl/ui/GameCrashWindowTest.java @@ -20,8 +20,8 @@ import org.jackhuang.hmcl.JavaFXLauncher; import org.jackhuang.hmcl.game.ClassicVersion; import org.jackhuang.hmcl.game.LaunchOptions; +import org.jackhuang.hmcl.game.Log; import org.jackhuang.hmcl.launch.ProcessListener; -import org.jackhuang.hmcl.util.Log4jLevel; import org.jackhuang.hmcl.util.io.FileUtils; import org.jackhuang.hmcl.util.platform.JavaVersion; import org.jackhuang.hmcl.util.platform.ManagedProcess; @@ -35,8 +35,6 @@ import java.util.concurrent.CountDownLatch; import java.util.stream.Collectors; -import static org.jackhuang.hmcl.util.Pair.pair; - public class GameCrashWindowTest { @Test @@ -57,7 +55,7 @@ public void test() throws Exception { .setGameDir(new File(".")) .create(), Arrays.stream(logs.split("\\n")) - .map(log -> pair(log, Log4jLevel.guessLevel(log))) + .map(Log::new) .collect(Collectors.toList())); window.showAndWait(); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringUtils.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringUtils.java index 06a1f8ab73..fadf40bd21 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringUtils.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/StringUtils.java @@ -346,9 +346,15 @@ public static String parseColorEscapes(String original) { } public static String parseEscapeSequence(String str) { - StringBuilder builder = new StringBuilder(); + int idx = str.indexOf('\033'); + if (idx < 0) + return str; + + StringBuilder builder = new StringBuilder(str.length()); boolean inEscape = false; - for (int i = 0; i < str.length(); i++) { + + builder.append(str, 0, idx); + for (int i = idx; i < str.length(); i++) { char ch = str.charAt(i); if (ch == '\033') { inEscape = true; From 97fe52c2a78fbfaf8502dcb7027cb387a203b016 Mon Sep 17 00:00:00 2001 From: vochant <118368461+vochant@users.noreply.github.com> Date: Thu, 19 Sep 2024 03:09:05 +0800 Subject: [PATCH 17/20] feat: Supported JRE from SDKMAN! on Linux (#3062) --- .../java/org/jackhuang/hmcl/util/platform/JavaVersion.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/JavaVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/JavaVersion.java index 633942e3cd..12e4970a2d 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/JavaVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/JavaVersion.java @@ -329,6 +329,9 @@ private static Stream searchPotentialJavaExecutables() throws IOException javaExecutables.add(listDirectory(Paths.get("/usr/java")).map(JavaVersion::getExecutable)); // Oracle RPMs javaExecutables.add(listDirectory(Paths.get("/usr/lib/jvm")).map(JavaVersion::getExecutable)); // General locations javaExecutables.add(listDirectory(Paths.get("/usr/lib32/jvm")).map(JavaVersion::getExecutable)); // General locations + // SDKMAN! + javaExecutables.add(listDirectory(Paths.get(System.getProperty("user.home"), ".sdkman/candidates/java")) + .map(JavaVersion::getExecutable)); break; case OSX: From d969fab284f0f496acd277d1e902b9204ad0d996 Mon Sep 17 00:00:00 2001 From: 3gf8jv4dv <3gf8jv4dv@gmail.com> Date: Thu, 19 Sep 2024 17:42:58 +0800 Subject: [PATCH 18/20] Fix checkstyle (#3292) --- .../java/org/jackhuang/hmcl/util/platform/JavaVersion.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/JavaVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/JavaVersion.java index 12e4970a2d..0e1d82e45e 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/JavaVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/JavaVersion.java @@ -329,9 +329,7 @@ private static Stream searchPotentialJavaExecutables() throws IOException javaExecutables.add(listDirectory(Paths.get("/usr/java")).map(JavaVersion::getExecutable)); // Oracle RPMs javaExecutables.add(listDirectory(Paths.get("/usr/lib/jvm")).map(JavaVersion::getExecutable)); // General locations javaExecutables.add(listDirectory(Paths.get("/usr/lib32/jvm")).map(JavaVersion::getExecutable)); // General locations - // SDKMAN! - javaExecutables.add(listDirectory(Paths.get(System.getProperty("user.home"), ".sdkman/candidates/java")) - .map(JavaVersion::getExecutable)); + javaExecutables.add(listDirectory(Paths.get(System.getProperty("user.home"), ".sdkman/candidates/java")).map(JavaVersion::getExecutable)); // SDKMAN! break; case OSX: From ea9999a1f93d0adc4f471872bf5ea2d65a84f100 Mon Sep 17 00:00:00 2001 From: YSXX1013 <77004108+YSXX1013@users.noreply.github.com> Date: Tue, 24 Sep 2024 02:51:44 +0800 Subject: [PATCH 19/20] =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BD=BF=E7=94=A8=20CM?= =?UTF-8?q?ake=20=E4=B8=8E=20MinGW=20=E6=9E=84=E5=BB=BA=20HMCLauncher=20(#?= =?UTF-8?q?3011)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 尝试性的为HMCLauncher添加cmake及gcc支持 * 完善cmake及gcc支持 * 尝试支持Github Actions * 尝试支持Github Actions-2 * 尝试支持Github Actions-3 * 尝试支持Github Actions-4 * 尝试支持Github Actions-5 * update --------- Co-authored-by: Glavo --- HMCLauncher/.gitignore | 3 ++- HMCLauncher/CMakeLists.txt | 17 +++++++++++++++++ HMCLauncher/HMCL/main.cpp | 4 ++-- 3 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 HMCLauncher/CMakeLists.txt diff --git a/HMCLauncher/.gitignore b/HMCLauncher/.gitignore index df5a7f68f9..3b5cac370e 100644 --- a/HMCLauncher/.gitignore +++ b/HMCLauncher/.gitignore @@ -1,4 +1,5 @@ Debug Release .vs -*.APS \ No newline at end of file +*.APS +cmake-build-*/ diff --git a/HMCLauncher/CMakeLists.txt b/HMCLauncher/CMakeLists.txt new file mode 100644 index 0000000000..c7afc7f3ba --- /dev/null +++ b/HMCLauncher/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 3.25) +project(HMCLauncher) +if(MSVC) + add_compile_options(/utf-8 /D_UNICODE /W4) + add_link_options(/ENTRY:wWinMainCRTStartup) +else() + add_compile_options(-municode -Wall -Wextra -Wpedantic) + add_link_options(-municode) +endif() +OPTION(ENABLE_MINGW_STATIC_LINK_LIBSTDCXX "Link the C++ standard library statically to the executable file(mingw only)." ON) +if(ENABLE_MINGW_STATIC_LINK_LIBSTDCXX AND MINGW) + add_link_options(-static) +endif() +set(CMAKE_WIN32_EXECUTABLE ON) +add_executable(HMCLauncher WIN32 HMCL/HMCL.rc HMCL/java.cpp HMCL/main.cpp HMCL/os.cpp HMCL/stdafx.cpp HMCL/Version.cpp) +target_link_libraries(HMCLauncher Version) +install(TARGETS HMCLauncher) \ No newline at end of file diff --git a/HMCLauncher/HMCL/main.cpp b/HMCLauncher/HMCL/main.cpp index 0d589c1684..78bdc48f47 100644 --- a/HMCLauncher/HMCL/main.cpp +++ b/HMCLauncher/HMCL/main.cpp @@ -8,8 +8,8 @@ Version J8(TEXT("8")); extern "C" { -_declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; -_declspec(dllexport) DWORD AmdPowerXpressRequestHighPerformance = 0x00000001; +__declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; +__declspec(dllexport) DWORD AmdPowerXpressRequestHighPerformance = 0x00000001; } LPCWSTR VENDOR_DIRS[] = { From f8d7c92d51caee8a86ddbab6382105de166431ee Mon Sep 17 00:00:00 2001 From: Zkitefly <2573874409@qq.com> Date: Tue, 24 Sep 2024 03:32:02 +0800 Subject: [PATCH 20/20] =?UTF-8?q?Close=20#3208:=20=E9=9A=90=E8=97=8F?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=9B=B4=E6=96=B0=E7=95=8C=E9=9D=A2=E7=9A=84?= =?UTF-8?q?Fabric/Quilt=20API=E9=80=89=E9=A1=B9=20(#3271)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/jackhuang/hmcl/ui/versions/InstallerListPage.java | 6 ++++++ 1 file changed, 6 insertions(+) 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 aea2967a7e..cca80f4af6 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 @@ -79,6 +79,12 @@ public void loadVersion(Profile profile, String versionId) { // Conventional libraries: game, fabric, forge, neoforge, liteloader, optifine for (InstallerItem item : group.getLibraries()) { String libraryId = item.getLibraryId(); + + // Skip fabric-api and quilt-api + if (libraryId.contains("fabric-api") || libraryId.contains("quilt-api")) { + continue; + } + String libraryVersion = analyzer.getVersion(libraryId).orElse(null); if (libraryVersion != null) {