index architecture stat-reference template-mode config-schema hardware-sensors build+ci | repo↗ homepage↗

build + ci

local build

git clone https://github.com/bottledpepsi/MineTuner-HUD.git
cd MineTuner-HUD
./gradlew build

Output jar lands in build/libs/. Fabric Loom + Gradle, splitEnvironmentSourceSets() on (see architecture.html#sourcesets for what that actually buys you). withSourcesJar() is enabled, so a sources jar builds alongside the main one automatically.

toolchain

Target/release is Java 25 (options.release = 25, plus a matching JavaLanguageVersion.of(25) toolchain block). Gradle will auto-detect or auto-download a JDK 25 toolchain if the JDK that launched Gradle itself is older — controlled by org.gradle.java.installations.auto-detect / .auto-download in gradle.properties, both true. This matters if you're launching Gradle from an IDE's bundled older JDK; you don't need to manually install 25 first, but the first build with a new toolchain will download one.

gradle.properties — version pins

propertyvaluenotes
minecraft_version26.2
loader_version0.19.3Fabric Loader.
loom_version1.17-SNAPSHOTbuild plugin.
mod_version1.1.1injected into fabric.mod.json's ${version} placeholder by processResources.
fabric_api_version0.156.0+26.2
cloth_config_version26.2.155hard dependency, client-only (clientImplementation). Pinned to match minecraft_version — check linkie when bumping MC version.
modmenu_version20.0.1clientCompileOnlynot bundled, not a runtime dependency. Only used to compile MineTunerModMenuIntegration against ModMenu's API; the built jar has no hard dependency on it (see fabric.mod.json's suggests, not depends).

Repositories declared beyond Loom's automatic Minecraft/library maven setup: https://maven.shedaniel.me/ (Cloth Config) and https://maven.terraformersmc.com/ (ModMenu).

fabric.mod.json highlights

ci — .github/workflows/build.yml

Two jobs, both ubuntu-latest, both JDK 25 via actions/setup-java@v4 (distribution: microsoft):

build

triggersteps
push to main/master, PRs into either, published releases checkout → setup JDK 25 → cache ~/.gradle/{caches,wrapper} keyed on hashFiles('**/*.gradle*', '**/gradle-wrapper.properties')chmod +x gradlew./gradlew build → upload build/libs/*.jar as artifact mod-jar (if-no-files-found: error, so a silently-empty build fails the job instead of "succeeding" with nothing to show for it) → on a tag push, attach the jar to the GitHub Release via softprops/action-gh-release@v2.

dependency-submission

triggersteps
same as above checkout → setup JDK 25 → gradle/actions/dependency-submission, pinned to a specific commit SHA (af1da67850ed9a4cedd57bfd976089dd991e2582, tagged v4.0.0) rather than a floating tag, with permissions: contents: write so it can post to the repo's dependency graph.

this docs site's own deploy

/docs is plain static HTML/CSS, zero build step, zero JS dependency, served directly by GitHub Pages off the main branch's /docs folder (or via the included Pages Actions workflow, if you'd rather deploy on push instead of relying on the classic branch-based Pages source — see .github/workflows/deploy-docs.yml). Editing a page is editing the HTML file directly; there is no templating layer, no static site generator, no node_modules.