Unverified Commit 279a22c6 authored by Moraxyc's avatar Moraxyc
Browse files

hmcl: 3.9.2 -> 3.10.2

parent c27f29d5
Loading
Loading
Loading
Loading
+52 −0
Original line number Diff line number Diff line
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
+9 −9
Original line number Diff line number Diff line
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
+0 −43
Original line number Diff line number Diff line
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
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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
  '';
}