You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- NeoForge: bus listeners in `ArchieNeoForge` (`neoforge/src/main/kotlin/net/kernelpanicsoft/archie/ArchieNeoForge.kt`)
13
+
- Networking is centralized via `NetworkChannel`; packets must be `@Serializable data class` and registered before `register()` (`common/src/main/kotlin/net/kernelpanicsoft/archie/networking/NetworkChannel.kt`).
14
+
-`ArchieNetworkChannel.init()` is the canonical registration order example (register packet producers/consumers, then call `register()`).
15
+
16
+
## Build and run workflows
17
+
- Build all modules + merged artifact: `./gradlew build` (root `build`/`assemble` finalize with `fusejars` in `build.gradle.kts`).
18
+
- Loader-specific dev runs: `./gradlew fabric:runClient`, `./gradlew neoforge:runClient`.
- Docs pipeline: `embedDokkaIntoMkDocs` then `publishDocs` (calls `mike deploy ...`); `mkdocs.yml` contains `# !!! EMBEDDED DOKKA ... DO NOT COMMIT !!!` markers.
22
+
23
+
## Project-specific conventions
24
+
- Keep resource/manifests tokenized using Gradle properties (`${mod_id}`, `${versions.*}`) in `fabric.mod.json` and `neoforge.mods.toml`.
25
+
- Shared assets are merged from `common` into loader modules via `processResources`; do not duplicate `assets/archie/**` directly in loader modules unless loader-specific.
26
+
-`common/build.gradle.kts` intentionally uses `modImplementation(libs.fabric.loader)` only for annotations/mixin deps; avoid importing random Fabric-only classes in common code.
27
+
- Utility operators are used pervasively for IDs (`Archie % "main"`, `"namespace" % "path"`) from `common/src/main/kotlin/net/kernelpanicsoft/archie/util/ResourceLocation.kt`.
28
+
29
+
## Dependency and integration touchpoints
30
+
- Versions and plugin IDs are centralized in `gradle/libs.versions.toml`; update there first.
31
+
- Packaging/publishing is configured at root via `modfusioner` (`fusejars`) and `modpublisher` (CurseForge/Modrinth IDs and required deps) in `build.gradle.kts`.
32
+
- Mixins are split by scope: loader mixins in `fabric/src/main/resources/archie.mixins.json` and `neoforge/src/main/resources/archie.mixins.json`, common mixin config in `common/src/main/resources/archie-common.mixins.json`.
33
+
34
+
## Safe edit boundaries
35
+
- For new gameplay/library logic: start in `common/src/main/kotlin/...`, then add loader `actual`/bootstrap only when APIs differ.
36
+
- When adding packets/events/config sections, mirror existing object-singleton style (`Archie`, `AEvents`, `ArchieNetworkChannel`) rather than introducing DI/service containers.
37
+
- If adding new runtime libraries to shipped jars, use `bundleRuntimeLibrary(...)` / `bundleMod(...)` in loader `build.gradle.kts` files (not plain `implementation` only).
0 commit comments