Skip to content

Building

the-real-ltcg edited this page Jul 5, 2026 · 2 revisions

Building from source

Requirements

  • JDK 25
  • Git

Steps

git clone https://github.com/the-real-ltcg/multicore-magic.git
cd multicore-magic
JAVA_HOME=<path to JDK 25> ./gradlew build

Builds both versions. Jars are written to fabric-26.2/build/libs/ and fabric-26.1/build/libs/. To build just one: ./gradlew :fabric-26.2:build or ./gradlew :fabric-26.1:build.

On Windows (PowerShell):

$env:JAVA_HOME = "C:\Program Files\Eclipse Adoptium\jdk-25.0.3.9-hotspot"
.\gradlew.bat build

Running a dev client

JAVA_HOME=<path to JDK 25> ./gradlew :fabric-26.2:runClient
# or
JAVA_HOME=<path to JDK 25> ./gradlew :fabric-26.1:runClient

This launches an unauthenticated dev-environment client with the mod (and Fabric API / Mod Menu / Cloth Config) already loaded, useful for quick manual testing without building a jar each time.

Project layout

Two buildable Gradle modules, fabric-26.2 and fabric-26.1, share almost all of their source from a common fabric/ folder (this is not a Gradle subproject, just a shared source directory each module points its sourceSets at):

fabric/src/main/java/com/ltcg/multicoremagic/
  MulticoreMagic.java            client entrypoint + commands
  MulticoreMagicConfig.java       JSON config (Gson)
  ChunkBuilderThreadPool.java     the dedicated, resizable thread pool
  MulticoreMagicModMenu.java      Mod Menu / Cloth Config screen
fabric/src/main/resources/
  fabric.mod.json
  multicoremagic.mixins.json
  META-INF/neoforge.mods.toml     NeoForge/Launchpad placeholder

fabric-26.2/
  build.gradle                    26.2-specific dependency versions
  src/main/java/.../mixin/LevelRendererMixin.java   targets invalidateCompiledGeometry(...)

fabric-26.1/
  build.gradle                    26.1.2-specific dependency versions
  src/main/java/.../mixin/LevelRendererMixin.java   targets allChanged()

The one thing that isn't shared is the mixin: Mojang renamed the method this mod hooks into between versions (allChanged() on 26.1.2 → invalidateCompiledGeometry(ClientLevel, Options, Camera, BlockColors) on 26.2), verified directly against both real deobfuscated client jars with javap, not assumed. Both versions redirect the exact same Util.backgroundExecutor() call site inside that method, so the mixin body is otherwise identical — only the method = "..." target string differs. Since both per-version classes share the same package and class name (com.ltcg.multicoremagic.mixin.LevelRendererMixin), the shared multicoremagic.mixins.json doesn't need to know which version it's running on.

Built with non-remapping Fabric Loom (fabric-loom 1.15-SNAPSHOT) — both Minecraft versions ship with official Mojang mappings directly, so mod code and mixins are written against real Mojang class and method names, not Yarn intermediary names.

Clone this wiki locally