From 279a22c6d1296c33b5b38657e3c53359edae9074 Mon Sep 17 00:00:00 2001 From: Moraxyc Date: Wed, 4 Feb 2026 15:45:41 +0800 Subject: [PATCH] hmcl: 3.9.2 -> 3.10.2 --- .../0001-nix-use-terracotta-from-nix.patch | 52 +++++++++++++++++++ ...erracotta-existence-check-on-darwin.patch} | 18 +++---- .../0002-nix-use-terracotta-from-nix.patch | 43 --------------- pkgs/by-name/hm/hmcl/package.nix | 24 ++++----- pkgs/by-name/hm/hmcl/update.nix | 2 +- 5 files changed, 74 insertions(+), 65 deletions(-) create mode 100644 pkgs/by-name/hm/hmcl/0001-nix-use-terracotta-from-nix.patch rename pkgs/by-name/hm/hmcl/{0003-nix-skip-terracotta-existence-check-on-darwin.patch => 0002-nix-skip-terracotta-existence-check-on-darwin.patch} (65%) delete mode 100644 pkgs/by-name/hm/hmcl/0002-nix-use-terracotta-from-nix.patch diff --git a/pkgs/by-name/hm/hmcl/0001-nix-use-terracotta-from-nix.patch b/pkgs/by-name/hm/hmcl/0001-nix-use-terracotta-from-nix.patch new file mode 100644 index 000000000000..8bb7103962d6 --- /dev/null +++ b/pkgs/by-name/hm/hmcl/0001-nix-use-terracotta-from-nix.patch @@ -0,0 +1,52 @@ +From ff7e9316ae220c002cc6d3cced0ae0786bcd0392 Mon Sep 17 00:00:00 2001 +From: Moraxyc +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 + diff --git a/pkgs/by-name/hm/hmcl/0003-nix-skip-terracotta-existence-check-on-darwin.patch b/pkgs/by-name/hm/hmcl/0002-nix-skip-terracotta-existence-check-on-darwin.patch similarity index 65% rename from pkgs/by-name/hm/hmcl/0003-nix-skip-terracotta-existence-check-on-darwin.patch rename to pkgs/by-name/hm/hmcl/0002-nix-skip-terracotta-existence-check-on-darwin.patch index 1df97fffc3d0..4100426ede5b 100644 --- a/pkgs/by-name/hm/hmcl/0003-nix-skip-terracotta-existence-check-on-darwin.patch +++ b/pkgs/by-name/hm/hmcl/0002-nix-skip-terracotta-existence-check-on-darwin.patch @@ -1,27 +1,27 @@ -From bcf95a23380424f2ca82649d93e9e0bdf8274b74 Mon Sep 17 00:00:00 2001 +From 110289f39d01713de5f8cd1e7146a36de8c35308 Mon Sep 17 00:00:00 2001 From: Moraxyc -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 diff --git a/pkgs/by-name/hm/hmcl/0002-nix-use-terracotta-from-nix.patch b/pkgs/by-name/hm/hmcl/0002-nix-use-terracotta-from-nix.patch deleted file mode 100644 index 651759ce63f0..000000000000 --- a/pkgs/by-name/hm/hmcl/0002-nix-use-terracotta-from-nix.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 541d055bf55703aa9e2c5a5e04a397f1d25efe28 Mon Sep 17 00:00:00 2001 -From: Moraxyc -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 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 - diff --git a/pkgs/by-name/hm/hmcl/package.nix b/pkgs/by-name/hm/hmcl/package.nix index aa7a55dd59d2..1679c8df3e08 100644 --- a/pkgs/by-name/hm/hmcl/package.nix +++ b/pkgs/by-name/hm/hmcl/package.nix @@ -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 jar’s 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 diff --git a/pkgs/by-name/hm/hmcl/update.nix b/pkgs/by-name/hm/hmcl/update.nix index 1f65d2578cec..351702bae382 100644 --- a/pkgs/by-name/hm/hmcl/update.nix +++ b/pkgs/by-name/hm/hmcl/update.nix @@ -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 ''; }