Archie is a Kotlin-first Architectury library mod for Minecraft 1.21.1. It provides shared utilities used by Kernel Panic mods across Fabric and NeoForge.
Full guides (config, GUI, networking, serialization, etc.) live at
docs.kernelpanicsoft.net/Archie and in Archie/docs/.
This repository root is a Gradle composite build (settings.gradle.kts) that just wires
together two independent Gradle builds:
Archie/: the library itself —common/,fabric/,neoforge/subprojects, plus thedocs/site sources. This is what gets published.Archie-Test/: a throwaway playground mod (common-test/fabric-test/neoforge-test) used to exercise Archie during development; it substitutes in Archie's project sources instead of a published artifact, so changes inArchie/are picked up live.
Because these are separate builds, run all Gradle commands from inside Archie/ (or
Archie-Test/), not the repo root — the root build.gradle.kts has no real tasks of its own.
Inside Archie/, the module layout is:
common/: shared APIs and core implementation (Archie, networking, config, GUI, data helpers)fabric/: Fabric entrypoints, run configs, platformactualimplementationsneoforge/: NeoForge entrypoints, run configs, platformactualimplementations
The initialization flow is:
- Loader entrypoint (
ArchieFabricorArchieNeoForge) Archie.init()incommon- Shared systems register events/network/config and optional datagen/gametest hooks
Run from inside Archie/ (cd Archie first, or pass --project-dir Archie):
./gradlew build
./gradlew fabric:runClient
./gradlew neoforge:runClient
./gradlew fabric:runDatagen
./gradlew neoforge:runDatagen
./gradlew fabric:runGametest
./gradlew neoforge:runGametest
./gradlew fabric:runGametestClient
./gradlew neoforge:runGametestClientbuild and assemble finalize with fusejars (merged Fabric+NeoForge artifact).
To run the Archie-Test playground mod, use the same commands from inside Archie-Test/ instead
(e.g. ./gradlew fabric-test:runClient).
- Add gameplay/library logic in
commonfirst, then platform-specificactualcode only when needed. - Keep
expect/actualtriplets named*.common.kt,*.fabric.kt,*.neoforge.kt. - Register packet classes and handlers before calling
register()onNetworkChannel. - Keep loader manifests tokenized (
${mod_id},${versions.*}); values come from Gradle properties/version catalog. - Use
bundleRuntimeLibrary(...)/bundleMod(...)for shipped runtime deps in loader modules.
Archie/common/src/main/kotlin/net/kernelpanicsoft/archie/Archie.ktArchie/common/src/main/kotlin/net/kernelpanicsoft/archie/networking/NetworkChannel.ktArchie/fabric/src/main/kotlin/net/kernelpanicsoft/archie/ArchieFabric.ktArchie/neoforge/src/main/kotlin/net/kernelpanicsoft/archie/ArchieNeoForge.ktgradle/libs.versions.toml