From d38c993a0f843223da583e1b8c792a64085e1d65 Mon Sep 17 00:00:00 2001 From: Chip Wolf Date: Sun, 12 Jul 2026 22:38:27 +0100 Subject: [PATCH 1/6] fix(mc-versions): correct 26.2 build directory to 26_2 PR #138 added the 26.2 module as a directory named `26.2` (with a dot), but the repo naming convention uses underscores and `ci-data.json` references `"dir": "26_2"`. The build matrix therefore pointed at a non-existent `26_2` directory, so the 26.2 jars were never built or attached to a release. Consumers hit: Asset with name mc-runtime-test-26.2-*-neoforge-release.jar not found! Rename the directory to `26_2` so the build matrix resolves, the 26.2 artifacts are produced, and the next release-please release publishes them. Also extend the README supported-versions range to 26.2. Fixes #137 --- {26.2 => 26_2}/.gitignore | 0 {26.2 => 26_2}/build.gradle | 0 {26.2 => 26_2}/gradle.properties | 0 {26.2 => 26_2}/gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 0 {26.2 => 26_2}/gradlew | 0 {26.2 => 26_2}/gradlew.bat | 0 {26.2 => 26_2}/settings.gradle | 0 {26.2 => 26_2}/src/fabric/resources/fabric.mod.json | 0 .../me/earth/mc_runtime_test/forge/ForgeMod.java | 0 .../src/lexforge/resources/META-INF/mods.toml | 0 {26.2 => 26_2}/src/lexforge/resources/pack.mcmeta | 0 .../me/earth/mc_runtime_test/McGameTestRunner.java | 0 .../mc_runtime_test/mixin/ICreateWorldScreen.java | 0 .../me/earth/mc_runtime_test/mixin/MixinGui.java | 0 .../earth/mc_runtime_test/mixin/MixinMinecraft.java | 0 .../src/main/resources/mc_runtime_test.mixins.json | 0 .../earth/mc_runtime_test/neoforge/NeoForgeMod.java | 0 .../neoforge/resources/META-INF/neoforge.mods.toml | 0 {26.2 => 26_2}/src/neoforge/resources/pack.mcmeta | 0 README.md | 2 +- 21 files changed, 1 insertion(+), 1 deletion(-) rename {26.2 => 26_2}/.gitignore (100%) rename {26.2 => 26_2}/build.gradle (100%) rename {26.2 => 26_2}/gradle.properties (100%) rename {26.2 => 26_2}/gradle/wrapper/gradle-wrapper.jar (100%) rename {26.2 => 26_2}/gradle/wrapper/gradle-wrapper.properties (100%) rename {26.2 => 26_2}/gradlew (100%) rename {26.2 => 26_2}/gradlew.bat (100%) rename {26.2 => 26_2}/settings.gradle (100%) rename {26.2 => 26_2}/src/fabric/resources/fabric.mod.json (100%) rename {26.2 => 26_2}/src/lexforge/java/me/earth/mc_runtime_test/forge/ForgeMod.java (100%) rename {26.2 => 26_2}/src/lexforge/resources/META-INF/mods.toml (100%) rename {26.2 => 26_2}/src/lexforge/resources/pack.mcmeta (100%) rename {26.2 => 26_2}/src/main/java/me/earth/mc_runtime_test/McGameTestRunner.java (100%) rename {26.2 => 26_2}/src/main/java/me/earth/mc_runtime_test/mixin/ICreateWorldScreen.java (100%) rename {26.2 => 26_2}/src/main/java/me/earth/mc_runtime_test/mixin/MixinGui.java (100%) rename {26.2 => 26_2}/src/main/java/me/earth/mc_runtime_test/mixin/MixinMinecraft.java (100%) rename {26.2 => 26_2}/src/main/resources/mc_runtime_test.mixins.json (100%) rename {26.2 => 26_2}/src/neoforge/java/me/earth/mc_runtime_test/neoforge/NeoForgeMod.java (100%) rename {26.2 => 26_2}/src/neoforge/resources/META-INF/neoforge.mods.toml (100%) rename {26.2 => 26_2}/src/neoforge/resources/pack.mcmeta (100%) diff --git a/26.2/.gitignore b/26_2/.gitignore similarity index 100% rename from 26.2/.gitignore rename to 26_2/.gitignore diff --git a/26.2/build.gradle b/26_2/build.gradle similarity index 100% rename from 26.2/build.gradle rename to 26_2/build.gradle diff --git a/26.2/gradle.properties b/26_2/gradle.properties similarity index 100% rename from 26.2/gradle.properties rename to 26_2/gradle.properties diff --git a/26.2/gradle/wrapper/gradle-wrapper.jar b/26_2/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from 26.2/gradle/wrapper/gradle-wrapper.jar rename to 26_2/gradle/wrapper/gradle-wrapper.jar diff --git a/26.2/gradle/wrapper/gradle-wrapper.properties b/26_2/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from 26.2/gradle/wrapper/gradle-wrapper.properties rename to 26_2/gradle/wrapper/gradle-wrapper.properties diff --git a/26.2/gradlew b/26_2/gradlew similarity index 100% rename from 26.2/gradlew rename to 26_2/gradlew diff --git a/26.2/gradlew.bat b/26_2/gradlew.bat similarity index 100% rename from 26.2/gradlew.bat rename to 26_2/gradlew.bat diff --git a/26.2/settings.gradle b/26_2/settings.gradle similarity index 100% rename from 26.2/settings.gradle rename to 26_2/settings.gradle diff --git a/26.2/src/fabric/resources/fabric.mod.json b/26_2/src/fabric/resources/fabric.mod.json similarity index 100% rename from 26.2/src/fabric/resources/fabric.mod.json rename to 26_2/src/fabric/resources/fabric.mod.json diff --git a/26.2/src/lexforge/java/me/earth/mc_runtime_test/forge/ForgeMod.java b/26_2/src/lexforge/java/me/earth/mc_runtime_test/forge/ForgeMod.java similarity index 100% rename from 26.2/src/lexforge/java/me/earth/mc_runtime_test/forge/ForgeMod.java rename to 26_2/src/lexforge/java/me/earth/mc_runtime_test/forge/ForgeMod.java diff --git a/26.2/src/lexforge/resources/META-INF/mods.toml b/26_2/src/lexforge/resources/META-INF/mods.toml similarity index 100% rename from 26.2/src/lexforge/resources/META-INF/mods.toml rename to 26_2/src/lexforge/resources/META-INF/mods.toml diff --git a/26.2/src/lexforge/resources/pack.mcmeta b/26_2/src/lexforge/resources/pack.mcmeta similarity index 100% rename from 26.2/src/lexforge/resources/pack.mcmeta rename to 26_2/src/lexforge/resources/pack.mcmeta diff --git a/26.2/src/main/java/me/earth/mc_runtime_test/McGameTestRunner.java b/26_2/src/main/java/me/earth/mc_runtime_test/McGameTestRunner.java similarity index 100% rename from 26.2/src/main/java/me/earth/mc_runtime_test/McGameTestRunner.java rename to 26_2/src/main/java/me/earth/mc_runtime_test/McGameTestRunner.java diff --git a/26.2/src/main/java/me/earth/mc_runtime_test/mixin/ICreateWorldScreen.java b/26_2/src/main/java/me/earth/mc_runtime_test/mixin/ICreateWorldScreen.java similarity index 100% rename from 26.2/src/main/java/me/earth/mc_runtime_test/mixin/ICreateWorldScreen.java rename to 26_2/src/main/java/me/earth/mc_runtime_test/mixin/ICreateWorldScreen.java diff --git a/26.2/src/main/java/me/earth/mc_runtime_test/mixin/MixinGui.java b/26_2/src/main/java/me/earth/mc_runtime_test/mixin/MixinGui.java similarity index 100% rename from 26.2/src/main/java/me/earth/mc_runtime_test/mixin/MixinGui.java rename to 26_2/src/main/java/me/earth/mc_runtime_test/mixin/MixinGui.java diff --git a/26.2/src/main/java/me/earth/mc_runtime_test/mixin/MixinMinecraft.java b/26_2/src/main/java/me/earth/mc_runtime_test/mixin/MixinMinecraft.java similarity index 100% rename from 26.2/src/main/java/me/earth/mc_runtime_test/mixin/MixinMinecraft.java rename to 26_2/src/main/java/me/earth/mc_runtime_test/mixin/MixinMinecraft.java diff --git a/26.2/src/main/resources/mc_runtime_test.mixins.json b/26_2/src/main/resources/mc_runtime_test.mixins.json similarity index 100% rename from 26.2/src/main/resources/mc_runtime_test.mixins.json rename to 26_2/src/main/resources/mc_runtime_test.mixins.json diff --git a/26.2/src/neoforge/java/me/earth/mc_runtime_test/neoforge/NeoForgeMod.java b/26_2/src/neoforge/java/me/earth/mc_runtime_test/neoforge/NeoForgeMod.java similarity index 100% rename from 26.2/src/neoforge/java/me/earth/mc_runtime_test/neoforge/NeoForgeMod.java rename to 26_2/src/neoforge/java/me/earth/mc_runtime_test/neoforge/NeoForgeMod.java diff --git a/26.2/src/neoforge/resources/META-INF/neoforge.mods.toml b/26_2/src/neoforge/resources/META-INF/neoforge.mods.toml similarity index 100% rename from 26.2/src/neoforge/resources/META-INF/neoforge.mods.toml rename to 26_2/src/neoforge/resources/META-INF/neoforge.mods.toml diff --git a/26.2/src/neoforge/resources/pack.mcmeta b/26_2/src/neoforge/resources/pack.mcmeta similarity index 100% rename from 26.2/src/neoforge/resources/pack.mcmeta rename to 26_2/src/neoforge/resources/pack.mcmeta diff --git a/README.md b/README.md index 0afa3f6..e7c9b57 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ This project helps streamline that process by automating the client launch and b ### Supported Minecraft Versions and Modloaders | Version | Forge | Fabric | NeoForge | |-----------------|----------------|----------------|----------------| -| 26.1 - 26.1.2 | ✔️ | ✔️ | ✔️ | +| 26.1 - 26.2 | ✔️ | ✔️ | ✔️ | | 1.21 - 1.21.11 | ✔️ | ✔️ | ✔️ | | 1.20.2 - 1.20.6 | ✔️ | ✔️ | ✔️ | | 1.20.1 | ✔️ | ✔️ | ⚠️ | From 1508be07f258545a7f2ef700b24f0ad5ae916c1b Mon Sep 17 00:00:00 2001 From: Chip Wolf Date: Sun, 12 Jul 2026 23:04:29 +0100 Subject: [PATCH 2/6] fix(mc-versions): make 26_2/gradlew executable The 26.2 module's gradlew was committed by #138 with mode 100644 instead of 100755, so the CI build failed with: ./gradlew: Permission denied (exit code 126) Every other version's gradlew is 100755. Set the executable bit to match. --- 26_2/gradlew | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 26_2/gradlew diff --git a/26_2/gradlew b/26_2/gradlew old mode 100644 new mode 100755 From b33baf7a293a55c393a0856f6f48eac812d29d3a Mon Sep 17 00:00:00 2001 From: okfk <65917827+okafke@users.noreply.github.com> Date: Mon, 13 Jul 2026 22:12:26 +0200 Subject: [PATCH 3/6] feat(launcher): Update to HeadlessMc 2.10.0 --- .github/workflows/test-local-action.yml | 2 +- README.md | 2 +- action.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test-local-action.yml b/.github/workflows/test-local-action.yml index a889bed..5076e67 100644 --- a/.github/workflows/test-local-action.yml +++ b/.github/workflows/test-local-action.yml @@ -33,7 +33,7 @@ name: Test local action default: "1.3.5+85d85a934f" hmc-version: description: HeadlessMC version - default: "2.9.0" + default: "2.10.0" env: java_version: ${{ github.event.inputs.java }} diff --git a/README.md b/README.md index e7c9b57..9cfe13d 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,7 @@ The following table summarizes the available inputs for customization: | `fabric-api` | Fabric API version to download or none | | `0.97.0`, `none` | | `fabric-gametest-api` | Fabric GameTest API version or none | | `1.3.5+85d85a934f`, `none` | | `download-hmc` | Download HeadlessMC | | `true`, `false` | -| `hmc-version` | HeadlessMC version | | `2.9.0`, `1.5.0` | +| `hmc-version` | HeadlessMC version | | `2.10.0`, `1.5.0` | | `cache-mc` | Cache `.minecraft`
(`true` defaults to `blacksmith`) | | `github`, `blacksmith`, `true`, `false` | --- diff --git a/action.yml b/action.yml index 1e87f6f..cad4130 100644 --- a/action.yml +++ b/action.yml @@ -41,7 +41,7 @@ inputs: default: "true" hmc-version: description: HeadlessMC version - default: "2.9.0" + default: "2.10.0" cache-mc: description: Cache .minecraft (blacksmith, github, true (defaults to blacksmith), false) default: "github" From 34e2279fce9deba206f8091ba910d7088c78831b Mon Sep 17 00:00:00 2001 From: Chip Wolf Date: Mon, 13 Jul 2026 21:32:14 +0100 Subject: [PATCH 4/6] fix(action): include hmc-version in .minecraft cache key The cache key was --hmc, independent of the HeadlessMC version. A partial .minecraft cached by an older HeadlessMC (e.g. one that crashed mid modloader-install) kept being restored after upgrading, and because the install guard only checks for the vanilla .json it skipped reinstalling, so launch failed with 'Couldn't find object for regex ...'. Salt the key with hmc-version so upgrading HeadlessMC busts stale caches and repopulates .minecraft cleanly. --- action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/action.yml b/action.yml index cad4130..d8522ce 100644 --- a/action.yml +++ b/action.yml @@ -96,14 +96,14 @@ runs: uses: useblacksmith/cache@c5fe29eb0efdf1cf4186b9f7fcbbcbc0cf025662 # v5 with: path: /home/runner/.minecraft - key: ${{ inputs.mc }}-${{ inputs.modloader }}-hmc + key: ${{ inputs.mc }}-${{ inputs.modloader }}-hmc-${{ inputs.hmc-version }} - if: inputs.cache-mc == 'github' name: Cache Minecraft uses: actions/cache@v4 with: path: /home/runner/.minecraft - key: ${{ inputs.mc }}-${{ inputs.modloader }}-hmc + key: ${{ inputs.mc }}-${{ inputs.modloader }}-hmc-${{ inputs.hmc-version }} - name: Download ${{ inputs.modloader }}-${{ inputs.mc }} run: | From 27e67af27b4b28afdcf23e2a6980a007dbf3f3fe Mon Sep 17 00:00:00 2001 From: Chip Wolf Date: Tue, 14 Jul 2026 09:13:20 +0100 Subject: [PATCH 5/6] fix(action): key .minecraft cache by OS instead of hmc-version The cache key had no OS component, so a .minecraft cached on one runner OS could be restored on another. Restoring an Ubuntu cache (/home/runner/.minecraft) on macOS lands it where HeadlessMC doesn't look ($HOME is /Users/runner), so the launch found no installed version: 'Couldn't find object for regex ...'. The cache is inherently OS-specific (paths, native libraries), so key it by runner.os to give each OS its own cache. Replaces the hmc-version salt from the previous commit. --- action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/action.yml b/action.yml index d8522ce..245225b 100644 --- a/action.yml +++ b/action.yml @@ -96,14 +96,14 @@ runs: uses: useblacksmith/cache@c5fe29eb0efdf1cf4186b9f7fcbbcbc0cf025662 # v5 with: path: /home/runner/.minecraft - key: ${{ inputs.mc }}-${{ inputs.modloader }}-hmc-${{ inputs.hmc-version }} + key: ${{ runner.os }}-${{ inputs.mc }}-${{ inputs.modloader }}-hmc - if: inputs.cache-mc == 'github' name: Cache Minecraft uses: actions/cache@v4 with: path: /home/runner/.minecraft - key: ${{ inputs.mc }}-${{ inputs.modloader }}-hmc-${{ inputs.hmc-version }} + key: ${{ runner.os }}-${{ inputs.mc }}-${{ inputs.modloader }}-hmc - name: Download ${{ inputs.modloader }}-${{ inputs.mc }} run: | From 29fa07eeddce5972fb1532887f304ff5da11d2f0 Mon Sep 17 00:00:00 2001 From: Chip Wolf Date: Tue, 14 Jul 2026 10:41:40 +0100 Subject: [PATCH 6/6] fix(action): cache .minecraft at a consistent $HOME path across OSes The cache path was hardcoded to /home/runner/.minecraft, which only exists on Linux. On macOS/Windows HeadlessMC installs .minecraft elsewhere ($HOME differs, Windows defaults to %APPDATA%), so nothing at /home/runner/.minecraft got cached and cross-OS restores landed in a directory HeadlessMC never reads. Pin HeadlessMC's game dir with hmc.mcdir=$HOME/.minecraft in config.properties (Linux/macOS and Windows) and cache ~/.minecraft, so the cached path and the install path line up on every runner OS. --- action.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/action.yml b/action.yml index 245225b..a519605 100644 --- a/action.yml +++ b/action.yml @@ -56,6 +56,7 @@ runs: cat <> HeadlessMC/config.properties hmc.java.versions=$JAVA_HOME/bin/java hmc.gamedir=$PWD/run + hmc.mcdir=$HOME/.minecraft hmc.offline=true hmc.rethrow.launch.exceptions=true hmc.exit.on.failed.command=true @@ -68,9 +69,11 @@ runs: New-Item -ItemType Directory -Force -Path HeadlessMC, run/mods | Out-Null $currentDir = (Get-Location).Path -replace '\\', '\\\\' $javaPath = "$env:JAVA_HOME\bin\java.exe" -replace '\\', '\\\\' + $mcDir = "$HOME\.minecraft" -replace '\\', '\\\\' $config = @( "hmc.java.versions=$javaPath", "hmc.gamedir=$currentDir\\run", + "hmc.mcdir=$mcDir", "hmc.offline=true", "hmc.rethrow.launch.exceptions=true", "hmc.exit.on.failed.command=true" @@ -95,14 +98,14 @@ runs: name: Cache Minecraft uses: useblacksmith/cache@c5fe29eb0efdf1cf4186b9f7fcbbcbc0cf025662 # v5 with: - path: /home/runner/.minecraft + path: ~/.minecraft key: ${{ runner.os }}-${{ inputs.mc }}-${{ inputs.modloader }}-hmc - if: inputs.cache-mc == 'github' name: Cache Minecraft uses: actions/cache@v4 with: - path: /home/runner/.minecraft + path: ~/.minecraft key: ${{ runner.os }}-${{ inputs.mc }}-${{ inputs.modloader }}-hmc - name: Download ${{ inputs.modloader }}-${{ inputs.mc }}