From 31872f4f773211a856d2f9f139fe09446a6e387c Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Thu, 9 Nov 2023 21:19:26 +0800 Subject: [PATCH 01/10] Fix #2547 (#2549) --- HMCL/src/main/java/org/jackhuang/hmcl/game/LogExporter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LogExporter.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LogExporter.java index 844c33ad1d..74d8b53876 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LogExporter.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LogExporter.java @@ -94,7 +94,7 @@ private static void processLogs(Path directory, String fileExtension, String log if (Files.isRegularFile(file)) { FileTime time = Files.readAttributes(file, BasicFileAttributes.class).lastModifiedTime(); if (time.toMillis() >= processStartTime) { - String crashLog = Logging.filterForbiddenToken(FileUtils.readText(file)); + String crashLog = Logging.filterForbiddenToken(FileUtils.readText(file, OperatingSystem.NATIVE_CHARSET)); zipper.putTextFile(crashLog, file.getFileName().toString()); } } From f84be1e109853e0bcdab6196f12e3996a681f1b4 Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Thu, 9 Nov 2023 21:20:39 +0800 Subject: [PATCH 02/10] Fix #2539 (#2541) --- .../org/jackhuang/hmcl/ui/versions/ModListPageSkin.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 5c3173cd7e..dbca5da2b2 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 @@ -21,6 +21,7 @@ import com.jfoenix.controls.datamodels.treetable.RecursiveTreeObject; import javafx.beans.binding.Bindings; import javafx.beans.property.BooleanProperty; +import javafx.collections.ListChangeListener; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Node; @@ -174,6 +175,11 @@ class ModListPageSkin extends SkinBase { listView.setCellFactory(x -> new ModInfoListCell(listView, lastCell)); listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); Bindings.bindContent(listView.getItems(), skinnable.getItems()); + skinnable.getItems().addListener((ListChangeListener) c -> { + if (isSearching) { + search(); + } + }); center.setContent(listView); root.getContent().add(center); @@ -219,7 +225,7 @@ private void search() { } } else { String lowerQueryString = queryString.toLowerCase(Locale.ROOT); - predicate = s -> s.toLowerCase(Locale.ROOT).contains(lowerQueryString); + predicate = s -> s.contains(lowerQueryString); } // Do we need to search in the background thread? From df9499b723fe7a193c343bd46797feaef73aeef9 Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Thu, 9 Nov 2023 21:23:10 +0800 Subject: [PATCH 03/10] Catch Internal Error (#2520) * Catch Internal Error * Fix * Fix I18N --- .../java/org/jackhuang/hmcl/countly/CrashReport.java | 7 +++++++ .../main/java/org/jackhuang/hmcl/ui/CrashWindow.java | 11 +++++++---- .../java/org/jackhuang/hmcl/util/CrashReporter.java | 6 ++---- HMCL/src/main/resources/assets/lang/I18N.properties | 3 ++- .../src/main/resources/assets/lang/I18N_es.properties | 2 +- .../src/main/resources/assets/lang/I18N_ja.properties | 2 +- .../src/main/resources/assets/lang/I18N_ru.properties | 2 +- .../src/main/resources/assets/lang/I18N_zh.properties | 3 ++- .../main/resources/assets/lang/I18N_zh_CN.properties | 3 ++- 9 files changed, 25 insertions(+), 14 deletions(-) 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 dac5a9b062..75f562a275 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/countly/CrashReport.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/countly/CrashReport.java @@ -29,6 +29,10 @@ public CrashReport(Thread thread, Throwable throwable) { nonFatal = false; } + public Throwable getThrowable() { + return this.throwable; + } + public CrashReport setNonFatal() { nonFatal = true; return this; @@ -38,6 +42,9 @@ public boolean shouldBeReport() { if (!stackTrace.contains("org.jackhuang")) return false; + if (throwable instanceof VirtualMachineError) + return false; + return true; } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/CrashWindow.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/CrashWindow.java index 46ce19abc0..0d08bb5be2 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/CrashWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/CrashWindow.java @@ -27,6 +27,7 @@ import javafx.scene.layout.StackPane; import javafx.stage.Stage; import org.jackhuang.hmcl.Metadata; +import org.jackhuang.hmcl.countly.CrashReport; import org.jackhuang.hmcl.upgrade.UpdateChecker; import static org.jackhuang.hmcl.ui.FXUtils.newImage; @@ -37,16 +38,18 @@ */ public class CrashWindow extends Stage { - public CrashWindow(String text) { + public CrashWindow(CrashReport report) { Label lblCrash = new Label(); - if (UpdateChecker.isOutdated()) - lblCrash.setText(i18n("launcher.crash_out_dated")); + if (report.getThrowable() instanceof InternalError) + lblCrash.setText(i18n("launcher.crash.java_internal_error")); + else if (UpdateChecker.isOutdated()) + lblCrash.setText(i18n("launcher.crash.hmcl_out_dated")); else lblCrash.setText(i18n("launcher.crash")); lblCrash.setWrapText(true); TextArea textArea = new TextArea(); - textArea.setText(text); + textArea.setText(report.getDisplayText()); textArea.setEditable(false); Button btnContact = new Button(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/CrashReporter.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/CrashReporter.java index 5ec3d2e311..bb097becac 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/CrashReporter.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/CrashReporter.java @@ -97,13 +97,11 @@ public void uncaughtException(Thread t, Throwable e) { if (!report.shouldBeReport()) return; - String text = report.getDisplayText(); - - LOG.log(Level.SEVERE, text); + LOG.log(Level.SEVERE, report.getDisplayText()); Platform.runLater(() -> { if (checkThrowable(e)) { if (showCrashWindow) { - new CrashWindow(text).show(); + new CrashWindow(report).show(); } if (!UpdateChecker.isOutdated() && IntegrityChecker.isSelfVerified()) { reportToServer(report); diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index ad12af6417..c3f1104c06 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -710,7 +710,8 @@ launcher.cache_directory.disabled=Disabled launcher.cache_directory.invalid=Unable to create cache directory, falling back to default. launcher.contact=Contact Us launcher.crash=Hello Minecraft! Launcher has encountered a fatal error\! Please copy the following log and ask for help on our Discord community, GitHub or Minecraft Forum. -launcher.crash_out_dated=Hello Minecraft! Launcher has encountered a fatal error\! Your launcher is outdated. Please update your launcher\! +launcher.crash.java_internal_error=Hello Minecraft! Launcher has encountered a fatal error because your Java is broken. Please uninstall your Java, and download a suitable Java here. +launcher.crash.hmcl_out_dated=Hello Minecraft! Launcher has encountered a fatal error\! Your launcher is outdated. Please update your launcher\! launcher.update_java=Please update your Java version. login.empty_username=You have not set your username yet\! diff --git a/HMCL/src/main/resources/assets/lang/I18N_es.properties b/HMCL/src/main/resources/assets/lang/I18N_es.properties index 3257f51d18..2b43c521b5 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_es.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_es.properties @@ -659,7 +659,7 @@ launcher.cache_directory.disabled=Desactivado launcher.cache_directory.invalid=No se ha podido crear el directorio de la caché, volviendo a los valores por defecto. launcher.contact=Contacta con nosotros launcher.crash=¡Hello Minecraft! Launcher ha encontrado un error fatal. Por favor, copie el siguiente registro y pida ayuda en nuestra comunidad en Discord, GitHub o Minecraft Forums. -launcher.crash_out_dated=¡Hello Minecraft! Launcher ha encontrado un error fatal. Su launcher está desactualizado. Por favor, ¡actualícelo!. +launcher.crash.hmcl_out_dated=¡Hello Minecraft! Launcher ha encontrado un error fatal. Su launcher está desactualizado. Por favor, ¡actualícelo!. launcher.update_java=Por favor, actualice su versión de Java. login.empty_username=¡Todavía no has puesto tu nombre de usuario! diff --git a/HMCL/src/main/resources/assets/lang/I18N_ja.properties b/HMCL/src/main/resources/assets/lang/I18N_ja.properties index 8c70835856..1b2c165bcb 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_ja.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_ja.properties @@ -505,7 +505,7 @@ launcher.cache_directory.disabled=無効(常にゲームパスを使用する) launcher.cache_directory.invalid=無効なディレクトリ。デフォルト設定の復元。 launcher.contact=お問い合わせ launcher.crash=Hello Minecraft!ランチャーがクラッシュしました!次のコンテンツをコピーして、MCBBS、Baidu Tieba、GitHub、またはMinecraftForumを介してフィードバックを送信してください。 -launcher.crash_out_dated=Hello Minecraft!ランチャーがクラッシュしました!ランチャーが古くなっています。ランチャーを更新してください! +launcher.crash.hmcl_out_dated=Hello Minecraft!ランチャーがクラッシュしました!ランチャーが古くなっています。ランチャーを更新してください! launcher.update_java=Javaを更新してください。 login.empty_username=ユーザー名を設定していません! diff --git a/HMCL/src/main/resources/assets/lang/I18N_ru.properties b/HMCL/src/main/resources/assets/lang/I18N_ru.properties index 0400c3c7bb..f941890854 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_ru.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_ru.properties @@ -510,7 +510,7 @@ launcher.cache_directory.disabled=Отключено launcher.cache_directory.invalid=Недопустимый каталог. Восстановление настроек по умолчанию. launcher.contact=Свяжитесь с нами launcher.crash=Лаунчер Hello Minecraft! рухнул! Скопируйте следующее содержимое и отправьте отзыв через MCBBS, Baidu Tieba, GitHub или Minecraft Forum. -launcher.crash_out_dated=Лаунчер Hello Minecraft! рухнул! Ваш лаунчер устарел, обновите его! +launcher.crash.hmcl_out_dated=Лаунчер Hello Minecraft! рухнул! Ваш лаунчер устарел, обновите его! launcher.update_java=Обновите свой Java. login.empty_username=Вы не задали имя пользователя! diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index fc92c65d07..67fe253fe4 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -582,7 +582,8 @@ launcher.cache_directory.disabled=停用 launcher.cache_directory.invalid=無法建立自訂的快取目錄,還原至預設設定 launcher.contact=聯絡我們 launcher.crash=Hello Minecraft! Launcher 遇到了無法處理的錯誤,請複製下列內容並透過 MCBBS、貼吧、GitHub 或 Minecraft Forum 回報 bug。 -launcher.crash_out_dated=Hello Minecraft! Launcher 遇到了無法處理的錯誤,已偵測到您的啟動器不是最新版本,請更新後重試! +launcher.crash.java_internal_error=HHello Minecraft! Launcher 由於當前 Java 損壞而無法繼續運行,請卸載當前 Java,點擊 此處 安裝合適的 Java 版本。 +launcher.crash.hmcl_out_dated=Hello Minecraft! Launcher 遇到了無法處理的錯誤,已偵測到您的啟動器不是最新版本,請更新後重試! launcher.update_java=請更新您的 Java login.empty_username=你還未設定使用者名稱! 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 94d7908594..32617d018d 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -581,7 +581,8 @@ launcher.cache_directory.disabled=禁用(总是使用游戏路径) launcher.cache_directory.invalid=无法创建自定义的缓存目录,恢复默认设置 launcher.contact=联系我们 launcher.crash=Hello Minecraft! Launcher 遇到了无法处理的错误,请复制下列内容并点击右下角的按钮反馈 bug。 -launcher.crash_out_dated=Hello Minecraft! Launcher 遇到了无法处理的错误,已检测到您的启动器不是最新版本,请更新后再试。 +launcher.crash.java_internal_error=Hello Minecraft! Launcher 由于当前 Java 损坏而无法继续运行,请卸载当前 Java,点击 此处 安装合适的 Java 版本。 +launcher.crash.hmcl_out_dated=Hello Minecraft! Launcher 遇到了无法处理的错误,已检测到您的启动器不是最新版本,请更新后再试。 launcher.update_java=请更新您的 Java \n你可以访问\n https://docs.hmcl.net/help.html \n页面寻求帮助。 login.empty_username=你还未设置用户名! From 5aeaba4636fd3f8157a869ab0432c8365bbf1f61 Mon Sep 17 00:00:00 2001 From: zkitefly Date: Thu, 9 Nov 2023 21:24:02 +0800 Subject: [PATCH 04/10] add PLATFORM_cn (#2536) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add PLATFORM_cn * Update PLATFORM_cn.md * 润色 * Update PLATFORM_cn.md * Update PLATFORM.md * 格式化 --- PLATFORM.md | 12 +++++++----- PLATFORM_cn.md | 39 +++++++++++++++++++++++++++++++++++++++ README.md | 13 +++++++++++-- README_cn.md | 19 ++++++++++++++----- 4 files changed, 71 insertions(+), 12 deletions(-) create mode 100644 PLATFORM_cn.md diff --git a/PLATFORM.md b/PLATFORM.md index a12d00a32c..c23926ae61 100644 --- a/PLATFORM.md +++ b/PLATFORM.md @@ -1,13 +1,15 @@ # Platform Support Status +English | [简体中文](PLATFORM_cn.md) + | | Windows | Linux | Mac OS | FreeBSD | |----------------------------|:------------------------------------|:--------------------------|:----------------------------------------------------|:--------| | x86-64 | ✅️ | ✅️ | ✅️ | ❔ | | x86 | ✅️ | ✅️ | / | / | -| ARM64 | 👌 (1.8+)
✅ (use x86 emulation) | 👌 | 👌 (1.6~1.18.2)
✅ (1.19+)
✅ (use Rosetta 2) | ❔ | +| ARM64 | 👌 (Minecraft 1.8+)
✅ (use x86 emulation) | 👌 | 👌 (Minecraft 1.6~1.18.2)
✅ (Minecraft 1.19+)
✅ (use Rosetta 2) | ❔ | | ARM32 | /️ | 👌 | / | / | | MIPS64el | / | 👌 | / | / | -| RISC-V 64 | / | 👌 (1.13+) | / | / | +| RISC-V 64 | / | 👌 (Minecraft 1.13+) | / | / | | LoongArch64 | / | 👌 (both old and new ABI) | / | / | | PowerPC-64 (Little-Endian) | / | ❔ | / | / | | S390x | / | ❔ | / | / | @@ -21,17 +23,17 @@ Legend: * 👌: Supported platforms. Support is provided by HMCL, tested to work, but may have more issues than a fully supported platform. - Support for versions below 1.6 is not guaranteed. + Support for versions below Minecraft 1.6 is not guaranteed. If you encounter a problem that does not exist on fully supported platforms, you can report it to HMCL. * ❔: Low level supported platforms. HMCL can run on this platform and has some basic support. However, launching the game directly is not yet available. - If you want to start the game, + If you want to start the game, you'll need to get the native libraries needed by Minecraft in other way and specify the native path in the instance settings. * /: Not applicable. We have no plans to support these platforms at this time, mainly because we don't have the equipment to test them. - If you can help us adapt, please file a support request via issue. \ No newline at end of file + If you can help us adapt, please file a support request via issue. diff --git a/PLATFORM_cn.md b/PLATFORM_cn.md new file mode 100644 index 0000000000..c0e2b68e8b --- /dev/null +++ b/PLATFORM_cn.md @@ -0,0 +1,39 @@ +# 平台支持状态 + +[English](PLATFORM.md) | 简体中文 + +| | Windows | Linux | Mac OS | FreeBSD | +|----------------------------|:------------------------------------|:--------------------------|:----------------------------------------------------|:--------| +| x86-64 | ✅️ | ✅️ | ✅️ | ❔ | +| x86 | ✅️ | ✅️ | / | / | +| ARM64 | 👌 (Minecraft 1.8+)
✅ (使用 x86 模拟) | 👌 | 👌 (Minecraft 1.6~1.18.2)
✅ (Minecraft 1.19+)
✅ (使用 Rosetta 2) | ❔ | +| ARM32 | /️ | 👌 | / | / | +| MIPS64el | / | 👌 | / | / | +| RISC-V 64 | / | 👌 (Minecraft 1.13+) | / | / | +| LoongArch64 | / | 👌 (包括新旧 ABI) | / | / | +| PowerPC-64 (小端序) | / | ❔ | / | / | +| S390x | / | ❔ | / | / | + +图例: + +* ✅: 官方支持的平台. + + 受 Mojang 官方支持. 在游戏中遇到的问题应该直接向 Mojang 反馈. + +* 👌: 支持的平台. + + 由 HMCL 提供支持, 经过测试可以正常运行, 但可能比得到全面支持的平台有更多问题. + 不保证支持 Minecraft 1.6 以下的版本. + 如果你遇到在得到全面支持的平台上不存在的问题, 可以向 HMCL 反馈. + +* ❔: 低级别支持的平台. + + HMCL 可以在这个平台上运行, 并且有一些基本的支持. + 但是, 还不能正常的启动游戏. + 如果你想正常启动游戏, + 则需要通过其他方式获得游戏所需的本地库(LWJGL), 并在版本设置中指定本地库路径. + +* /: 不支持的平台. + + 我们目前还没有打算支持这些平台, 主要是因为我们没有测试这些平台的设备. + 如果你能帮助我们进行测试, 请通过提交 Issue 提出支持请求. diff --git a/README.md b/README.md index 0c7d63fc86..55fdb56825 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # ⛏ Hello Minecraft! Launcher 💎 + [![Build Status](https://ci.huangyuhui.net/job/HMCL/badge/icon?.svg)](https://ci.huangyuhui.net/job/HMCL) ![Downloads](https://img.shields.io/github/downloads/huanghongxun/HMCL/total) ![Stars](https://img.shields.io/github/stars/huanghongxun/HMCL) @@ -8,26 +9,30 @@ English | [中文](README_cn.md) ## Introduction + HMCL is a cross-platform Minecraft launcher which supports Mod Management, Game Customizing, Auto Installing (Forge, Fabric, Quilt, LiteLoader and OptiFine), Modpack Creating, UI Customization, and more. HMCL has amazing cross-platform capabilities. -It can not only run on different operating systems such as Windows, Linux, and macOS, +It can not only run on different operating systems such as Windows, Linux, and macOS, but also supports multiple CPU architectures such as x86, arm, mips, and loongarch. You can easily play Minecraft on different platforms through HMCL. For systems and CPU architectures supported by HMCL, see [this table](PLATFORM.md). ## Download + Download the latest version from [the official website](https://hmcl.huangyuhui.net/download). -Note: The recent versions released in GitHub are beta versions, which contains extra testing functions compared to the release versions on the official website. However, they may be unstable and you're more likely to encounter bugs or unexpected problems. +You can also download the latest version of HMCL in [GitHub Releases](https://github.com/huanghongxun/HMCL/releases). Although not necessary, it is recommended to download the ones from the official website. ## License + The software is distributed under [GPLv3](https://www.gnu.org/licenses/gpl-3.0.html) with additional terms. ### Additional terms under GPLv3 Section 7 + 1. When you distribute a modified version of the software, you must change the software name or the version number in a reasonable way in order to distinguish it from the original version. (Under [GPLv3, 7(c)](https://github.com/huanghongxun/HMCL/blob/11820e31a85d8989e41d97476712b07e7094b190/LICENSE#L372-L374)) The software name and the version number can be edited [here](https://github.com/huanghongxun/HMCL/blob/javafx/HMCL/src/main/java/org/jackhuang/hmcl/Metadata.java#L33-L35). @@ -35,12 +40,15 @@ The software is distributed under [GPLv3](https://www.gnu.org/licenses/gpl-3.0.h 2. You must not remove the copyright declaration displayed in the software. (Under [GPLv3, 7(b)](https://github.com/huanghongxun/HMCL/blob/11820e31a85d8989e41d97476712b07e7094b190/LICENSE#L368-L370)) ## Contribution + If you want to submit a pull request, there are some requirements: + * IDE: Intellij IDEA * Compiler: Java 1.8 * Do NOT modify `gradle` files ### Compilation + Simply execute the following command in project root directory: ```bash @@ -50,6 +58,7 @@ Simply execute the following command in project root directory: Make sure you have Java installed with JavaFX 8 at least. Liberica Full JDK 8 or later is recommended. ## JVM Options (for debugging) + | Parameter | Description | |----------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------| | `-Dhmcl.home=` | Override HMCL directory. | diff --git a/README_cn.md b/README_cn.md index c7762e1472..4cd8331a93 100644 --- a/README_cn.md +++ b/README_cn.md @@ -1,4 +1,5 @@ # ⛏ Hello Minecraft! Launcher 💎 + [![Build Status](https://ci.huangyuhui.net/job/HMCL/badge/icon?.svg)](https://ci.huangyuhui.net/job/HMCL) ![Downloads](https://img.shields.io/github/downloads/huanghongxun/HMCL/total) ![Stars](https://img.shields.io/github/stars/huanghongxun/HMCL) @@ -8,24 +9,28 @@ [English](README.md) | 中文 ## 简介 + HMCL 是一款跨平台 Minecraft 启动器, 支持 Mod 管理, 游戏自定义, 游戏自动安装 (Forge, Fabric, Quilt, LiteLoader 与 OptiFine), 模组包创建, 界面自定义等功能. -HMCL 有着强大的跨平台能力。它不仅支持 Windows、Linux、macOS 等常见的操作系统,同时也支持 x86、ARM、MIPS 和 LoongArch 等不同的 CPU 架构。 -您可以使用 HMCL 在不同平台上轻松的游玩 Minecraft。 +HMCL 有着强大的跨平台能力. 它不仅支持 Windows、Linux、macOS 等常见的操作系统,同时也支持 x86、ARM、MIPS 和 LoongArch 等不同的 CPU 架构. +您可以使用 HMCL 在不同平台上轻松的游玩 Minecraft. -如果您想要了解 HMCL 对不同平台的支持程度,请参见[此表格](PLATFORM.md)。 +如果您想要了解 HMCL 对不同平台的支持程度,请参见[此表格](PLATFORM_cn.md). ## 下载 -请从 [HMCL 官网](https://hmcl.huangyuhui.net/download)下载最新版本的 HMCL. -注: 在 GitHub 发布的最新版 HMCL 为测试版, 与官网上发布的正式版相比, 它们包含额外的测试功能. 但是, 它们相较于正式版更不稳定, 您更有可能在使用测试版的过程中遇到 Bug 或意外问题. +请从 [HMCL 官网](https://hmcl.huangyuhui.net/download) 下载最新版本的 HMCL. + +你也可以在 [GitHub Releases](https://github.com/huanghongxun/HMCL/releases) 中下载最新版本的 HMCL. 虽然并不强制, 但仍建议通过 HMCL 官网下载启动器. ## 开源协议 + 该程序在 [GPLv3](https://www.gnu.org/licenses/gpl-3.0.html) 开源协议下发布, 同时附有附加条款. ### 附加条款 (依据 GPLv3 开源协议第七条) + 1. 当您分发该程序的修改版本时, 您必须以一种合理的方式修改该程序的名称或版本号, 以示其与原始版本不同. (依据 [GPLv3, 7(c)](https://github.com/huanghongxun/HMCL/blob/11820e31a85d8989e41d97476712b07e7094b190/LICENSE#L372-L374)) 该程序的名称及版本号可在[此处](https://github.com/huanghongxun/HMCL/blob/javafx/HMCL/src/main/java/org/jackhuang/hmcl/Metadata.java#L33-L35)修改. @@ -33,12 +38,15 @@ HMCL 有着强大的跨平台能力。它不仅支持 Windows、Linux、macOS 2. 您不得移除该程序所显示的版权声明. (依据 [GPLv3, 7(b)](https://github.com/huanghongxun/HMCL/blob/11820e31a85d8989e41d97476712b07e7094b190/LICENSE#L368-L370)) ## 贡献 + 如果您想提交一个 Pull Request, 必须遵守如下要求: + * IDE: Intellij IDEA * 编译器: Java 1.8 * **不要**修改 `gradle` 相关文件 ### 编译 + 于项目根目录执行以下命令: ```bash @@ -48,6 +56,7 @@ HMCL 有着强大的跨平台能力。它不仅支持 Windows、Linux、macOS 请确保您至少安装了含有 JavaFX 8 的 Java. 建议使用 Liberica Full JDK 8 或更高版本. ## JVM 选项 (用于调试) + | 参数 | 简介 | |----------------------------------------------|-------------------------------------------------------------------------------------------------| | `-Dhmcl.home=` | 覆盖 HMCL 数据文件夹. | From 453ba6eb752c8bb3639145ff0405ca79d44697f4 Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Sun, 12 Nov 2023 20:30:36 +0800 Subject: [PATCH 05/10] Fix build.gradle and README (#2565) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update build.gradle.kts * Fix table format and typo in README(_cn).md * Replace Github to GitHub --------- Co-authored-by: Burning_TNT --- .github/workflows/gitee.yml | 2 +- HMCL/build.gradle.kts | 6 ++--- .../resources/assets/lang/I18N.properties | 4 ++-- .../resources/assets/lang/I18N_es.properties | 4 ++-- .../resources/assets/lang/I18N_ja.properties | 4 ++-- .../resources/assets/lang/I18N_ru.properties | 4 ++-- .../resources/assets/lang/I18N_zh.properties | 4 ++-- .../assets/lang/I18N_zh_CN.properties | 4 ++-- PLATFORM.md | 20 ++++++++-------- PLATFORM_cn.md | 24 +++++++++---------- 10 files changed, 38 insertions(+), 38 deletions(-) diff --git a/.github/workflows/gitee.yml b/.github/workflows/gitee.yml index c13b301958..c8c0c7ca5d 100644 --- a/.github/workflows/gitee.yml +++ b/.github/workflows/gitee.yml @@ -8,7 +8,7 @@ jobs: if: ${{ github.repository_owner == 'huanghongxun' }} runs-on: ubuntu-latest steps: - - name: Mirror Github to Gitee + - name: Mirror GitHub to Gitee uses: Yikun/hub-mirror-action@v1.3 with: src: github/huanghongxun diff --git a/HMCL/build.gradle.kts b/HMCL/build.gradle.kts index 66e5992993..b503d35276 100644 --- a/HMCL/build.gradle.kts +++ b/HMCL/build.gradle.kts @@ -19,7 +19,7 @@ val buildNumber = System.getenv("BUILD_NUMBER")?.toInt().let { number -> if (number != null) { (number - offset).toString() } else { - val shortCommit = System.getenv("GITHUB_SHA")?.toLowerCase()?.substring(0, 7) + val shortCommit = System.getenv("GITHUB_SHA")?.lowercase()?.substring(0, 7) val prefix = if (isOfficial) "dev" else "unofficial" if (!shortCommit.isNullOrEmpty()) "$prefix-$shortCommit" else "SNAPSHOT" } @@ -38,7 +38,7 @@ dependencies { implementation("libs:JFoenix") } -fun digest(algorithm: String, bytes: ByteArray) = MessageDigest.getInstance(algorithm).digest(bytes) +fun digest(algorithm: String, bytes: ByteArray): ByteArray = MessageDigest.getInstance(algorithm).digest(bytes) fun createChecksum(file: File) { val algorithms = linkedMapOf( @@ -187,7 +187,7 @@ tasks.processResources { dependsOn(tasks["java11Classes"]) into("assets") { - from(project.buildDir.resolve("openjfx-dependencies.json")) + from(project.layout.buildDirectory.file("openjfx-dependencies.json")) } dependsOn(rootProject.tasks["generateOpenJFXDependencies"]) } diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index c3f1104c06..1ab9b65bf1 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -485,7 +485,7 @@ game.crash.reason.mod_files_are_decompressed=The current game cannot continue to game.crash.reason.cannot_find_launch_target_fmlclient=The current game cannot be found because Forge is not installed completely. \nYou can try to go to Game Management - Automatically install Forge and reinstall it. game.crash.reason.shaders_mod=The current game cannot continue to run because both Optifine and Shaders Mod are installed. \nBecause Optifine has integrated Shaders Mod's functions, just remove Shaders Mod. game.crash.reason.too_many_mods_lead_to_exceeding_the_id_limit=The current game cannot continue to run because you have installed too many Mods, which exceeds the ID limit of the game.\nPlease try installingJEID, or delete some large Mods. -game.crash.reason.night_config_fixes=The current game cannot continue to run due to some problems with Night Config. \nYou can try to install the Night Config Fixes mod, which may help you this problem. \nFor more information, visit the mod's Github repository. +game.crash.reason.night_config_fixes=The current game cannot continue to run due to some problems with Night Config. \nYou can try to install the Night Config Fixes mod, which may help you this problem. \nFor more information, visit the mod's GitHub repository. game.crash.reason.optifine_causes_the_world_to_fail_to_load=The current game may not continue to run because of OptiFine.\nThis problem only occurs in a specific version of OptiFine. You can try changing the version of OptiFine in version setting - automatic installation. game.crash.reason.jdk_9=The game cannot run because the Java version is too new for this instance.\n\ \n\ @@ -504,7 +504,7 @@ You can try deleting or updating it. game.crash.reason.mac_jdk_8u261=The game crashed because your current Forge or OptiFine version is not compatible with your Java installation.\n\ \n\ Please try updating Forge and OptiFine, or try using Java 8u251 or earlier versions. -game.crash.reason.forge_repeat_installation=The current game cannot continue to run due to a duplicate installation of Forge. This is a known issue\nIt is recommended to upload the log feedback to Github so that we can find more clues and fix this question. \nCurrently you can go to the automatic installation to uninstall Forge and reinstall it. +game.crash.reason.forge_repeat_installation=The current game cannot continue to run due to a duplicate installation of Forge. This is a known issue\nIt is recommended to upload the log feedback to GitHub so that we can find more clues and fix this question. \nCurrently you can go to the automatic installation to uninstall Forge and reinstall it. game.crash.reason.optifine_repeat_installation=The current game cannot continue to run due to repeated installation of Optifine. \nPlease delete Optifine under the Mod folder or go to Game Management-Automatic Installation to uninstall Optifine that is automatically installed. game.crash.reason.memory_exceeded=The game crashed due to too much memory allocated for a small page file.\n\ \n\ diff --git a/HMCL/src/main/resources/assets/lang/I18N_es.properties b/HMCL/src/main/resources/assets/lang/I18N_es.properties index 2b43c521b5..8cf3a28aed 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_es.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_es.properties @@ -448,7 +448,7 @@ game.crash.reason.forgemod_resolution=El juego se ha bloqueado debido a un fallo \n\ Forge proporcionó los siguientes detalles\:\n\ %1$s -game.crash.reason.night_config_fixes=El juego actual no puede seguir ejecutándose debido a algunos problemas con Night Config. \nPuedes intentar instalar el mod Night Config Fixes, que puede ayudarte con este problema. \nPara obtener más información, visite el repositorio de Github del mod. +game.crash.reason.night_config_fixes=El juego actual no puede seguir ejecutándose debido a algunos problemas con Night Config. \nPuedes intentar instalar el mod Night Config Fixes, que puede ayudarte con este problema. \nPara obtener más información, visite el repositorio de GitHub del mod. game.crash.reason.mod_resolution_collection=El juego se ha bloqueado porque la versión del mod no es compatible.\n\ \n\ %1$s requiere %2$s.\n\ @@ -470,7 +470,7 @@ Si quieres jugar con esta versión del mod instalada, debes cambiar la versión En caso contrario, debes instalar una versión compatible con esta versión de Minecraft. game.crash.reason.mod_resolution_mod_version=%1$s (Versión: %2$s) game.crash.reason.mod_resolution_mod_version.any=%1$s (Cualquier versión) -game.crash.reason.forge_repeat_installation=El juego actual no puede continuar ejecutándose debido a una instalación duplicada de Forge. Este es un problema conocido\nSe recomienda cargar los comentarios del registro en Github para que podamos encontrar más pistas y arreglar esta pregunta. \nActualmente puede ir a la instalación automática para desinstalar Forge y volver a instalarlo. +game.crash.reason.forge_repeat_installation=El juego actual no puede continuar ejecutándose debido a una instalación duplicada de Forge. Este es un problema conocido\nSe recomienda cargar los comentarios del registro en GitHub para que podamos encontrar más pistas y arreglar esta pregunta. \nActualmente puede ir a la instalación automática para desinstalar Forge y volver a instalarlo. game.crash.reason.optifine_repeat_installation=El juego actual no puede seguir ejecutándose debido a la instalación repetida de Optifine. \nElimine Optifine de la carpeta Mod o vaya a Gestión de juegos-Instalación automática para desinstalar Optifine que se instala automáticamente. game.crash.reason.modmixin_failure=El juego actual no puede continuar ejecutándose debido a algunas fallas en la inyección de mods. \nEsto generalmente significa que el mod tiene un error o no es compatible con el entorno actual. \nPuede consultar el registro para ver si hay un mod incorrecto. game.crash.reason.file_or_content_verification_failed=El juego actual tiene un problema porque fallaron algunos archivos o la verificación de contenido. \nIntente eliminar esta versión (incluidas las modificaciones) y vuelva a descargarla, o intente usar un proxy cuando vuelva a descargar, etc. diff --git a/HMCL/src/main/resources/assets/lang/I18N_ja.properties b/HMCL/src/main/resources/assets/lang/I18N_ja.properties index 1b2c165bcb..97dc7749d8 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_ja.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_ja.properties @@ -378,11 +378,11 @@ game.crash.reason.mod_resolution_missing=Modプレフィックスがないため game.crash.reason.mod_resolution_missing_minecraft=modが現在のMinecraftバージョンと互換性がないため、ゲームがクラッシュしました。\n%1$s にはMinecraftバージョン %2$s が必要です。\nインストールされているバージョンのmodを保持する場合は、変更する必要があります。ゲームバージョン。\n現在のゲームバージョンを引き続き使用する場合は、適切なmodを再インストールする必要があります。 game.crash.reason.mod_resolution_mod_version=%1$s(バージョン:%2$s) game.crash.reason.mod_resolution_mod_version.any=%1$s(任意のバージョン) -game.crash.reason.forge_repeat_installation=Forge が重複してインストールされているため、現在のゲームを続行できません。 これは既知の問題です\nログ フィードバックを Github にアップロードすることをお勧めします。この質問を修正してください。 \n現在、自動インストールに移動して Forge をアンインストールし、再インストールできます。 +game.crash.reason.forge_repeat_installation=Forge が重複してインストールされているため、現在のゲームを続行できません。 これは既知の問題です\nログ フィードバックを GitHub にアップロードすることをお勧めします。この質問を修正してください。 \n現在、自動インストールに移動して Forge をアンインストールし、再インストールできます。 game.crash.reason.shaders_mod=Optifine と Shaders Mod の両方がインストールされているため、現在のゲームを続行できません。\nOptifine には Shaders Mod の機能が統合されているため、Shaders Mod を削除してください。 game.crash.reason.optifine_repeat_installation=Optifine を繰り返しインストールしたため、現在のゲームを続行できません。 \nMod フォルダの下にある Optifine を削除するか、[ゲーム管理] - [自動インストール] に移動して、自動的にインストールされる Optifine をアンインストールしてください。 game.crash.reason.no_class_def_found_error=コードが不完全なためゲームを実行できません。\nゲームにmodがないか、一部のmodファイルが不完全であるか、一部のmodが現在のゲームと互換性がない可能性があります。\nゲームを再インストールする必要がある場合があります。およびmod、またはヘルプを要求します。\n%1$s がありません -game.crash.reason.night_config_fixes=Night Config に問題があるため、現在のゲームを続行できません。\nNight Config Fixes mod をインストールしてみると、この問題に役立つ可能性があります。\n詳細については、mod の Github リポジトリ にアクセスしてください。 +game.crash.reason.night_config_fixes=Night Config に問題があるため、現在のゲームを続行できません。\nNight Config Fixes mod をインストールしてみると、この問題に役立つ可能性があります。\n詳細については、mod の GitHub リポジトリ にアクセスしてください。 game.crash.reason.no_such_method_error=コードが不完全なためゲームを実行できません。\nゲームにmodがないか、一部のmodファイルが不完全であるか、一部のmodが現在のゲームと互換性がない可能性があります。\nゲームを再インストールする必要がある場合があります。と改造、または助けを求める。 game.crash.reason.cannot_find_launch_target_fmlclient=Forge が完全にインストールされていないため、現在のゲームが見つかりません。\nゲーム管理に移動してみてください - Forge を自動的にインストールして再インストールしてください。 game.crash.reason.opengl_not_supported=グラフィックスドライバに問題があるため、ゲームを実行できません。\nOpenGLがサポートされていないため、リモートデスクトップモードですか、それともストリーミングモードですか。はいの場合は、元のコンピューターを使用してゲームを開始してください。\nまたは、グラフィックスドライバーを最新バージョンに更新して、ゲームを再起動してください。コンピューターに個別のグラフィックがある場合は、ゲームが統合/コアグラフィックを使用しているかどうかを確認する必要があります。その場合は、ディスクリートグラフィックカードを使用してHMCLとゲームを実行してみてください。それでもこれらの問題が発生する場合は、新しいグラフィックカードまたは新しいコンピュータの入手を検討してください。 diff --git a/HMCL/src/main/resources/assets/lang/I18N_ru.properties b/HMCL/src/main/resources/assets/lang/I18N_ru.properties index f941890854..c5e2f58976 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_ru.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_ru.properties @@ -380,10 +380,10 @@ game.crash.reason.mod_resolution_missing=Игра вылетела, потому game.crash.reason.mod_resolution_missing_minecraft=Игра вылетела из-за несовместимости мода с текущей версией Minecraft.\n%1$s требует Minecraft версии %2$s.\nЕсли вы хотите сохранить установленную версию мода, вам следует изменить версию игры.\nЕсли вы хотите продолжать использовать текущую версию игры, вам следует переустановить необходимый мод. game.crash.reason.mod_resolution_mod_version=%1$s (Версия: %2$s) game.crash.reason.mod_resolution_mod_version.any=%1$s (Любая версия) -game.crash.reason.forge_repeat_installation=Текущая игра не может продолжать работать из-за дублирующей установки Forge. Это известная проблема\nРекомендуется загрузить отзыв журнала на Github, чтобы мы могли найти больше подсказок и исправить этот вопрос. \nВ настоящее время вы можете перейти к автоматической установке, чтобы удалить Forge и переустановить его. +game.crash.reason.forge_repeat_installation=Текущая игра не может продолжать работать из-за дублирующей установки Forge. Это известная проблема\nРекомендуется загрузить отзыв журнала на GitHub, чтобы мы могли найти больше подсказок и исправить этот вопрос. \nВ настоящее время вы можете перейти к автоматической установке, чтобы удалить Forge и переустановить его. game.crash.reason.optifine_repeat_installation=Текущая игра не может продолжать работать из-за повторной установки Optifine. \nУдалите Optifine из папки Mod или перейдите в Управление игрой-Автоматическая установка, чтобы удалить Optifine, который устанавливается автоматически. game.crash.reason.modlauncher_8=Игра вылетела из-за того, что используемая вами версия Forge несовместима с текущей версией Java. Попробуйте обновить Forge или начните с Java 8u312/11.0.13/17.0.1 или более ранней версии. -game.crash.reason.night_config_fixes=Текущая игра не может продолжать работать из-за некоторых проблем с Night Config. \nВы можете попробовать установить мод Night Config Fixes, который может решить эту проблему. \nДля получения дополнительной информации посетите репозиторий мода на Github. +game.crash.reason.night_config_fixes=Текущая игра не может продолжать работать из-за некоторых проблем с Night Config. \nВы можете попробовать установить мод Night Config Fixes, который может решить эту проблему. \nДля получения дополнительной информации посетите репозиторий мода на GitHub. game.crash.reason.no_class_def_found_error=Невозможно запустить игру из-за неполного кода.\nВ вашей игре может отсутствовать мод, или некоторые файлы модов могут быть неполными, или некоторые моды несовместимы с текущей игрой.\nВозможно, вам придётся переустановить игру и моды или обратиться за помощью.\n%1$s отсутствует game.crash.reason.shaders_mod=Текущая игра не может продолжать работать, так как установлены и Optifine, и Shaders Mod. \nПоскольку в Optifine интегрированы функции Shaders Mod, просто удалите Shaders Mod. game.crash.reason.cannot_find_launch_target_fmlclient=Das aktuelle Spiel kann nicht gefunden werden, da Forge nicht vollständig installiert ist. \nSie können versuchen, zur Spielverwaltung - Forge automatisch zu installieren und erneut zu installieren. diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index 67fe253fe4..9b2b1d6560 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -443,10 +443,10 @@ game.crash.reason.mod_resolution_missing=當前遊戲因為缺少 Mod 前置, game.crash.reason.mod_resolution_missing_minecraft=當前遊戲因為 Mod 和 Minecraft 遊戲版本不匹配,無法繼續運行。\n%1$s 需要 Minecraft %2$s 才能運行。\n如果你要繼續使用你已經安裝的 Mod,你可以選擇安裝對應的 Minecraft 版本;如果你要繼續使用當前 Minecraft 版本,你需要安裝對應版本的 Mod。 game.crash.reason.mod_resolution_mod_version=%1$s (版本號 %2$s) game.crash.reason.mod_resolution_mod_version.any=%1$s (任意版本) -game.crash.reason.forge_repeat_installation=當前遊戲因為 Forge 重複安裝,無法繼續運行。此為已知問題\n建議將日誌上傳反饋至 Github ,以便我們找到更多線索並修復此問題。\n目前你可以到 自動安裝 裡頭卸載 Forge 並重新安裝。 +game.crash.reason.forge_repeat_installation=當前遊戲因為 Forge 重複安裝,無法繼續運行。此為已知問題\n建議將日誌上傳反饋至 GitHub ,以便我們找到更多線索並修復此問題。\n目前你可以到 自動安裝 裡頭卸載 Forge 並重新安裝。 game.crash.reason.optifine_repeat_installation=當前遊戲因為重複安裝 Optifine,無法繼續運行。 \n請刪除 Mod 文件夾下的 Optifine 或前往 遊戲管理-自動安裝 卸載自動安裝的 Optifine。 game.crash.reason.optifine_is_not_compatible_with_forge=當前遊戲因為OptiFine與當前版本的Forge不相容,導致了遊戲崩潰。\n請前往 OptiFine 官網查看 OptiFine 所相容的 Forge 版本,並嚴格按照對應版本重新安裝遊戲或在版本設定-自動安裝中更換版本。\n經測試,Forge版本過高或過低都可能導致崩潰。 -game.crash.reason.night_config_fixes=當前遊戲因為 Night Config 庫的一些問題,無法繼續運行。\n你可以嘗試安裝 Night Config Fixes 模組,這或許能幫助你解決這個問題。\n了解更多,可訪問該模組的 Github 倉庫。 +game.crash.reason.night_config_fixes=當前遊戲因為 Night Config 庫的一些問題,無法繼續運行。\n你可以嘗試安裝 Night Config Fixes 模組,這或許能幫助你解決這個問題。\n了解更多,可訪問該模組的 GitHub 倉庫。 game.crash.reason.mod_files_are_decompressed=當前遊戲因為 Mod 檔案被解壓了,無法繼續運行。\n請直接把整個 Mod 檔案放進 Mod 資料夾中即可。\n若解壓就會導致遊戲出錯,請删除Mod資料夾中已被解壓的Mod,然後再啟動遊戲。 game.crash.reason.too_many_mods_lead_to_exceeding_the_id_limit=當前遊戲因為您所安裝的 Mod 過多,超出了遊戲的ID限制,無法繼續運行。\n請嘗試安裝JEID等修復Mod,或删除部分大型Mod。 game.crash.reason.optifine_causes_the_world_to_fail_to_load=當前遊戲因為 Mod 檔案被解壓了,無法繼續運行。\n請直接把整個Mod檔案放進Mod資料夾中即可!\n若解壓就會導致遊戲出錯,請删除Mod資料夾中已被解壓的Mod,然後再啟動遊戲。 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 32617d018d..aa6ffe8aa6 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -436,11 +436,11 @@ game.crash.reason.mod_resolution_missing=当前游戏因为缺少 Mod 前置, game.crash.reason.mod_resolution_missing_minecraft=当前游戏因为 Mod 和 Minecraft 游戏版本不匹配,无法继续运行。\n%1$s 需要 Minecraft %2$s 才能运行。\n如果你要继续使用你已经安装的 Mod,你可以选择安装对应的 Minecraft 版本;如果你要继续使用当前 Minecraft 版本,你需要安装对应版本的 Mod。 game.crash.reason.mod_resolution_mod_version=%1$s (版本号 %2$s) game.crash.reason.mod_resolution_mod_version.any=%1$s (任意版本) -game.crash.reason.forge_repeat_installation=当前游戏因为 Forge 重复安装,无法继续运行。此为已知问题\n建议将日志上传反馈至 Github ,以便我们找到更多线索并修复此问题。\n目前你可以到 自动安装 里头卸载 Forge 并重新安装。 +game.crash.reason.forge_repeat_installation=当前游戏因为 Forge 重复安装,无法继续运行。此为已知问题\n建议将日志上传反馈至 GitHub ,以便我们找到更多线索并修复此问题。\n目前你可以到 自动安装 里头卸载 Forge 并重新安装。 game.crash.reason.optifine_repeat_installation=当前游戏因为 Optifine 重复安装,无法继续运行。\n请删除 Mod 文件夹下的 Optifine 或前往 游戏管理-自动安装 卸载自动安装的 Optifine。 game.crash.reason.cannot_find_launch_target_fmlclient=当前游戏因为 Forge 安装不完整,无法继续运行。\n你可尝试前往 游戏管理 - 自动安装 中选择 Forge 并重新安装。 game.crash.reason.modmixin_failure=当前游戏因为某些 Mod 注入失败,无法继续运行。\n这一般代表着该 Mod 存在 Bug,或与当前环境不兼容。\n你可以查看日志寻找出错模组。 -game.crash.reason.night_config_fixes=当前游戏因为 Night Config 库的一些问题,无法继续运行。\n你可以尝试安装 Night Config Fixes 模组,这或许能帮助你解决这个问题。\n了解更多,可访问该模组的 Github 仓库。 +game.crash.reason.night_config_fixes=当前游戏因为 Night Config 库的一些问题,无法继续运行。\n你可以尝试安装 Night Config Fixes 模组,这或许能帮助你解决这个问题。\n了解更多,可访问该模组的 GitHub 仓库。 game.crash.reason.forge_error=Forge 可能已经提供了错误信息。\n你可以查看日志,并根据错误报告中的日志信息进行对应处。\n如果没有看到报错信息,可以查看错误报告了解错误具体是如何发生的。\n%1$s game.crash.reason.mod_resolution0=当前游戏因为一些 Mod 出现问题,无法继续运行。\n你可以查看日志寻找出错模组。 game.crash.reason.fabric_reports_an_error_and_gives_a_solution=Fabric 可能已经提供了错误信息。\n你可以查看日志,并根据错误报告中的日志信息进行对应处。\n如果没有看到报错信息,可以查看错误报告了解错误具体是如何发生的。 diff --git a/PLATFORM.md b/PLATFORM.md index c23926ae61..157035d87d 100644 --- a/PLATFORM.md +++ b/PLATFORM.md @@ -2,17 +2,17 @@ English | [简体中文](PLATFORM_cn.md) -| | Windows | Linux | Mac OS | FreeBSD | -|----------------------------|:------------------------------------|:--------------------------|:----------------------------------------------------|:--------| -| x86-64 | ✅️ | ✅️ | ✅️ | ❔ | -| x86 | ✅️ | ✅️ | / | / | +| | Windows | Linux | Mac OS | FreeBSD | +|----------------------------|:----------------------------------------------|:--------------------------|:------------------------------------------------------------------------|:--------| +| x86-64 | ✅️ | ✅️ | ✅️ | ❔ | +| x86 | ✅️ | ✅️ | / | / | | ARM64 | 👌 (Minecraft 1.8+)
✅ (use x86 emulation) | 👌 | 👌 (Minecraft 1.6~1.18.2)
✅ (Minecraft 1.19+)
✅ (use Rosetta 2) | ❔ | -| ARM32 | /️ | 👌 | / | / | -| MIPS64el | / | 👌 | / | / | -| RISC-V 64 | / | 👌 (Minecraft 1.13+) | / | / | -| LoongArch64 | / | 👌 (both old and new ABI) | / | / | -| PowerPC-64 (Little-Endian) | / | ❔ | / | / | -| S390x | / | ❔ | / | / | +| ARM32 | /️ | 👌 | / | / | +| MIPS64el | / | 👌 | / | / | +| RISC-V 64 | / | 👌 (Minecraft 1.13+) | / | / | +| LoongArch64 | / | 👌 (both old and new ABI) | / | / | +| PowerPC-64 (Little-Endian) | / | ❔ | / | / | +| S390x | / | ❔ | / | / | Legend: diff --git a/PLATFORM_cn.md b/PLATFORM_cn.md index c0e2b68e8b..ff0861f740 100644 --- a/PLATFORM_cn.md +++ b/PLATFORM_cn.md @@ -2,17 +2,17 @@ [English](PLATFORM.md) | 简体中文 -| | Windows | Linux | Mac OS | FreeBSD | -|----------------------------|:------------------------------------|:--------------------------|:----------------------------------------------------|:--------| -| x86-64 | ✅️ | ✅️ | ✅️ | ❔ | -| x86 | ✅️ | ✅️ | / | / | -| ARM64 | 👌 (Minecraft 1.8+)
✅ (使用 x86 模拟) | 👌 | 👌 (Minecraft 1.6~1.18.2)
✅ (Minecraft 1.19+)
✅ (使用 Rosetta 2) | ❔ | -| ARM32 | /️ | 👌 | / | / | -| MIPS64el | / | 👌 | / | / | -| RISC-V 64 | / | 👌 (Minecraft 1.13+) | / | / | -| LoongArch64 | / | 👌 (包括新旧 ABI) | / | / | -| PowerPC-64 (小端序) | / | ❔ | / | / | -| S390x | / | ❔ | / | / | +| | Windows | Linux | Mac OS | FreeBSD | +|------------------|:--------------------------------------|:---------------------|:-----------------------------------------------------------------------|:--------| +| x86-64 | ✅️ | ✅️ | ✅️ | ❔ | +| x86 | ✅️ | ✅️ | / | / | +| ARM64 | 👌 (Minecraft 1.8+)
✅ (使用 x86 模拟) | 👌 | 👌 (Minecraft 1.6~1.18.2)
✅ (Minecraft 1.19+)
✅ (使用 Rosetta 2) | ❔ | +| ARM32 | /️ | 👌 | / | / | +| MIPS64el | / | 👌 | / | / | +| RISC-V 64 | / | 👌 (Minecraft 1.13+) | / | / | +| LoongArch64 | / | 👌 (包括新旧 ABI) | / | / | +| PowerPC-64 (小端序) | / | ❔ | / | / | +| S390x | / | ❔ | / | / | 图例: @@ -29,7 +29,7 @@ * ❔: 低级别支持的平台. HMCL 可以在这个平台上运行, 并且有一些基本的支持. - 但是, 还不能正常的启动游戏. + 但是, 还不能正常地启动游戏. 如果你想正常启动游戏, 则需要通过其他方式获得游戏所需的本地库(LWJGL), 并在版本设置中指定本地库路径. From 55c55e9bda392f3b6166a604252838773c9d7175 Mon Sep 17 00:00:00 2001 From: Glavo Date: Fri, 1 Dec 2023 04:04:41 +0800 Subject: [PATCH 06/10] Bump Gradle to 8.5 (#2586) --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ac72c34e8a..1af9e0930b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 91f684ae2e7b75046a992cd18e271caf95dac335 Mon Sep 17 00:00:00 2001 From: zkitefly Date: Sat, 9 Dec 2023 01:02:08 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E4=B8=8D=E9=BB=98=E8=AE=A4=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=20forceUnicodeFont=20(#2501)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/jackhuang/hmcl/game/HMCLGameLauncher.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameLauncher.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameLauncher.java index 9a477adb48..bcb020fd2d 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameLauncher.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLGameLauncher.java @@ -93,7 +93,7 @@ private void generateOptionsTxt() { if (lang != null) { try { - FileUtils.writeText(optionsFile, String.format("lang:%s\nforceUnicodeFont:true\n", lang)); + FileUtils.writeText(optionsFile, String.format("lang:%s\n", lang)); } catch (IOException e) { Logging.LOG.log(Level.WARNING, "Unable to generate options.txt", e); } From cb7975515a12bcb5fab3258affa9f754f3b52a41 Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Thu, 14 Dec 2023 18:58:55 +0800 Subject: [PATCH 08/10] Update Minecraft version filter to 1.20.4 when downloding mods. (#2595) --- .../main/java/org/jackhuang/hmcl/mod/RemoteModRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/RemoteModRepository.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/RemoteModRepository.java index 0ed37ae4ac..119ea85f50 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/RemoteModRepository.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/RemoteModRepository.java @@ -89,7 +89,7 @@ public List getSubcategories() { } String[] DEFAULT_GAME_VERSIONS = new String[]{ - "1.20.1", "1.20", + "1.20.4", "1.20.3", "1.20.2", "1.20.1", "1.20", "1.19.4", "1.19.3", "1.19.2", "1.19.1", "1.19", "1.18.2", "1.18.1", "1.18", "1.17.1", "1.17", From ab41feff428b17ab804af5561b690bf97c43e21b Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Fri, 15 Dec 2023 20:38:23 +0800 Subject: [PATCH 09/10] Fix DefaultLauncher (#2584) --- .../hmcl/launch/DefaultLauncher.java | 144 +++++++++--------- 1 file changed, 73 insertions(+), 71 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java index 8ac53cefb0..542f804ec4 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java @@ -26,6 +26,7 @@ import org.jackhuang.hmcl.util.io.FileUtils; import org.jackhuang.hmcl.util.io.IOUtils; import org.jackhuang.hmcl.util.io.Unzipper; +import org.jackhuang.hmcl.util.platform.Bits; import org.jackhuang.hmcl.util.platform.*; import org.jackhuang.hmcl.util.versioning.VersionNumber; @@ -557,91 +558,92 @@ else if (!isWindows && !scriptExtension.equals("sh")) if (!FileUtils.makeFile(scriptFile)) throw new IOException("Script file: " + scriptFile + " cannot be created."); - OutputStream outputStream = new FileOutputStream(scriptFile); - Charset charset = StandardCharsets.UTF_8; - - if (isWindows) { - if (usePowerShell) { - // Write UTF-8 BOM - try { - outputStream.write(0xEF); - outputStream.write(0xBB); - outputStream.write(0xBF); - } catch (IOException e) { - outputStream.close(); - throw e; + try (OutputStream outputStream = Files.newOutputStream(scriptFile.toPath())) { + Charset charset = StandardCharsets.UTF_8; + + if (isWindows) { + if (usePowerShell) { + // Write UTF-8 BOM + try { + outputStream.write(0xEF); + outputStream.write(0xBB); + outputStream.write(0xBF); + } catch (IOException e) { + outputStream.close(); + throw e; + } + } else { + charset = OperatingSystem.NATIVE_CHARSET; } - } else { - charset = OperatingSystem.NATIVE_CHARSET; } - } - try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, charset))) { - if (usePowerShell) { - if (isWindows) { - writer.write("$Env:APPDATA="); - writer.write(CommandBuilder.pwshString(options.getGameDir().getAbsoluteFile().getParent())); - writer.newLine(); - } - for (Map.Entry entry : getEnvVars().entrySet()) { - writer.write("$Env:" + entry.getKey() + "="); - writer.write(CommandBuilder.pwshString(entry.getValue())); - writer.newLine(); - } - writer.write("Set-Location -Path "); - writer.write(CommandBuilder.pwshString(repository.getRunDirectory(version.getId()).getAbsolutePath())); - writer.newLine(); - - writer.write('&'); - for (String rawCommand : commandLine.commandLine.asList()) { - writer.write(' '); - writer.write(CommandBuilder.pwshString(rawCommand)); - } - writer.newLine(); - } else { - if (isWindows) { - writer.write("@echo off"); - writer.newLine(); - writer.write("set APPDATA=" + options.getGameDir().getAbsoluteFile().getParent()); - writer.newLine(); + try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, charset))) { + if (usePowerShell) { + if (isWindows) { + writer.write("$Env:APPDATA="); + writer.write(CommandBuilder.pwshString(options.getGameDir().getAbsoluteFile().getParent())); + writer.newLine(); + } for (Map.Entry entry : getEnvVars().entrySet()) { - writer.write("set " + entry.getKey() + "=" + CommandBuilder.toBatchStringLiteral(entry.getValue())); + writer.write("$Env:" + entry.getKey() + "="); + writer.write(CommandBuilder.pwshString(entry.getValue())); writer.newLine(); } + writer.write("Set-Location -Path "); + writer.write(CommandBuilder.pwshString(repository.getRunDirectory(version.getId()).getAbsolutePath())); writer.newLine(); - writer.write(new CommandBuilder().add("cd", "/D", repository.getRunDirectory(version.getId()).getAbsolutePath()).toString()); - } else { - writer.write("#!/usr/bin/env bash"); + + writer.write('&'); + for (String rawCommand : commandLine.commandLine.asList()) { + writer.write(' '); + writer.write(CommandBuilder.pwshString(rawCommand)); + } writer.newLine(); - for (Map.Entry entry : getEnvVars().entrySet()) { - writer.write("export " + entry.getKey() + "=" + CommandBuilder.toShellStringLiteral(entry.getValue())); + } else { + if (isWindows) { + writer.write("@echo off"); writer.newLine(); - } - if (commandLine.tempNativeFolder != null) { - writer.write(new CommandBuilder().add("ln", "-s", nativeFolder.getAbsolutePath(), commandLine.tempNativeFolder.toString()).toString()); + writer.write("set APPDATA=" + options.getGameDir().getAbsoluteFile().getParent()); + writer.newLine(); + for (Map.Entry entry : getEnvVars().entrySet()) { + writer.write("set " + entry.getKey() + "=" + CommandBuilder.toBatchStringLiteral(entry.getValue())); + writer.newLine(); + } + writer.newLine(); + writer.write(new CommandBuilder().add("cd", "/D", repository.getRunDirectory(version.getId()).getAbsolutePath()).toString()); + } else { + writer.write("#!/usr/bin/env bash"); writer.newLine(); + for (Map.Entry entry : getEnvVars().entrySet()) { + writer.write("export " + entry.getKey() + "=" + CommandBuilder.toShellStringLiteral(entry.getValue())); + writer.newLine(); + } + if (commandLine.tempNativeFolder != null) { + writer.write(new CommandBuilder().add("ln", "-s", nativeFolder.getAbsolutePath(), commandLine.tempNativeFolder.toString()).toString()); + writer.newLine(); + } + writer.write(new CommandBuilder().add("cd", repository.getRunDirectory(version.getId()).getAbsolutePath()).toString()); } - writer.write(new CommandBuilder().add("cd", repository.getRunDirectory(version.getId()).getAbsolutePath()).toString()); - } - writer.newLine(); - if (StringUtils.isNotBlank(options.getPreLaunchCommand())) { - writer.write(options.getPreLaunchCommand()); writer.newLine(); - } - writer.write(command); - writer.newLine(); - if (StringUtils.isNotBlank(options.getPostExitCommand())) { - writer.write(options.getPostExitCommand()); + if (StringUtils.isNotBlank(options.getPreLaunchCommand())) { + writer.write(options.getPreLaunchCommand()); + writer.newLine(); + } + writer.write(command); writer.newLine(); - } + if (StringUtils.isNotBlank(options.getPostExitCommand())) { + writer.write(options.getPostExitCommand()); + writer.newLine(); + } - if (isWindows) { - writer.write("pause"); - writer.newLine(); - } - if (commandLine.tempNativeFolder != null) { - writer.write(new CommandBuilder().add("rm", commandLine.tempNativeFolder.toString()).toString()); - writer.newLine(); + if (isWindows) { + writer.write("pause"); + writer.newLine(); + } + if (commandLine.tempNativeFolder != null) { + writer.write(new CommandBuilder().add("rm", commandLine.tempNativeFolder.toString()).toString()); + writer.newLine(); + } } } } From d584c101d404997fc2abf90bc723bd3656118b3b Mon Sep 17 00:00:00 2001 From: Glavo Date: Wed, 20 Dec 2023 20:10:06 +0800 Subject: [PATCH 10/10] Filter package-info.class (#2606) --- HMCL/build.gradle.kts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/HMCL/build.gradle.kts b/HMCL/build.gradle.kts index b503d35276..517058cdad 100644 --- a/HMCL/build.gradle.kts +++ b/HMCL/build.gradle.kts @@ -107,6 +107,8 @@ val jarPath = tasks.jar.get().archiveFile.get().asFile tasks.getByName("shadowJar") { archiveClassifier.set(null as String?) + exclude("**/package-info.class") + minimize { exclude(dependency("com.google.code.gson:.*:.*")) exclude(dependency("com.github.steveice10:.*:.*"))