summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorAviana Cruz2023-02-08 22:06:40 +0800
committerAviana Cruz2023-02-08 22:06:40 +0800
commit62defc44b6baffd955755d9f4765b437ea01bcab (patch)
treea2b8f6e712f80b93e90e97d1490f5c0bda390813
parent632c40d2bf695e14ceae13a9246429b0927339c9 (diff)
downloadaur-62defc44b6baffd955755d9f4765b437ea01bcab.tar.gz
update 3.5.3.229
-rw-r--r--.SRCINFO12
-rw-r--r--.gitignore4
-rw-r--r--0001-Target-java-17.patch8
-rw-r--r--0002-Cleanup.patch765
-rw-r--r--0003-Disable-Pack200.patch42
-rw-r--r--PKGBUILD10
6 files changed, 293 insertions, 548 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 6d4c3390907b..8a9e99141ae1 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,6 +1,6 @@
pkgbase = hmcl-new
pkgdesc = An unofficial build of HMCL that trying to compile and run HMCL with the latest LTS version of java. (with HMCL-Clean changes)
- pkgver = 3.5.3.228
+ pkgver = 3.5.3.229
pkgrel = 1
url = https://github.com/huanghongxun/HMCL
arch = any
@@ -13,16 +13,14 @@ pkgbase = hmcl-new
source = hmcl.desktop
source = hmcl-launch-script
source = craft_table.png
- source = hmcl-new-3.5.3.228.tar.gz::https://github.com/huanghongxun/HMCL/archive/refs/tags/v3.5.3.228.tar.gz
+ source = hmcl-new-3.5.3.229.tar.gz::https://github.com/huanghongxun/HMCL/archive/refs/tags/v3.5.3.229.tar.gz
source = 0001-Target-java-17.patch
source = 0002-Cleanup.patch
- source = 0003-Disable-Pack200.patch
sha256sums = b4e8aa0f349bb3f5dd15a31c5a13ac3e10e5a5bcd2f97cf390041924275e43ef
sha256sums = 858b5082bc58ddc44fe74625937876e78442fdf5ff948d1e91cddbf170af9eeb
sha256sums = 2989a1b5301b8c7b9afdae5696c6a4e5246afa2d4f1f3d3dad5c192f036a9b4c
- sha256sums = 4e7511e23bdf6c6742444924c650e38ef458f3e59e68406d379225bb5c551e4d
- sha256sums = 8f3bc4a0ebb04734cf254233736326429ddcb5b2dd7a04e6ab57f592f71c0331
- sha256sums = 0e100dbe2c18156749b55d57b11593cef8fe30cf4442796d762f89d0ff646c2a
- sha256sums = 2d307e19328faffb49fa83836c0cb5233623c75e1a4f52e4c6ffe7215b744ada
+ sha256sums = 3e818e881b4a5b2d54182d12ea61e68dc75b870afe4d1fc2dbf4df464a8b4669
+ sha256sums = b8e2cd7a4072e4df29237ac3662bb0deb51adf098601ab52b32e98c2ee33565f
+ sha256sums = 881332dbdb0f437ef7a030bfdafe40e573a0153e49be0a513276762bf097ae9e
pkgname = hmcl-new
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000000..39788926b167
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+/pkg
+/src
+/hmcl-new-*.pkg.tar*
+/hmcl-new-*.tar.gz
diff --git a/0001-Target-java-17.patch b/0001-Target-java-17.patch
index 8c4eb9a3bdfc..4460a6ba627d 100644
--- a/0001-Target-java-17.patch
+++ b/0001-Target-java-17.patch
@@ -1,7 +1,7 @@
-From 90c231868a64602632093eee5bc810152f3ba858 Mon Sep 17 00:00:00 2001
+From 42fd6b1db051a7b600ab917b51f7d7d023ba1b50 Mon Sep 17 00:00:00 2001
From: Aviana Cruz <gwencroft@proton.me>
Date: Sun, 6 Nov 2022 13:28:59 +0800
-Subject: [PATCH 1/3] Target java 17
+Subject: [PATCH 1/2] Target java 17
Signed-off-by: Aviana Cruz <gwencroft@proton.me>
---
@@ -9,7 +9,7 @@ Signed-off-by: Aviana Cruz <gwencroft@proton.me>
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/build.gradle.kts b/build.gradle.kts
-index 8d6a9ce2..674cf430 100644
+index dde25253..a65f91d5 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -23,8 +23,8 @@ subprojects {
@@ -24,5 +24,5 @@ index 8d6a9ce2..674cf430 100644
options.encoding = "UTF-8"
}
--
-2.38.1
+2.39.1
diff --git a/0002-Cleanup.patch b/0002-Cleanup.patch
index 2ad7b356eea7..71d96c54fc7b 100644
--- a/0002-Cleanup.patch
+++ b/0002-Cleanup.patch
@@ -1,7 +1,7 @@
-From 08b7e6cd2ccb3576a067542923c44f4f42494825 Mon Sep 17 00:00:00 2001
+From 65cd4f0bea509989fd93258bee62769cd00b5ef1 Mon Sep 17 00:00:00 2001
From: Aviana Cruz <gwencroft@proton.me>
Date: Sun, 6 Nov 2022 13:33:14 +0800
-Subject: [PATCH 2/3] Cleanup
+Subject: [PATCH] Cleanup
Co-authored-by: zhaose <weiliang1503@outlook.com>
Signed-off-by: Aviana Cruz <gwencroft@proton.me>
@@ -9,25 +9,28 @@ Signed-off-by: Aviana Cruz <gwencroft@proton.me>
.../java/org/jackhuang/hmcl/Launcher.java | 8 -
.../java/org/jackhuang/hmcl/Metadata.java | 1 -
.../jackhuang/hmcl/setting/ConfigHolder.java | 1 -
+ .../hmcl/setting/ConfigUpgrader.java | 112 --------
.../org/jackhuang/hmcl/ui/Controllers.java | 4 -
.../org/jackhuang/hmcl/ui/CrashWindow.java | 6 +-
- .../org/jackhuang/hmcl/ui/UpgradeDialog.java | 77 ---
- .../jackhuang/hmcl/ui/main/FeedbackPage.java | 470 ------------------
+ .../org/jackhuang/hmcl/ui/UpgradeDialog.java | 77 ------
+ .../hmcl/ui/account/CreateAccountPane.java | 16 --
+ .../jackhuang/hmcl/ui/main/FeedbackPage.java | 80 ------
.../hmcl/ui/main/LauncherSettingsPage.java | 22 +-
- .../org/jackhuang/hmcl/ui/main/MainPage.java | 117 +----
- .../org/jackhuang/hmcl/ui/main/RootPage.java | 17 -
- .../jackhuang/hmcl/ui/main/SettingsPage.java | 60 ---
- .../jackhuang/hmcl/ui/main/SettingsView.java | 58 ---
- .../jackhuang/hmcl/ui/main/SponsorPage.java | 174 -------
- .../hmcl/upgrade/ExecutableHeaderHelper.java | 123 -----
- .../hmcl/upgrade/HMCLDownloadTask.java | 68 ---
- .../hmcl/upgrade/IntegrityChecker.java | 134 -----
- .../jackhuang/hmcl/upgrade/RemoteVersion.java | 96 ----
- .../jackhuang/hmcl/upgrade/UpdateChannel.java | 42 --
- .../jackhuang/hmcl/upgrade/UpdateChecker.java | 125 -----
- .../jackhuang/hmcl/upgrade/UpdateHandler.java | 257 ----------
+ .../org/jackhuang/hmcl/ui/main/MainPage.java | 117 +-------
+ .../org/jackhuang/hmcl/ui/main/RootPage.java | 17 --
+ .../jackhuang/hmcl/ui/main/SettingsPage.java | 60 ----
+ .../jackhuang/hmcl/ui/main/SettingsView.java | 58 ----
+ .../jackhuang/hmcl/ui/main/SponsorPage.java | 174 ------------
+ .../hmcl/upgrade/ExecutableHeaderHelper.java | 124 ---------
+ .../hmcl/upgrade/HMCLDownloadTask.java | 68 -----
+ .../hmcl/upgrade/IntegrityChecker.java | 148 ----------
+ .../jackhuang/hmcl/upgrade/RemoteVersion.java | 96 -------
+ .../jackhuang/hmcl/upgrade/UpdateChannel.java | 42 ---
+ .../jackhuang/hmcl/upgrade/UpdateChecker.java | 125 ---------
+ .../jackhuang/hmcl/upgrade/UpdateHandler.java | 257 ------------------
.../jackhuang/hmcl/util/CrashReporter.java | 5 -
- 21 files changed, 3 insertions(+), 1862 deletions(-)
+ 23 files changed, 3 insertions(+), 1615 deletions(-)
+ delete mode 100644 HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigUpgrader.java
delete mode 100644 HMCL/src/main/java/org/jackhuang/hmcl/ui/UpgradeDialog.java
delete mode 100644 HMCL/src/main/java/org/jackhuang/hmcl/ui/main/FeedbackPage.java
delete mode 100644 HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SponsorPage.java
@@ -40,7 +43,7 @@ Signed-off-by: Aviana Cruz <gwencroft@proton.me>
delete mode 100644 HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java
-index e5aecd61..7d260abc 100644
+index 00ed301e..96f5da68 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java
@@ -29,8 +29,6 @@ import org.jackhuang.hmcl.setting.SambaException;
@@ -52,7 +55,7 @@ index e5aecd61..7d260abc 100644
import org.jackhuang.hmcl.util.CrashReporter;
import org.jackhuang.hmcl.util.Lang;
import org.jackhuang.hmcl.util.StringUtils;
-@@ -129,8 +127,6 @@ public final class Launcher extends Application {
+@@ -105,8 +103,6 @@ public final class Launcher extends Application {
Platform.setImplicitExit(false);
Controllers.initialize(primaryStage);
@@ -61,7 +64,7 @@ index e5aecd61..7d260abc 100644
primaryStage.show();
});
} catch (Throwable e) {
-@@ -145,10 +141,6 @@ public final class Launcher extends Application {
+@@ -207,10 +203,6 @@ public final class Launcher extends Application {
}
public static void main(String[] args) {
@@ -73,22 +76,22 @@ index e5aecd61..7d260abc 100644
AsyncTaskExecutor.setUncaughtExceptionHandler(new CrashReporter(false));
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Metadata.java b/HMCL/src/main/java/org/jackhuang/hmcl/Metadata.java
-index f24a2d47..7f49a55f 100644
+index 3c006446..f4bcb72f 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/Metadata.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/Metadata.java
-@@ -35,7 +35,6 @@ public final class Metadata {
+@@ -37,7 +37,6 @@ public final class Metadata {
public static final String TITLE = NAME + " " + VERSION;
public static final String FULL_TITLE = FULL_NAME + " v" + VERSION;
- public static final String UPDATE_URL = System.getProperty("hmcl.update_source.override", "https://hmcl.huangyuhui.net/api/update_link");
- public static final String CONTACT_URL = "https://github.com/huanghongxun/HMCL/issues";
+ public static final String CONTACT_URL = "https://docs.hmcl.net/help.html";
public static final String HELP_URL = "https://hmcl.huangyuhui.net/help";
public static final String CHANGELOG_URL = "https://docs.hmcl.net/changelog/";
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigHolder.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigHolder.java
-index 17342bcd..f7572c81 100644
+index e94bd2be..ae3ae9d0 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigHolder.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigHolder.java
-@@ -169,7 +169,6 @@ public final class ConfigHolder {
+@@ -168,7 +168,6 @@ public final class ConfigHolder {
LOG.info("Config is empty");
} else {
Map<?, ?> raw = new Gson().fromJson(content, Map.class);
@@ -96,11 +99,129 @@ index 17342bcd..f7572c81 100644
return deserialized;
}
} catch (JsonParseException e) {
+diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigUpgrader.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigUpgrader.java
+deleted file mode 100644
+index 9e519b09..00000000
+--- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigUpgrader.java
++++ /dev/null
+@@ -1,112 +0,0 @@
+-/*
+- * Hello Minecraft! Launcher
+- * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> 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 <https://www.gnu.org/licenses/>.
+- */
+-package org.jackhuang.hmcl.setting;
+-
+-import org.jackhuang.hmcl.util.StringUtils;
+-import java.util.HashMap;
+-import java.util.Map;
+-
+-import static org.jackhuang.hmcl.util.Lang.tryCast;
+-
+-final class ConfigUpgrader {
+- private static final int VERSION = 0;
+-
+- private ConfigUpgrader() {
+- }
+-
+- /**
+- * This method is for the compatibility with old HMCL 3.x as well as HMCL 2.x.
+- *
+- * @param deserialized deserialized config settings
+- * @param rawJson raw json structure of the config settings without modification
+- * @return true if config version is upgraded
+- */
+- static boolean upgradeConfig(Config deserialized, Map<?, ?> rawJson) {
+- boolean upgraded;
+- if (deserialized.getConfigVersion() < VERSION) {
+- deserialized.setConfigVersion(VERSION);
+- // TODO: Add upgrade code here.
+- upgraded = true;
+- } else {
+- upgraded = false;
+- }
+-
+- upgradeV2(deserialized, rawJson);
+- upgradeV3(deserialized, rawJson);
+-
+- return upgraded;
+- }
+-
+- /**
+- * Upgrade configuration of HMCL 2.x
+- *
+- * @param deserialized deserialized config settings
+- * @param rawJson raw json structure of the config settings without modification
+- */
+- private static void upgradeV2(Config deserialized, Map<?, ?> rawJson) {
+- // Convert OfflineAccounts whose stored uuid is important.
+- tryCast(rawJson.get("auth"), Map.class).ifPresent(auth -> {
+- tryCast(auth.get("offline"), Map.class).ifPresent(offline -> {
+- String selected = rawJson.containsKey("selectedAccount") ? null
+- : tryCast(offline.get("IAuthenticator_UserName"), String.class).orElse(null);
+-
+- tryCast(offline.get("uuidMap"), Map.class).ifPresent(uuidMap -> {
+- ((Map<?, ?>) uuidMap).forEach((key, value) -> {
+- Map<Object, Object> storage = new HashMap<>();
+- storage.put("type", "offline");
+- storage.put("username", key);
+- storage.put("uuid", value);
+- if (key.equals(selected)) {
+- storage.put("selected", true);
+- }
+- deserialized.getAccountStorages().add(storage);
+- });
+- });
+- });
+- });
+- }
+-
+- /**
+- * Upgrade configuration of HMCL earlier than 3.1.70
+- *
+- * @param deserialized deserialized config settings
+- * @param rawJson raw json structure of the config settings without modification
+- */
+- private static void upgradeV3(Config deserialized, Map<?, ?> rawJson) {
+- if (!rawJson.containsKey("commonDirType"))
+- deserialized.setCommonDirType(deserialized.getCommonDirectory().equals(Settings.getDefaultCommonDirectory()) ? EnumCommonDirectory.DEFAULT : EnumCommonDirectory.CUSTOM);
+- if (!rawJson.containsKey("backgroundType"))
+- deserialized.setBackgroundImageType(StringUtils.isNotBlank(deserialized.getBackgroundImage()) ? EnumBackgroundImage.CUSTOM : EnumBackgroundImage.DEFAULT);
+- if (!rawJson.containsKey("hasProxy"))
+- deserialized.setHasProxy(StringUtils.isNotBlank(deserialized.getProxyHost()));
+- if (!rawJson.containsKey("hasProxyAuth"))
+- deserialized.setHasProxyAuth(StringUtils.isNotBlank(deserialized.getProxyUser()));
+-
+- if (!rawJson.containsKey("downloadType")) {
+- tryCast(rawJson.get("downloadtype"), Number.class)
+- .map(Number::intValue)
+- .ifPresent(id -> {
+- if (id == 0) {
+- deserialized.setDownloadType("mojang");
+- } else if (id == 1) {
+- deserialized.setDownloadType("bmclapi");
+- }
+- });
+- }
+- }
+-}
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java
-index 6b13766f..af18ea1b 100644
+index 03be76c0..b74c333e 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/Controllers.java
-@@ -304,10 +304,6 @@ public final class Controllers {
+@@ -325,10 +325,6 @@ public final class Controllers {
public static void onHyperlinkAction(String href) {
if (href.startsWith("hmcl://")) {
@@ -218,12 +339,53 @@ index b43133a1..00000000
- }
- }
-}
+diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/CreateAccountPane.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/CreateAccountPane.java
+index 0b9f8a42..9dd5e457 100644
+--- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/CreateAccountPane.java
++++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/CreateAccountPane.java
+@@ -58,7 +58,6 @@ import org.jackhuang.hmcl.ui.FXUtils;
+ import org.jackhuang.hmcl.ui.SVG;
+ import org.jackhuang.hmcl.ui.WeakListenerHolder;
+ import org.jackhuang.hmcl.ui.construct.*;
+-import org.jackhuang.hmcl.upgrade.IntegrityChecker;
+ import org.jackhuang.hmcl.util.StringUtils;
+ import org.jackhuang.hmcl.util.gson.UUIDTypeAdapter;
+ import org.jackhuang.hmcl.util.javafx.BindingMapping;
+@@ -304,12 +303,6 @@ public class CreateAccountPane extends JFXDialogLayout implements DialogAware {
+ box.getChildren().setAll(profileLink, birthLink, purchaseLink, deauthorizeLink, forgotpasswordLink, createProfileLink);
+ GridPane.setColumnSpan(box, 2);
+
+- if (!IntegrityChecker.isOfficial()) {
+- HintPane unofficialHint = new HintPane(MessageDialogPane.MessageType.WARNING);
+- unofficialHint.setText(i18n("unofficial.hint"));
+- vbox.getChildren().add(unofficialHint);
+- }
+-
+ vbox.getChildren().addAll(hintPane, box);
+
+ btnAccept.setDisable(false);
+@@ -399,15 +392,6 @@ public class CreateAccountPane extends JFXDialogLayout implements DialogAware {
+
+ int rowIndex = 0;
+
+- if (!IntegrityChecker.isOfficial() && !(factory instanceof OfflineAccountFactory)) {
+- HintPane hintPane = new HintPane(MessageDialogPane.MessageType.WARNING);
+- hintPane.setSegment(i18n("unofficial.hint"));
+- GridPane.setColumnSpan(hintPane, 2);
+- add(hintPane, 0, rowIndex);
+-
+- rowIndex++;
+- }
+-
+ if (factory instanceof BoundAuthlibInjectorAccountFactory) {
+ this.server = ((BoundAuthlibInjectorAccountFactory) factory).getServer();
+
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/FeedbackPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/FeedbackPage.java
deleted file mode 100644
-index bca7f749..00000000
+index 58972ed3..00000000
--- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/FeedbackPage.java
+++ /dev/null
-@@ -1,470 +0,0 @@
+@@ -1,80 +0,0 @@
-/*
- * Hello Minecraft! Launcher
- * Copyright (C) 2021 huangyuhui <huanghongxun2008@126.com> and contributors
@@ -243,456 +405,66 @@ index bca7f749..00000000
- */
-package org.jackhuang.hmcl.ui.main;
-
--import com.google.gson.JsonParseException;
--import com.google.gson.annotations.SerializedName;
--import com.google.gson.reflect.TypeToken;
--import com.jfoenix.controls.*;
--import javafx.beans.binding.Bindings;
--import javafx.beans.property.BooleanProperty;
--import javafx.beans.property.SimpleBooleanProperty;
--import javafx.collections.FXCollections;
--import javafx.collections.ObservableList;
-import javafx.geometry.Insets;
--import javafx.geometry.Pos;
--import javafx.scene.control.Label;
--import javafx.scene.layout.*;
--import org.apache.commons.lang3.mutable.MutableObject;
--import org.jackhuang.hmcl.Metadata;
--import org.jackhuang.hmcl.game.OAuthServer;
--import org.jackhuang.hmcl.setting.Accounts;
--import org.jackhuang.hmcl.setting.HMCLAccounts;
--import org.jackhuang.hmcl.setting.Theme;
--import org.jackhuang.hmcl.task.Schedulers;
--import org.jackhuang.hmcl.task.Task;
--import org.jackhuang.hmcl.ui.Controllers;
+-import javafx.scene.control.ScrollPane;
+-import javafx.scene.image.Image;
+-import javafx.scene.layout.VBox;
-import org.jackhuang.hmcl.ui.FXUtils;
--import org.jackhuang.hmcl.ui.SVG;
--import org.jackhuang.hmcl.ui.construct.*;
--import org.jackhuang.hmcl.util.StringUtils;
--import org.jackhuang.hmcl.util.io.HttpRequest;
--import org.jackhuang.hmcl.util.io.NetworkUtils;
--import org.jackhuang.hmcl.util.io.ResponseCodeException;
--import org.jackhuang.hmcl.util.javafx.BindingMapping;
+-import org.jackhuang.hmcl.ui.construct.ComponentList;
+-import org.jackhuang.hmcl.ui.construct.IconedTwoLineListItem;
+-import org.jackhuang.hmcl.ui.construct.SpinnerPane;
-
--import java.io.IOException;
--import java.net.HttpURLConnection;
--import java.util.List;
--import java.util.Locale;
--import java.util.Map;
--
--import static org.jackhuang.hmcl.ui.FXUtils.onEscPressed;
--import static org.jackhuang.hmcl.ui.FXUtils.stringConverter;
--import static org.jackhuang.hmcl.util.Lang.mapOf;
--import static org.jackhuang.hmcl.util.Pair.pair;
-import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
-
--public class FeedbackPage extends VBox implements PageAware {
-- private final ObservableList<FeedbackResponse> feedbacks = FXCollections.observableArrayList();
-- private final SpinnerPane spinnerPane = new SpinnerPane();
+-public class FeedbackPage extends SpinnerPane {
-
- public FeedbackPage() {
-- setSpacing(10);
-- setPadding(new Insets(10));
--
-- {
-- HBox loginPane = new HBox(16);
-- loginPane.setAlignment(Pos.CENTER_LEFT);
-- loginPane.getStyleClass().add("card");
--
-- TwoLineListItem accountInfo = new TwoLineListItem();
-- HBox.setHgrow(accountInfo, Priority.ALWAYS);
-- accountInfo.titleProperty().bind(BindingMapping.of(HMCLAccounts.accountProperty())
-- .map(account -> account == null ? i18n("account.not_logged_in") : account.getNickname()));
-- accountInfo.subtitleProperty().bind(BindingMapping.of(HMCLAccounts.accountProperty())
-- .map(account -> account == null ? i18n("account.not_logged_in") : account.getEmail()));
--
-- JFXButton logButton = new JFXButton();
-- logButton.textProperty().bind(BindingMapping.of(HMCLAccounts.accountProperty())
-- .map(account -> account == null ? i18n("account.login") : i18n("account.logout")));
-- logButton.setOnAction(e -> log());
--
-- loginPane.getChildren().setAll(accountInfo, logButton);
-- getChildren().add(loginPane);
-- }
+- VBox content = new VBox();
+- content.setPadding(new Insets(10));
+- content.setSpacing(10);
+- content.setFillWidth(true);
+- ScrollPane scrollPane = new ScrollPane(content);
+- scrollPane.setFitToWidth(true);
+- FXUtils.smoothScrolling(scrollPane);
+- setContent(scrollPane);
-
+- ComponentList community = new ComponentList();
- {
-- HBox searchPane = new HBox(8);
-- searchPane.getStyleClass().add("card");
-- getChildren().add(searchPane);
--
-- JFXTextField searchField = new JFXTextField();
-- searchField.setOnAction(e -> search(searchField.getText(), "time", true));
-- HBox.setHgrow(searchField, Priority.ALWAYS);
-- searchField.setPromptText(i18n("search"));
--
-- JFXButton searchButton = new JFXButton();
-- searchButton.getStyleClass().add("toggle-icon4");
-- searchButton.setGraphic(SVG.magnify(Theme.blackFillBinding(), -1, -1));
-- searchButton.setOnAction(e -> search(searchField.getText(), "time", true));
--
-- JFXButton addButton = new JFXButton();
-- addButton.getStyleClass().add("toggle-icon4");
-- addButton.setGraphic(SVG.plus(Theme.blackFillBinding(), -1, -1));
-- addButton.setOnAction(e -> addFeedback());
--
-- searchPane.getChildren().setAll(searchField, searchButton, addButton);
+- IconedTwoLineListItem users = new IconedTwoLineListItem();
+- users.setImage(new Image("/assets/img/craft_table.png"));
+- users.setTitle(i18n("feedback.qq_group"));
+- users.setSubtitle(i18n("feedback.qq_group.statement"));
+- users.setExternalLink("https://hmcl.huangyuhui.net/api/redirect/sponsor");
+-
+- IconedTwoLineListItem github = new IconedTwoLineListItem();
+- github.setImage(new Image("/assets/img/github.png"));
+- github.setTitle(i18n("feedback.github"));
+- github.setSubtitle(i18n("feedback.github.statement"));
+- github.setExternalLink("https://github.com/huanghongxun/HMCL/issues/new/choose");
+-
+- IconedTwoLineListItem discord = new IconedTwoLineListItem();
+- discord.setImage(new Image("/assets/img/discord.png"));
+- discord.setTitle(i18n("feedback.discord"));
+- discord.setSubtitle(i18n("feedback.discord.statement"));
+- discord.setExternalLink("https://discord.gg/jVvC7HfM6U");
+-
+- IconedTwoLineListItem kookapp = new IconedTwoLineListItem();
+- kookapp.setImage(new Image("/assets/img/kookapp.png"));
+- kookapp.setTitle(i18n("feedback.kookapp"));
+- kookapp.setSubtitle(i18n("feedback.kookapp.statement"));
+- kookapp.setExternalLink("https://kook.top/Kx7n3t");
+-
+- community.getContent().setAll(users, github, discord, kookapp);
- }
-
-- {
-- spinnerPane.getStyleClass().add("card");
-- VBox.setVgrow(spinnerPane, Priority.ALWAYS);
-- JFXListView<FeedbackResponse> listView = new JFXListView<>();
-- spinnerPane.setContent(listView);
-- Bindings.bindContent(listView.getItems(), feedbacks);
-- MutableObject<Object> lastCell = new MutableObject<>();
-- listView.setCellFactory(x -> new MDListCell<FeedbackResponse>(listView, lastCell) {
-- private final TwoLineListItem content = new TwoLineListItem();
-- private final JFXButton likeButton = new JFXButton();
-- private final JFXButton unlikeButton = new JFXButton();
-- private final HBox container;
--
-- {
-- container = new HBox(8);
-- container.setPickOnBounds(false);
-- container.setAlignment(Pos.CENTER_LEFT);
-- HBox.setHgrow(content, Priority.ALWAYS);
-- content.setMouseTransparent(false);
-- setSelectable();
--
-- likeButton.getStyleClass().add("toggle-icon4");
-- likeButton.setGraphic(FXUtils.limitingSize(SVG.thumbUpOutline(Theme.blackFillBinding(), 24, 24), 24, 24));
--
-- unlikeButton.getStyleClass().add("toggle-icon4");
-- unlikeButton.setGraphic(FXUtils.limitingSize(SVG.thumbDownOutline(Theme.blackFillBinding(), 24, 24), 24, 24));
--
-- container.getChildren().setAll(content, likeButton, unlikeButton);
--
-- StackPane.setMargin(container, new Insets(10, 16, 10, 16));
-- getContainer().getChildren().setAll(container);
-- }
+- content.getChildren().addAll(
+- ComponentList.createComponentListTitle(i18n("feedback.channel")),
+- community
+- );
-
-- @Override
-- protected void updateControl(FeedbackResponse feedback, boolean empty) {
-- if (empty) return;
-- content.setTitle(feedback.getTitle());
-- content.setSubtitle(feedback.getAuthor());
-- content.getTags().setAll(
-- "#" + feedback.getId(),
-- i18n("feedback.state." + feedback.getState().name().toLowerCase(Locale.US)),
-- i18n("feedback.type." + feedback.getType().name().toLowerCase(Locale.US)));
-- content.setOnMouseClicked(e -> {
-- getFeedback(feedback.getId())
-- .thenAcceptAsync(Schedulers.javafx(), f -> {
-- Controllers.dialog(new ViewFeedbackDialog(f));
-- })
-- .start();
-- });
-- }
-- });
--
-- getChildren().add(spinnerPane);
-- }
+- this.setContent(content);
- }
-
-- @Override
-- public void onPageShown() {
-- search("", "time", false);
-- }
--
-- private void search(String keyword, String order, boolean showAll) {
-- HMCLAccounts.HMCLAccount account = HMCLAccounts.getAccount();
-- Task.supplyAsync(() -> {
-- Map<String, String> query = mapOf(
-- pair("keyword", keyword),
-- pair("order", order)
-- );
-- if (showAll) {
-- query.put("showAll", "1");
-- }
-- HttpRequest req = HttpRequest.GET(NetworkUtils.withQuery("https://hmcl.huangyuhui.net/api/feedback", query));
-- if (account != null) {
-- req.authorization("Bearer", HMCLAccounts.getAccount().getIdToken())
-- .header("Authorization-Provider", HMCLAccounts.getAccount().getProvider());
-- }
-- return req.<List<FeedbackResponse>>getJson(new TypeToken<List<FeedbackResponse>>(){}.getType());
-- }).whenComplete(Schedulers.javafx(), (result, exception) -> {
-- spinnerPane.hideSpinner();
-- if (exception != null) {
-- if (exception instanceof ResponseCodeException) {
-- int responseCode = ((ResponseCodeException) exception).getResponseCode();
-- if (responseCode == HttpURLConnection.HTTP_UNAUTHORIZED) {
-- spinnerPane.setFailedReason(i18n("feedback.failed.permission"));
-- return;
-- } else if (responseCode == 429) {
-- spinnerPane.setFailedReason(i18n("feedback.failed.too_frequently"));
-- return;
-- }
-- }
-- spinnerPane.setFailedReason(i18n("feedback.failed"));
-- } else {
-- feedbacks.setAll(result);
-- }
-- }).start();
-- }
--
-- private Task<FeedbackResponse> getFeedback(int id) {
-- return Task.supplyAsync(() -> HttpRequest.GET("https://hmcl.huangyuhui.net/api/feedback/" + id).getJson(FeedbackResponse.class));
-- }
--
-- private void log() {
-- if (HMCLAccounts.getAccount() == null) {
-- // login
-- Controllers.dialog(new LoginDialog());
-- } else {
-- // logout
-- HMCLAccounts.setAccount(null);
-- }
-- }
--
-- private void addFeedback() {
-- if (HMCLAccounts.getAccount() == null) {
-- Controllers.dialog(i18n("feedback.add.login"));
-- return;
-- }
--
-- Controllers.dialog(new AddFeedbackDialog());
-- }
--
-- private static final class LoginDialog extends JFXDialogLayout {
-- private final SpinnerPane spinnerPane = new SpinnerPane();
-- private final Label errorLabel = new Label();
-- private final BooleanProperty logging = new SimpleBooleanProperty();
--
-- public LoginDialog() {
-- setHeading(new Label(i18n("feedback.login")));
--
-- VBox vbox = new VBox(8);
-- setBody(vbox);
-- HintPane hintPane = new HintPane(MessageDialogPane.MessageType.INFO);
-- hintPane.textProperty().bind(BindingMapping.of(logging).map(logging -> i18n("account.hmcl.hint")));
-- hintPane.setOnMouseClicked(e -> {
-- if (logging.get() && OAuthServer.lastlyOpenedURL != null) {
-- FXUtils.copyText(OAuthServer.lastlyOpenedURL);
-- }
-- });
-- vbox.getChildren().setAll(hintPane);
--
-- JFXButton loginButton = new JFXButton();
-- spinnerPane.setContent(loginButton);
-- loginButton.setText(i18n("account.login"));
-- loginButton.setOnAction(e -> login());
--
-- JFXButton cancelButton = new JFXButton();
-- cancelButton.setText(i18n("button.cancel"));
-- cancelButton.setOnAction(e -> fireEvent(new DialogCloseEvent()));
-- onEscPressed(this, cancelButton::fire);
--
-- setActions(errorLabel, spinnerPane, cancelButton);
-- }
--
-- private void login() {
-- spinnerPane.showSpinner();
-- errorLabel.setText("");
-- logging.set(true);
--
-- HMCLAccounts.login().whenComplete(Schedulers.javafx(), (result, exception) -> {
-- logging.set(false);
-- if (exception != null) {
-- if (exception instanceof IOException) {
-- errorLabel.setText(i18n("account.failed.connect_authentication_server"));
-- } else if (exception instanceof JsonParseException) {
-- errorLabel.setText(i18n("account.failed.server_response_malformed"));
-- } else {
-- errorLabel.setText(Accounts.localizeErrorMessage(exception));
-- }
-- } else {
-- fireEvent(new DialogCloseEvent());
-- }
-- }).start();
-- }
-- }
--
-- private static class AddFeedbackDialog extends DialogPane {
--
-- JFXTextField titleField = new JFXTextField();
-- JFXComboBox<FeedbackType> comboBox = new JFXComboBox<>();
-- JFXTextArea contentArea = new JFXTextArea();
--
-- public AddFeedbackDialog() {
-- setTitle(i18n("feedback.add"));
--
-- GridPane body = new GridPane();
-- body.setVgap(8);
-- body.setHgap(8);
--
-- HintPane searchHintPane = new HintPane(MessageDialogPane.MessageType.WARNING);
-- GridPane.setColumnSpan(searchHintPane, 2);
-- searchHintPane.setText(i18n("feedback.add.hint.search_before_add"));
-- body.addRow(0, searchHintPane);
--
-- HintPane titleHintPane = new HintPane(MessageDialogPane.MessageType.INFO);
-- GridPane.setColumnSpan(titleHintPane, 2);
-- titleHintPane.setText(i18n("feedback.add.hint.title"));
-- body.addRow(1, titleHintPane);
--
-- titleField.setValidators(new RequiredValidator());
-- body.addRow(2, new Label(i18n("feedback.title")), titleField);
--
-- comboBox.setMaxWidth(-1);
-- comboBox.getItems().setAll(FeedbackType.values());
-- comboBox.getSelectionModel().select(0);
-- comboBox.setConverter(stringConverter(e -> i18n("feedback.type." + e.name().toLowerCase())));
-- body.addRow(3, new Label(i18n("feedback.type")), comboBox);
--
-- Label contentLabel = new Label(i18n("feedback.content"));
-- GridPane.setColumnSpan(contentLabel, 2);
-- body.addRow(4, contentLabel);
--
-- contentArea.setValidators(new RequiredValidator());
-- contentArea.setPromptText(i18n("feedback.add.hint.content"));
-- GridPane.setColumnSpan(contentArea, 2);
-- body.addRow(5, contentArea);
--
-- validProperty().bind(Bindings.createBooleanBinding(() -> {
-- return titleField.validate() && contentArea.validate();
-- }, titleField.textProperty(), contentArea.textProperty()));
--
-- setBody(body);
-- }
--
-- @Override
-- protected void onAccept() {
-- setLoading();
--
-- addFeedback(titleField.getText(), comboBox.getValue(), contentArea.getText())
-- .whenComplete(Schedulers.javafx(), exception -> {
-- if (exception != null) {
-- onFailure(exception.getLocalizedMessage());
-- } else {
-- onSuccess();
-- }
-- })
-- .start();
-- }
--
-- private Task<?> addFeedback(String title, FeedbackType feedbackType, String content) {
-- return Task.runAsync(() -> {
-- HttpRequest.POST("https://hmcl.huangyuhui.net/api/feedback")
-- .json(mapOf(
-- pair("title", title),
-- pair("content", content),
-- pair("type", feedbackType.name().toLowerCase(Locale.ROOT)),
-- pair("launcher_version", Metadata.VERSION)
-- ))
-- .authorization("Bearer", HMCLAccounts.getAccount().getIdToken())
-- .header("Authorization-Provider", HMCLAccounts.getAccount().getProvider())
-- .getString();
-- });
-- }
-- }
--
-- private static class ViewFeedbackDialog extends JFXDialogLayout {
--
-- public ViewFeedbackDialog(FeedbackResponse feedback) {
-- BorderPane heading = new BorderPane();
-- TwoLineListItem left = new TwoLineListItem();
-- heading.setLeft(left);
-- left.setTitle(feedback.getTitle());
-- left.setSubtitle(feedback.getAuthor());
-- left.getTags().add("#" + feedback.getId());
-- left.getTags().add(i18n("feedback.state." + feedback.getState().name().toLowerCase(Locale.US)));
-- left.getTags().add(feedback.getLauncherVersion());
-- left.getTags().add(i18n("feedback.type." + feedback.getType().name().toLowerCase()));
--
-- setHeading(heading);
--
-- Label content = new Label(feedback.getContent());
-- content.setWrapText(true);
--
-- TwoLineListItem response = new TwoLineListItem();
-- response.getStyleClass().setAll("two-line-item-second-large");
-- response.setTitle(i18n("feedback.response"));
-- response.setSubtitle(StringUtils.isBlank(feedback.getReason())
-- ? i18n("feedback.response.empty")
-- : feedback.getReason());
--
-- VBox body = new VBox(content, response);
-- body.setSpacing(8);
-- setBody(body);
--
-- JFXButton okButton = new JFXButton();
-- okButton.setText(i18n("button.ok"));
-- okButton.setOnAction(e -> fireEvent(new DialogCloseEvent()));
--
-- setActions(okButton);
-- }
-- }
--
-- private static class FeedbackResponse {
-- private final int id;
-- private final String title;
-- private final String content;
-- private final String author;
-- @SerializedName("launcher_version")
-- private final String launcherVersion;
-- private final FeedbackType type;
-- private final FeedbackState state;
-- private final String reason;
--
-- public FeedbackResponse(int id, String title, String content, String author, String launcherVersion, FeedbackType type, FeedbackState state, String reason) {
-- this.id = id;
-- this.title = title;
-- this.content = content;
-- this.author = author;
-- this.launcherVersion = launcherVersion;
-- this.type = type;
-- this.state = state;
-- this.reason = reason;
-- }
--
-- public int getId() {
-- return id;
-- }
--
-- public String getTitle() {
-- return title;
-- }
--
-- public String getContent() {
-- return content;
-- }
--
-- public String getAuthor() {
-- return author;
-- }
--
-- public String getLauncherVersion() {
-- return launcherVersion;
-- }
--
-- public FeedbackType getType() {
-- return type;
-- }
--
-- public FeedbackState getState() {
-- return state;
-- }
--
-- public String getReason() {
-- return reason;
-- }
-- }
--
-- private enum FeedbackType {
-- FEATURE,
-- BUG
-- }
--
-- private enum FeedbackState {
-- OPEN,
-- REJECTED,
-- ACCEPTED
-- }
-}
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/LauncherSettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/LauncherSettingsPage.java
index d6c11595..d7586282 100644
@@ -925,7 +697,7 @@ index 111fb82d..add45e23 100644
FXUtils.checkFxUserThread();
this.profile = profile;
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/RootPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/RootPage.java
-index 94c282c0..1a4885d0 100644
+index 378c16e2..b158bc33 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/RootPage.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/RootPage.java
@@ -41,7 +41,6 @@ import org.jackhuang.hmcl.ui.decorator.DecoratorPage;
@@ -936,7 +708,7 @@ index 94c282c0..1a4885d0 100644
import org.jackhuang.hmcl.util.TaskCancellationAction;
import org.jackhuang.hmcl.util.io.CompressingUtils;
import org.jackhuang.hmcl.util.versioning.VersionNumber;
-@@ -92,8 +91,6 @@ public class RootPage extends DecoratorAnimatedPage implements DecoratorPage {
+@@ -93,8 +92,6 @@ public class RootPage extends DecoratorAnimatedPage implements DecoratorPage {
});
FXUtils.onChangeAndOperate(Profiles.selectedVersionProperty(), mainPage::setCurrentGame);
@@ -945,7 +717,7 @@ index 94c282c0..1a4885d0 100644
Profiles.registerVersionsListener(profile -> {
HMCLGameRepository repository = profile.getRepository();
-@@ -150,19 +147,6 @@ public class RootPage extends DecoratorAnimatedPage implements DecoratorPage {
+@@ -151,19 +148,6 @@ public class RootPage extends DecoratorAnimatedPage implements DecoratorPage {
downloadItem.setTitle(i18n("download"));
downloadItem.setOnAction(e -> Controllers.navigate(Controllers.getDownloadPage()));
@@ -965,10 +737,10 @@ index 94c282c0..1a4885d0 100644
// sixth item in left sidebar
AdvancedListItem launcherSettingsItem = new AdvancedListItem();
launcherSettingsItem.setLeftGraphic(wrap(SVG::gearOutline));
-@@ -179,7 +163,6 @@ public class RootPage extends DecoratorAnimatedPage implements DecoratorPage {
+@@ -180,7 +164,6 @@ public class RootPage extends DecoratorAnimatedPage implements DecoratorPage {
.add(gameItem)
.add(downloadItem)
- .startCategory(i18n("settings.launcher.general").toUpperCase())
+ .startCategory(i18n("settings.launcher.general").toUpperCase(Locale.ROOT))
- .add(multiplayerItem)
.add(launcherSettingsItem);
@@ -1332,10 +1104,10 @@ index ff685971..00000000
-}
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/ExecutableHeaderHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/ExecutableHeaderHelper.java
deleted file mode 100644
-index 66a0f0ee..00000000
+index 7c47f586..00000000
--- a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/ExecutableHeaderHelper.java
+++ /dev/null
-@@ -1,123 +0,0 @@
+@@ -1,124 +0,0 @@
-/*
- * Hello Minecraft! Launcher
- * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors
@@ -1357,6 +1129,7 @@ index 66a0f0ee..00000000
-
-import java.io.IOException;
-import java.io.InputStream;
+-import java.nio.Buffer;
-import java.nio.ByteBuffer;
-import java.nio.channels.FileChannel;
-import java.nio.channels.FileChannel.MapMode;
@@ -1413,7 +1186,7 @@ index 66a0f0ee..00000000
- suffixLoop: for (String suffix : suffix2header.keySet()) {
- Optional<byte[]> header = readHeader(zip, suffix);
- if (header.isPresent()) {
-- buf.rewind();
+- ((Buffer) buf).rewind();
- for (byte b : header.get()) {
- if (!buf.hasRemaining() || b != buf.get()) {
- continue suffixLoop;
@@ -1535,10 +1308,10 @@ index 8b6fdc06..00000000
-}
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/IntegrityChecker.java b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/IntegrityChecker.java
deleted file mode 100644
-index 8c387047..00000000
+index 5faaaf8c..00000000
--- a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/IntegrityChecker.java
+++ /dev/null
-@@ -1,134 +0,0 @@
+@@ -1,148 +0,0 @@
-/*
- * Hello Minecraft! Launcher
- * Copyright (C) 2020 huangyuhui <huanghongxun2008@126.com> and contributors
@@ -1558,7 +1331,9 @@ index 8c387047..00000000
- */
-package org.jackhuang.hmcl.upgrade;
-
+-import org.jackhuang.hmcl.Metadata;
-import org.jackhuang.hmcl.util.DigestUtils;
+-import org.jackhuang.hmcl.util.Lang;
-import org.jackhuang.hmcl.util.io.IOUtils;
-import org.jackhuang.hmcl.util.io.JarUtils;
-
@@ -1606,7 +1381,7 @@ index 8c387047..00000000
- byte[] signature = null;
- Map<String, byte[]> fileFingerprints = new TreeMap<>();
- try (ZipFile zip = new ZipFile(jarPath.toFile())) {
-- for (ZipEntry entry : zip.stream().toArray(ZipEntry[]::new)) {
+- for (ZipEntry entry : Lang.toIterable(zip.entries())) {
- String filename = entry.getName();
- try (InputStream in = zip.getInputStream(entry)) {
- if (in == null) {
@@ -1647,25 +1422,37 @@ index 8c387047..00000000
- }
- }
-
-- private static Boolean selfVerified = null;
+- private static volatile Boolean selfVerified = null;
-
- /**
- * Checks whether the current application is verified.
- * This method is blocking.
- */
-- public static synchronized boolean isSelfVerified() {
+- public static boolean isSelfVerified() {
- if (selfVerified != null) {
- return selfVerified;
- }
-- try {
-- verifySelf();
-- LOG.info("Successfully verified current JAR");
-- selfVerified = true;
-- } catch (IOException e) {
-- LOG.log(Level.WARNING, "Failed to verify myself, is the JAR corrupt?", e);
-- selfVerified = false;
+-
+- synchronized (IntegrityChecker.class) {
+- if (selfVerified != null) {
+- return selfVerified;
+- }
+-
+- try {
+- verifySelf();
+- LOG.info("Successfully verified current JAR");
+- selfVerified = true;
+- } catch (IOException e) {
+- LOG.log(Level.WARNING, "Failed to verify myself, is the JAR corrupt?", e);
+- selfVerified = false;
+- }
+-
+- return selfVerified;
- }
-- return selfVerified;
+- }
+-
+- public static boolean isOfficial() {
+- return isSelfVerified() || (Metadata.GITHUB_SHA != null && Metadata.BUILD_CHANNEL.equals("nightly"));
- }
-
- private static void verifySelf() throws IOException {
@@ -2218,7 +2005,7 @@ index 4cd06ef8..00000000
- // ====
-}
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 252265be..53b93d43 100644
+index 5ec3d2e3..def97e1a 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/util/CrashReporter.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/CrashReporter.java
@@ -23,8 +23,6 @@ import javafx.scene.control.Alert.AlertType;
@@ -2230,7 +2017,7 @@ index 252265be..53b93d43 100644
import org.jackhuang.hmcl.util.io.NetworkUtils;
import java.io.IOException;
-@@ -106,9 +104,6 @@ public class CrashReporter implements Thread.UncaughtExceptionHandler {
+@@ -105,9 +103,6 @@ public class CrashReporter implements Thread.UncaughtExceptionHandler {
if (showCrashWindow) {
new CrashWindow(text).show();
}
@@ -2241,5 +2028,5 @@ index 252265be..53b93d43 100644
});
} catch (Throwable handlingException) {
--
-2.38.1
+2.39.1
diff --git a/0003-Disable-Pack200.patch b/0003-Disable-Pack200.patch
deleted file mode 100644
index b1114352920d..000000000000
--- a/0003-Disable-Pack200.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From e12830055ce45b4271b7c65686c98622dd36e3c7 Mon Sep 17 00:00:00 2001
-From: Aviana Cruz <gwencroft@proton.me>
-Date: Wed, 23 Nov 2022 09:27:28 +0800
-Subject: [PATCH 3/3] Disable Pack200
-
-Signed-off-by: Aviana Cruz <gwencroft@proton.me>
----
- HMCL/build.gradle.kts | 6 +-----
- 1 file changed, 1 insertion(+), 5 deletions(-)
-
-diff --git a/HMCL/build.gradle.kts b/HMCL/build.gradle.kts
-index ecc6d792..f62e1437 100644
---- a/HMCL/build.gradle.kts
-+++ b/HMCL/build.gradle.kts
-@@ -176,7 +176,6 @@ tasks.getByName<com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar>("sha
- }
-
- doLast {
-- repack(jarPath) // see repack()
- attachSignature(jarPath)
- createChecksum(jarPath)
- }
-@@ -223,15 +222,12 @@ tasks.processResources {
- dependsOn(rootProject.tasks["generateOpenJFXDependencies"])
- }
-
--val packFile = File(jarPath.parentFile, jarPath.nameWithoutExtension + ".pack")
-+val packFile = jarPath
-
- val makePack = tasks.create("makePack") {
- dependsOn(tasks.jar)
-
- doLast {
-- packFile.outputStream().use { out ->
-- JarFile(jarPath).use { jarFile -> packer.pack(jarFile, out) }
-- }
- createChecksum(packFile)
- }
- }
---
-2.38.1
-
diff --git a/PKGBUILD b/PKGBUILD
index f1f20dc6d396..65069edf69b1 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -6,7 +6,7 @@
pkgname=hmcl-new
_pkgname=HMCL
_ver=3.5.3
-_build=228
+_build=229
pkgver=$_ver.$_build
pkgrel=1
pkgdesc='An unofficial build of HMCL that trying to compile and run HMCL with the latest LTS version of java. (with HMCL-Clean changes)'
@@ -23,15 +23,13 @@ source=('hmcl.desktop'
"${pkgname}-${pkgver}.tar.gz::${url}/archive/refs/tags/v${pkgver}.tar.gz"
"0001-Target-java-17.patch"
"0002-Cleanup.patch"
- "0003-Disable-Pack200.patch"
)
sha256sums=('b4e8aa0f349bb3f5dd15a31c5a13ac3e10e5a5bcd2f97cf390041924275e43ef'
'858b5082bc58ddc44fe74625937876e78442fdf5ff948d1e91cddbf170af9eeb'
'2989a1b5301b8c7b9afdae5696c6a4e5246afa2d4f1f3d3dad5c192f036a9b4c'
- '4e7511e23bdf6c6742444924c650e38ef458f3e59e68406d379225bb5c551e4d'
- '8f3bc4a0ebb04734cf254233736326429ddcb5b2dd7a04e6ab57f592f71c0331'
- '0e100dbe2c18156749b55d57b11593cef8fe30cf4442796d762f89d0ff646c2a'
- '2d307e19328faffb49fa83836c0cb5233623c75e1a4f52e4c6ffe7215b744ada')
+ '3e818e881b4a5b2d54182d12ea61e68dc75b870afe4d1fc2dbf4df464a8b4669'
+ 'b8e2cd7a4072e4df29237ac3662bb0deb51adf098601ab52b32e98c2ee33565f'
+ '881332dbdb0f437ef7a030bfdafe40e573a0153e49be0a513276762bf097ae9e')
prepare() {
cd "$_pkgname-$pkgver"