Just Storage Panel is a focused NeoForge mod for Minecraft 1.21.1 that adds a compact item network built around exactly three blocks.
- Access Panel: browse the connected network, insert items, and extract items.
- Crafting Panel: adds a 3x3 crafting grid on top of the Access Panel workflow.
- Logic Cable: connects panels to inventories and compatible controller-style blocks.
The network starts at a panel and scans through adjacent Logic Cables and other panels. Any neighboring block that exposes a compatible item handler is treated as a storage endpoint.
The mod also includes targeted runtime heuristics for Sophisticated Storage controller-style access blocks such as controller, storage IO, storage input, and storage output, which improves attachment reliability for panels and cables.
- Recipe transfer into the Crafting Panel is supported.
- A dedicated JEI button is available in the Crafting Panel GUI when JEI is installed on the client.
- JEI remains optional and client-side only.
- Minecraft 1.21.1
- NeoForge 21.1.218
- Java 21
Build the mod locally with:
.\gradlew.bat buildThe generated artifact is written to build/libs and is named like this:
juststoragepanel-1.21.1-1.0.4.jar
For a local Maven-style publication, run:
.\gradlew.bat publishWithout any extra configuration this publishes to the local repo folder.
To publish to a remote Maven repository instead, provide these environment variables or Gradle properties:
MAVEN_URLormavenUrlMAVEN_USERNAMEormavenUsernameMAVEN_PASSWORDormavenPassword
When the repository URL points to GitHub, the build defaults to GitHub Packages automatically. For this project that means the default Maven target is:
https://maven.pkg.github.com/GeneraBlack/JustStoragePanel
In GitHub Actions, GITHUB_TOKEN is sufficient for publishing to that default GitHub Packages registry.
The published Maven coordinates use this artifact id:
de.juststoragepanel:juststoragepanel-1.21.1:1.0.4
To publish the built jar to CurseForge, run:
.\gradlew.bat --no-configuration-cache publishCurseForgeRequired configuration for CurseForge:
CURSEFORGE_PROJECT_IDorcurseforgeProjectIdCURSEFORGE_TOKENorcurseforgeToken
Optional CurseForge configuration:
CURSEFORGE_RELEASE_TYPEorcurseforgeReleaseTypewithrelease,beta, oralpha
The default changelog source for CurseForge releases is CHANGELOG.md.
Tagged GitHub workflows now fail fast when CURSEFORGE_PROJECT_ID or CURSEFORGE_TOKEN is missing, so a green release can no longer hide a skipped CurseForge upload.
The CurseForge Gradle plugin currently does not support Gradle's configuration cache cleanly, so the command above explicitly disables it for that publish step.
build.ymlbuilds the project on pushes and pull requests.release.ymlruns only for pushed version tags, uploads the jar as a GitHub release asset, and can also publish to Maven and CurseForge when the required repository variables and secrets are configured.release-recovery.ymlautomatically retries Maven and/or CurseForge publishing when the mainReleaseworkflow completed without those publish jobs succeeding.republish.ymlreruns Maven and/or CurseForge publishing for an existing branch or tag without creating a new release tag.
Recommended release flow:
- Create your own Git repository and point
originto it. - Push the main branch.
- Create and push a version tag such as
v1.0.4. - Configure
MAVEN_URL,MAVEN_PASSWORD,CURSEFORGE_PROJECT_ID, andCURSEFORGE_TOKENin GitHub if you want automated publishing.
If you publish to GitHub Packages for this repository, MAVEN_URL is optional because the workflow derives it automatically from the repository name.
If a tagged Release workflow finishes without a successful Maven publish, or if the CurseForge job never reached a successful Publish to CurseForge step, release-recovery.yml automatically retries the missing target from the exact same release commit.
If a file upload succeeds but the project page still appears outdated, verify the file from the CurseForge Files view instead of only the overview page.
Check these points on CurseForge:
- Open the project's
Filestab. - Sort by newest files.
- Set the game version filter to
1.21.1or show all versions. - Set the mod loader filter to
NeoForgeor show all loaders. - Hard refresh the page if the newest file is not shown immediately.
- Check the GitHub Actions run: if the
Publish to CurseForgestep shows0s, the upload was skipped before Gradle ran.
If a tagged release ever reaches GitHub but one publishing target still lags behind, use the Re-Publish workflow from GitHub Actions and select the affected tag, for example v1.0.4. The main Release workflow itself is tag-driven and no longer intended for manual branch publishes.
Start the client development environment with:
.\gradlew.bat runClientStart the dedicated development server with:
.\gradlew.bat runServer- Logic Cable: copper ingots plus redstone, yields 8 cables.
- Access Panel: iron ingots, glass pane, redstone, chest, and Logic Cable.
- Crafting Panel: Access Panel, crafting table, and redstone.
The mod is intended for modded multiplayer. Server and clients must use the same Minecraft, NeoForge, and mod versions. JEI is optional for the server, but clients need JEI installed if they want to use JEI-specific features.
Detailed documentation for multiplayer behavior and quantified server impact is available in docs/MULTIPLAYER_SERVER_IMPACT.md.
The passive panel refresh interval and client-side search debounce are configurable through the generated NeoForge config files.