A monorepo of client-side Fabric mods for Minecraft 1.21.11, plus the shared library they are all built on.
Everything here is client-side only. No mod in this repo requires a server-side component, and none of them changes anything on a server you connect to.
The repository is named after TrarnCore, the shared library, which is also the name of one of the folders inside it. The library is bundled into each mod's jar — it is never installed separately.
| Mod | What it does | |
|---|---|---|
| ClaimViz | Visualizes GriefPrevention land claims and live player positions by reading a server's SquareMap web map. Includes a full-screen pannable map and optional Xaero's Minimap integration. | README |
| ContainerUtil | Highlights every storage container around you in a distinct colour, remembers what you put in them, and lets you search your whole base for an item — then walks you to it with a beam and a direction arrow. | README |
| EasyPortalLinker | Makes Nether-portal linking foolproof. Select a portal with a wooden shovel and see exactly where its counterpart must go, as a ghost frame you build to. | README |
| SimDistance | Draws a translucent wall at the edge of your simulation-distance region, so you can see which chunks are actually being ticked — the thing that decides whether your farms run. | README |
| TrustUI | A social-menu-style screen for managing GriefPrevention claim trust. Shows online players with their heads, marks who already has permissions in the claim you are standing in, and grants or revokes access with a click. | README |
| RSwitch | One key swaps the item in your hand with the inventory slot directly above it. Works with an empty slot too, so it doubles as an instant way to clear your hand. | README |
| TrarnCore | Shared plumbing: render layers and primitives, local chat feedback, JSON config, keybind helpers, ModMenu/Cloth glue, error throttling. Bundled into every mod via jar-in-jar. | README |
It exists because the mods had accumulated a copy each of the same ConfigManager, Chat and
ModMenuIntegration, and had reimplemented the same vertex-emitting code four times. More
importantly, the render layer — the most version-fragile code here — had already drifted between
them. One copy means a Minecraft rendering change is fixed once.
Requires JDK 21. Each project is a standalone Gradle build with its own wrapper.
Build TrarnCore first on a fresh clone. Loom inspects a
modImplementationdependency's jar at configuration time, before any task runs — so the library jar has to already exist on disk or every mod fails withNoSuchFileException: trarncore-*.jar. Gradle cannot resolve this for you with a task dependency, because the read happens before the task graph executes.
# once, after cloning
cd TrarnCore && ./gradlew build && cd ..
# then any mod, any time
cd ContainerUtil && ./gradlew buildOr build everything:
(cd TrarnCore && ./gradlew build)
for m in ClaimViz SimDistance EasyPortalLinker ContainerUtil RSwitch TrustUI; do
(cd "$m" && ./gradlew build)
doneAfter that first library build, day-to-day work needs no special ordering: the mods consume
TrarnCore through a Gradle composite build (includeBuild('../TrarnCore')), so editing the
library and rebuilding any mod picks the change up immediately. There is no publish step.
Every mod build also copies its finished jar into ModBuilds/, so all six sit in
one folder ready to drop into a Minecraft instance. Sources jars and the library are deliberately
excluded — see that folder's README.
Install all six together. They share the bundled library, and mixing a jar built before a library
change with jars built after it is the one combination that produces a NoClassDefFoundError at
startup.
Minecraft, Yarn, Loader and Fabric API versions are pinned once in
versions.properties and read by every project's build.gradle. A
Minecraft bump is a one-file edit for the whole repo.
Each project keeps a fallback copy in its own gradle.properties, so a project copied out of this
directory still builds on its own.
Mod versions are per-project, in each gradle.properties.
A bare v1.2.3 tag would be ambiguous in a monorepo, so tags name what they release.
release.yml supports two shapes.
git tag all-v0.1.0
git push --tagsBuilds all six mods and publishes one GitHub Release with all six jars attached. Each mod is
built at its own configured version — the version in the tag is only the release label. That is
deliberate: mod versions legitimately differ (ClaimViz is on 0.0.x while the rest are on 0.1.x),
and forcing them all to one number would misreport what you actually shipped.
git tag containerutil-v0.1.0
git push --tagsBuilds just that project, at the version in the tag — overriding gradle.properties, so the
tag is the single action that cuts the release, with nothing to remember to commit first.
Valid ids: claimviz, containerutil, easyportallinker, simdistance, rswitch,
trustui, trarncore, or all. Anything else fails the workflow with a clear message rather than silently building
nothing.
TrarnCore is excluded from all-v* on purpose — it is bundled inside every mod jar and is never
installed separately, so it has no artifact worth attaching. Release it on its own if you ever want
a tagged reference point for the library.
ci.yml builds all seven projects as a matrix on every push and PR to
main, so each gets its own pass/fail in the checks list. Mod jars are uploaded as build
artifacts with 90-day retention.
| Dependency | Required | Notes |
|---|---|---|
| Fabric Loader ≥ 0.15 | Yes | |
| Fabric API | Yes | |
| Java 21 | Yes | Both to build and to run |
| ModMenu | Recommended | Needed to reach any mod's config screen |
| Cloth Config | Recommended | Needed for the config screen UI |
Individual mods have their own optional integrations — ClaimViz can talk to Xaero's Minimap, for instance. See each mod's README.
.
├─ .github/workflows/ CI and release workflows
├─ versions.properties Shared Minecraft/Yarn/Loader/Fabric pins
├─ ModBuilds/ Built jars, collected from every mod (generated)
├─ TrarnCore/ Shared library, bundled into each mod
├─ ClaimViz/
├─ ContainerUtil/
├─ EasyPortalLinker/
├─ SimDistance/
├─ RSwitch/
└─ TrustUI/
MIT.