hmcl: 3.9.2 -> 3.10.2 (#486845)

This commit is contained in:
Sizhe Zhao
2026-02-09 05:52:30 +00:00
committed by GitHub
5 changed files with 74 additions and 65 deletions
@@ -0,0 +1,52 @@
From ff7e9316ae220c002cc6d3cced0ae0786bcd0392 Mon Sep 17 00:00:00 2001
From: Moraxyc <i@qaq.li>
Date: Wed, 4 Feb 2026 15:36:17 +0800
Subject: [PATCH 1/2] nix: use terracotta from nix
---
.../hmcl/terracotta/TerracottaBundle.java | 21 +++----------------
1 file changed, 3 insertions(+), 18 deletions(-)
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaBundle.java b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaBundle.java
index 727edde9b..5b6e8b02f 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaBundle.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaBundle.java
@@ -139,26 +139,11 @@ public final class TerracottaBundle {
}
public Path locate(String file) {
- FileDownloadTask.IntegrityCheck check = files.get(file);
- if (check == null) {
- throw new AssertionError(String.format("Expecting %s file in terracotta bundle.", file));
- }
- return root.resolve(file).toAbsolutePath();
+ return Path.of("@TERRACOTTA_BIN@");
}
public AbstractTerracottaProvider.Status status() throws IOException {
- if (Files.exists(root) && isLocalBundleValid()) {
- return AbstractTerracottaProvider.Status.READY;
- }
-
- try {
- if (TerracottaMetadata.hasLegacyVersionFiles()) {
- return AbstractTerracottaProvider.Status.LEGACY_VERSION;
- }
- } catch (IOException e) {
- Logger.LOG.warning("Cannot determine whether legacy versions exist.", e);
- }
- return AbstractTerracottaProvider.Status.NOT_EXIST;
+ return AbstractTerracottaProvider.Status.READY;
}
private boolean isLocalBundleValid() throws IOException { // FIXME: Make control flow clearer.
@@ -188,4 +173,4 @@ public final class TerracottaBundle {
}
return true;
}
-}
+}
\ No newline at end of file
--
2.52.0
@@ -1,27 +1,27 @@
From bcf95a23380424f2ca82649d93e9e0bdf8274b74 Mon Sep 17 00:00:00 2001
From 110289f39d01713de5f8cd1e7146a36de8c35308 Mon Sep 17 00:00:00 2001
From: Moraxyc <i@qaq.li>
Date: Fri, 31 Oct 2025 14:23:54 +0800
Subject: [PATCH 3/3] nix: skip terracotta existence check on darwin
Date: Wed, 4 Feb 2026 15:40:50 +0800
Subject: [PATCH 2/2] nix: skip terracotta existence check on darwin
---
.../org/jackhuang/hmcl/terracotta/provider/MacOSProvider.java | 4 ----
1 file changed, 4 deletions(-)
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/provider/MacOSProvider.java b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/provider/MacOSProvider.java
index 00626f8b6..59125962d 100644
index 83debfc0a..fd4f851a7 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/provider/MacOSProvider.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/provider/MacOSProvider.java
@@ -45,10 +45,6 @@ public final class MacOSProvider implements ITerracottaProvider {
public Status status() throws IOException {
assert binary != null;
@@ -44,10 +44,6 @@ public final class MacOSProvider extends AbstractTerracottaProvider {
@Override
public Status status() throws IOException {
- if (!Files.exists(Path.of("/Applications/terracotta.app"))) {
- return Status.NOT_EXIST;
- }
-
return binary.status();
return bundle.status();
}
--
2.51.0
2.52.0
@@ -1,43 +0,0 @@
From 541d055bf55703aa9e2c5a5e04a397f1d25efe28 Mon Sep 17 00:00:00 2001
From: Moraxyc <i@qaq.li>
Date: Wed, 29 Oct 2025 00:09:56 +0800
Subject: [PATCH 2/3] nix: use terracotta from nix
---
.../org/jackhuang/hmcl/terracotta/TerracottaNative.java | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaNative.java b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaNative.java
index 079537978..68954b09e 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaNative.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaNative.java
@@ -47,7 +47,7 @@ public final class TerracottaNative {
public TerracottaNative(List<URI> links, Path path, FileDownloadTask.IntegrityCheck checking) {
this.links = links;
- this.path = path;
+ this.path = Path.of("@TERRACOTTA_BIN@");
this.checking = checking;
}
@@ -130,9 +130,7 @@ public final class TerracottaNative {
public ITerracottaProvider.Status status() throws IOException {
if (Files.exists(path)) {
- if (DigestUtils.digestToString(checking.getAlgorithm(), path).equalsIgnoreCase(checking.getChecksum())) {
- return ITerracottaProvider.Status.READY;
- }
+ return ITerracottaProvider.Status.READY;
}
try {
@@ -144,4 +142,4 @@ public final class TerracottaNative {
}
return ITerracottaProvider.Status.NOT_EXIST;
}
-}
+}
\ No newline at end of file
--
2.51.0
+12 -12
View File
@@ -45,13 +45,13 @@
}:
stdenv.mkDerivation (finalAttrs: {
pname = "hmcl";
version = "3.9.2";
version = "3.10.2";
src = fetchurl {
# HMCL has built-in keys, such as the Microsoft OAuth secret and the CurseForge API key.
# See https://github.com/HMCL-dev/HMCL/blob/refs/tags/release-3.6.12/.github/workflows/gradle.yml#L26-L28
url = "https://github.com/HMCL-dev/HMCL/releases/download/v${finalAttrs.version}/HMCL-${finalAttrs.version}.jar";
hash = "sha256-/thuAsPadixV2vkez3w9yhkDdpJra54WkhFYaeKH0GU=";
hash = "sha256-tmQN0kSjm8oU36ENHhgA649IohdG4ZDHyEaMPscd3nQ=";
};
# - HMCL prompts users to download prebuilt Terracotta binary for
@@ -63,38 +63,38 @@ stdenv.mkDerivation (finalAttrs: {
# Terracotta downloads, package them into a patch jar that overrides
# the original classes, and have it load the original jar. This preserves
# the original jars integrity check and avoids modifying the upstream jar.
terracottaNativeJava = fetchurl {
name = "hmcl-terracotta-native-java-${finalAttrs.version}";
url = "https://raw.githubusercontent.com/HMCL-dev/HMCL/v${finalAttrs.version}/${finalAttrs.terracottaNativeJavaPath}";
hash = "sha256-sg8gBOMNdITmHeYByYriYp05ja1vtWPF/wuqdGmkgiA=";
terracottaBundleJava = fetchurl {
name = "hmcl-terracotta-bundle-java-${finalAttrs.version}";
url = "https://raw.githubusercontent.com/HMCL-dev/HMCL/v${finalAttrs.version}/${finalAttrs.terracottaBundleJavaPath}";
hash = "sha256-QXjo/NiYQyJfan15hnvJlBir9s9R6H+jHsr+K9M1oTw=";
};
macOSProviderJava = fetchurl {
name = "hmcl-macos-provider-java-${finalAttrs.version}";
url = "https://raw.githubusercontent.com/HMCL-dev/HMCL/v${finalAttrs.version}/${finalAttrs.macOSProviderJavaPath}";
hash = "sha256-V8FNPPkq6/P3/HKcqKkAy6Ya1kUI3oEMfjEc8XdExgo=";
hash = "sha256-+Zji2B8ksT7P+IObyrM9q7vHPJVl5ZtH+v/J8Mfr0Q4=";
};
terracottaNativeJavaPath = "HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaNative.java";
terracottaBundleJavaPath = "HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaBundle.java";
macOSProviderJavaPath = "HMCL/src/main/java/org/jackhuang/hmcl/terracotta/provider/MacOSProvider.java";
dontUnpack = true;
prePatch = ''
install -Dm644 $terracottaNativeJava $terracottaNativeJavaPath
install -Dm644 $terracottaBundleJava $terracottaBundleJavaPath
install -Dm644 $macOSProviderJava $macOSProviderJavaPath
'';
patches = [
(replaceVars ./0002-nix-use-terracotta-from-nix.patch {
(replaceVars ./0001-nix-use-terracotta-from-nix.patch {
TERRACOTTA_BIN = lib.getExe terracotta;
})
./0003-nix-skip-terracotta-existence-check-on-darwin.patch
./0002-nix-skip-terracotta-existence-check-on-darwin.patch
];
buildPhase = ''
runHook preBuild
# Build only classes we modified
javac -cp $src -d out $terracottaNativeJavaPath $macOSProviderJavaPath
javac -cp $src -d out $terracottaBundleJavaPath $macOSProviderJavaPath
# Extract MANIFEST.MF from original jar
# We need Main-Class, Add-Opens, etc
+1 -1
View File
@@ -35,7 +35,7 @@ writeShellApplication {
fi
nix-update hmcl --version="$version"
update-source-version hmcl --source-key=terracottaNativeJava --ignore-same-version
update-source-version hmcl --source-key=terracottaBundleJava --ignore-same-version
update-source-version hmcl --source-key=macOSProviderJava --ignore-same-version
'';
}