Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
3e1deee
Update gradle.properties
Dario-Maselli Jun 17, 2026
838fef7
Add multiloader Architectury/Stonecutter scaffold
Dario-Maselli Jun 17, 2026
10ba36f
Add multiloader CI, VS Code tasks, and docs
Dario-Maselli Jun 17, 2026
b40782c
Create MULTILOADER.md
Dario-Maselli Jun 17, 2026
0a4dd5e
Use multiloader Gradle wrapper; update tooling
Dario-Maselli Jun 18, 2026
3058d7d
Migrate multiloader to MultiLoader-Template
Dario-Maselli Jun 18, 2026
c7cb2f7
Update multiloader CI, VSCode tasks & NeoForge
Dario-Maselli Jun 18, 2026
f0d9f0c
Generate mod metadata & add VS Code configs
Dario-Maselli Jun 18, 2026
cf5aa2d
Update VS Code launch configs for modFolders
Dario-Maselli Jun 18, 2026
cea3c82
Introduce registration seam and Nerosium block
Dario-Maselli Jun 19, 2026
92070a8
Add ore/material blocks, items, and assets
Dario-Maselli Jun 19, 2026
ba9eca0
Add station, alien and meteor blocks and assets
Dario-Maselli Jun 19, 2026
c8fbb01
Add oxygen suits, pickaxe and item registrations
Dario-Maselli Jun 19, 2026
05a4b55
Add new items, assets and recipes
Dario-Maselli Jun 19, 2026
201b5d0
Create MULTILOADER_MIGRATION.md
Dario-Maselli Jun 19, 2026
ee28d73
Add nerosium ore features and Fabric biome hook
Dario-Maselli Jun 19, 2026
1d5848b
Update multiloader.yml
Dario-Maselli Jun 19, 2026
69cadca
Add Item Store block entity and build infra updates
Dario-Maselli Jun 19, 2026
1322fb6
Expose item-storage capability to loaders
Dario-Maselli Jun 19, 2026
f2e73f0
Add battery block and energy API
Dario-Maselli Jun 19, 2026
c5321af
Add fluid tank block, BE, and fluid API
Dario-Maselli Jun 19, 2026
77fa26e
Add combustion generator block and block entity
Dario-Maselli Jun 19, 2026
4ab8004
Add combustion generator UI, menu & client wiring
Dario-Maselli Jun 19, 2026
99f1308
Add Nerosium Grinder machine and UI
Dario-Maselli Jun 20, 2026
87bb6c7
Add passive generator block, BE, UI and assets
Dario-Maselli Jun 20, 2026
0ef17fa
Add Universal Pipe and platform energy lookup
Dario-Maselli Jun 20, 2026
ebe4620
Add Trash Can and Creative Battery blocks
Dario-Maselli Jun 20, 2026
d3ee538
Port rocket-fuel fluid and gas systems
Dario-Maselli Jun 20, 2026
0807fab
Add item relay to Universal Pipe
Dario-Maselli Jun 20, 2026
6722554
Add entities, models, renderers, and sounds
Dario-Maselli Jun 20, 2026
213a416
Add six new creatures, models, and assets
Dario-Maselli Jun 20, 2026
4b64f8d
Add Alien Villager entity, renderer & trades
Dario-Maselli Jun 20, 2026
be30fe7
Add planet dimensions, biomes, and ore data
Dario-Maselli Jun 20, 2026
3ef734c
Create MULTILOADER_PORT_CHECKLIST.md
Dario-Maselli Jun 20, 2026
e24e8e3
Add rocket entity, renderer, UI & assets
Dario-Maselli Jun 20, 2026
d6714bd
Add fuel tank and refinery machines
Dario-Maselli Jun 20, 2026
217aa85
Add quarry machine, blocks, BE, UI
Dario-Maselli Jun 20, 2026
5ea6dea
Add travel compasses, navigator and spawn eggs
Dario-Maselli Jun 20, 2026
6dee7d4
Add dedicated Nerospace creative tab
Dario-Maselli Jun 20, 2026
6c775cc
Add machine modules and creative storage
Dario-Maselli Jun 20, 2026
5dbbbcd
Add per-player oxygen system & attachments
Dario-Maselli Jun 20, 2026
870796d
Add cross-loader networking seam
Dario-Maselli Jun 21, 2026
cc62d19
Add alien structures, features, and village core
Dario-Maselli Jun 21, 2026
336a277
Add meteor feature: falling meteor & caller
Dario-Maselli Jun 21, 2026
3c73aa1
Add meteor scheduler and site tracking
Dario-Maselli Jun 21, 2026
9a7cf6d
Add Meteor Tracker HUD, networking, and item
Dario-Maselli Jun 21, 2026
503c703
Add oxygen diffusion field and integrate sources
Dario-Maselli Jun 21, 2026
5391b08
Add per-chunk terraforming data and biomes
Dario-Maselli Jun 21, 2026
52bc76f
Add terraforming conversion engine and resources
Dario-Maselli Jun 21, 2026
773fd8b
Add TerraformManager and chunk-load catch-up hooks
Dario-Maselli Jun 21, 2026
4dab9c6
Add Terraformer machine (block, BE, UI, assets)
Dario-Maselli Jun 21, 2026
417a5dd
Add Hydration Module machine and assets
Dario-Maselli Jun 21, 2026
b0e1ebc
Add Terraform Monitor block, BE, menu, screen
Dario-Maselli Jun 21, 2026
b0209ec
Add TerraformDrift and wire server ticks
Dario-Maselli Jun 21, 2026
4b23ebf
Add oxygen field client visuals and hazard shields
Dario-Maselli Jun 21, 2026
51d2289
Add Sentry telemetry, config and platform seams
Dario-Maselli Jun 21, 2026
c028ac5
Add Fabric launch configs and VSCode workspace
Dario-Maselli Jun 21, 2026
81546c4
Add eclipse plugin and clean Fabric launch files
Dario-Maselli Jun 21, 2026
b250509
Disable Buildship Gradle import for VSCode
Dario-Maselli Jun 21, 2026
45a8dbe
Create .gitignore
Dario-Maselli Jun 21, 2026
2d71740
Add per-face pipe config, filters & upgrades
Dario-Maselli Jun 21, 2026
2da5fef
Add fluid lookup and pipe fluid relay
Dario-Maselli Jun 21, 2026
5c9e791
Add Star Guide progression (book, pedestal, UI)
Dario-Maselli Jun 21, 2026
fe5d0f7
Add Nerospace advancements and guide entries
Dario-Maselli Jun 21, 2026
eba71c7
Add cross-loader BER seam and Star Guide hologram
Dario-Maselli Jun 21, 2026
16782e3
Add Star Guide seen-mask attachment & UI pulse
Dario-Maselli Jun 21, 2026
bb7a432
Add StarGuideGrants and wire into server ticks
Dario-Maselli Jun 21, 2026
b88e040
Implement station founding: charter, core, registry
Dario-Maselli Jun 21, 2026
35b73c6
Add energy multiplier config; apply to generators
Dario-Maselli Jun 21, 2026
03770b3
Add oxygen multipliers to config and manager
Dario-Maselli Jun 21, 2026
eea57de
Add fuelCostMultiplier and wire to RocketTier
Dario-Maselli Jun 21, 2026
484ead5
Add machineSpeed multiplier and wire to machines
Dario-Maselli Jun 21, 2026
ac83799
Add /nerospace gallery command and register it
Dario-Maselli Jun 21, 2026
3403e70
Add orbital station docking selection
Dario-Maselli Jun 21, 2026
9bc5391
Sync station names to client for Rocket UI
Dario-Maselli Jun 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
77 changes: 77 additions & 0 deletions .github/workflows/multiloader.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
name: Multiloader Build

# Builds the multiloader (multiloader/) β€” MultiLoader-Template layout
# (ModDevGradle common+neoforge, Fabric Loom fabric; no architectury-loom).
# Independent of the root single-loader build (build.yml).
#
# STRICT: there is no continue-on-error, so ANY matrix cell that fails to build
# fails the whole workflow. All four loader x version cells are verified buildable
# from public artifacts (gradle MCP, 2026-06-20):
# - neoforge @ 26.1.2 -> NeoForge 26.1.2.76
# - neoforge @ 26.2 -> NeoForge 26.2.0.6-beta (now on the public NeoForged Maven)
# - fabric @ 26.2 -> Fabric Loom 1.17 + fabric-api 0.152.1+26.2 (de-obf, no mappings)
# - fabric @ 26.1.2 -> Fabric Loom 1.17 + fabric-api 0.151.0+26.1.2; needs the access
# widener (fabric/src/main/resources/nerospace.accesswidener) because
# vanilla MC 26.1.2 kept BlockEntityType's constructor private
# (Mojang made it public in 26.2; NeoForge widens it on both).

on:
push:
paths:
- "multiloader/**"
- ".github/workflows/multiloader.yml"
workflow_dispatch:

permissions:
contents: read

jobs:
build:
name: ${{ matrix.loader }} @ MC ${{ matrix.mc }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- loader: neoforge
mc: "26.1.2"
- loader: neoforge
mc: "26.2"
- loader: fabric
mc: "26.1.2"
- loader: fabric
mc: "26.2"

steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 0
fetch-tags: true

- name: Setup JDK 25
uses: actions/setup-java@v5
with:
java-version: "25"
distribution: "temurin"

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4

- name: Make Gradle wrapper executable
run: chmod +x ./multiloader/gradlew

- name: Build ${{ matrix.loader }} for MC ${{ matrix.mc }}
working-directory: multiloader
run: >-
./gradlew :${{ matrix.loader }}:build
-Pminecraft_version=${{ matrix.mc }}
--stacktrace

- name: Upload ${{ matrix.loader }} ${{ matrix.mc }} jars
if: success()
uses: actions/upload-artifact@v4
with:
name: nerospace-${{ matrix.loader }}-${{ matrix.mc }}
path: multiloader/${{ matrix.loader }}/build/libs/*.jar
if-no-files-found: ignore
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,5 @@ repo/
!**/src/**/repo/
PROJECT_PLAN.md
/tools/__pycache__
runs/
/multiloader/fabric/runs
3 changes: 1 addition & 2 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
{
"//": "Generic, committable run configs for Nerospace. Paths use ${workspaceFolder} so they work on any machine, and each config\u0027s preLaunchTask (see tasks.json) regenerates build/moddev/\u003crun\u003eArgs.txt before launch so it never fails after a clean. ModDevGradle no longer overwrites this file: build.gradle sets disableIdeRun() on every run, so this file is the source of truth.",
"//": "Run/debug configs for the ROOT single-loader NeoForge build (project \u0027nerospace\u0027). modFolders points at bin/main (IDE classes) AND build/resources/main (where the generated neoforge.mods.toml lives). Multiloader run/debug lives in multiloader/.vscode + nerospace.code-workspace.",
"version": "0.2.0",
"//classPaths": "Each config launches from build/moddev/devlaunchClasspath.jar, a gradle-generated pathing jar whose MANIFEST Class-Path lists the exact NeoForge/Minecraft/DevLaunch dev jars for the version in gradle.properties (built by the devLaunchPathingJar task, which finalizes every prepare*Run preLaunchTask). With no $Auto entry, classPaths REPLACES the IDE-resolved runtime classpath, so a neo_version bump can never again launch a stale NeoForge and crash FML with \u0027version is null\u0027. projectName is kept only for source/breakpoint mapping; the mod loads via -Dfml.modFolders, not the classpath. Verified end-to-end: launching with only this jar boots GameTestServer and passes all gametests.",
"configurations": [
{
"type": "java",
Expand Down
128 changes: 127 additions & 1 deletion .vscode/tasks.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"//": "preLaunchTasks for launch.json: each runs the matching ModDevGradle 'prepare<Run>' task to (re)generate build/moddev/<run>Args.txt before launch, so launches never fail after a clean. Cross-platform: gradlew on Linux/macOS, gradlew.bat on Windows.",
"//": "Root single-loader prepareRun tasks (preLaunchTasks for the root launch.json) + Multiloader (multiloader/) build/run tasks. The multiloader tasks shell out to multiloader's OWN wrapper (Gradle 9.5.1) with cwd=multiloader; they do NOT need the multiloader Gradle build to be imported by the Java extension, so they work from the repo-root window.",
"version": "2.0.0",
"tasks": [
{
Expand Down Expand Up @@ -37,6 +37,132 @@
"args": ["prepareDataRun"],
"presentation": { "reveal": "silent", "panel": "shared", "clear": false },
"problemMatcher": []
},

{
"label": "ML: Run Fabric Client - 26.2",
"detail": "Multiloader RUN tasks launch the game directly via Gradle (no debugger). For breakpoint debugging, open nerospace.code-workspace and use its Run & Debug entries.",
"type": "process",
"command": "${workspaceFolder}/multiloader/gradlew",
"windows": { "command": "${workspaceFolder}/multiloader/gradlew.bat" },
"options": { "cwd": "${workspaceFolder}/multiloader" },
"args": [":fabric:runClient", "-Pminecraft_version=26.2"],
"presentation": { "reveal": "always", "panel": "dedicated", "clear": true },
"problemMatcher": []
},
{
"label": "ML: Run NeoForge Client - 26.1.2",
"type": "process",
"command": "${workspaceFolder}/multiloader/gradlew",
"windows": { "command": "${workspaceFolder}/multiloader/gradlew.bat" },
"options": { "cwd": "${workspaceFolder}/multiloader" },
"args": [":neoforge:runClient", "-Pminecraft_version=26.1.2"],
"presentation": { "reveal": "always", "panel": "dedicated", "clear": true },
"problemMatcher": []
},
{
"label": "ML: Run Fabric Client (pick MC)",
"type": "process",
"command": "${workspaceFolder}/multiloader/gradlew",
"windows": { "command": "${workspaceFolder}/multiloader/gradlew.bat" },
"options": { "cwd": "${workspaceFolder}/multiloader" },
"args": [":fabric:runClient", "-Pminecraft_version=${input:mlMcVersion}"],
"presentation": { "reveal": "always", "panel": "dedicated", "clear": true },
"problemMatcher": []
},
{
"label": "ML: Run Fabric Server (pick MC)",
"type": "process",
"command": "${workspaceFolder}/multiloader/gradlew",
"windows": { "command": "${workspaceFolder}/multiloader/gradlew.bat" },
"options": { "cwd": "${workspaceFolder}/multiloader" },
"args": [":fabric:runServer", "-Pminecraft_version=${input:mlMcVersion}"],
"presentation": { "reveal": "always", "panel": "dedicated", "clear": true },
"problemMatcher": []
},
{
"label": "ML: Run NeoForge Client (pick MC)",
"type": "process",
"command": "${workspaceFolder}/multiloader/gradlew",
"windows": { "command": "${workspaceFolder}/multiloader/gradlew.bat" },
"options": { "cwd": "${workspaceFolder}/multiloader" },
"args": [":neoforge:runClient", "-Pminecraft_version=${input:mlMcVersion}"],
"presentation": { "reveal": "always", "panel": "dedicated", "clear": true },
"problemMatcher": []
},
{
"label": "ML: Run NeoForge Server (pick MC)",
"type": "process",
"command": "${workspaceFolder}/multiloader/gradlew",
"windows": { "command": "${workspaceFolder}/multiloader/gradlew.bat" },
"options": { "cwd": "${workspaceFolder}/multiloader" },
"args": [":neoforge:runServer", "-Pminecraft_version=${input:mlMcVersion}"],
"presentation": { "reveal": "always", "panel": "dedicated", "clear": true },
"problemMatcher": []
},

{
"label": "ML: Build both loaders (pick MC)",
"type": "process",
"command": "${workspaceFolder}/multiloader/gradlew",
"windows": { "command": "${workspaceFolder}/multiloader/gradlew.bat" },
"options": { "cwd": "${workspaceFolder}/multiloader" },
"args": ["build", "-Pminecraft_version=${input:mlMcVersion}"],
"group": "build",
"presentation": { "reveal": "always", "panel": "shared", "clear": true },
"problemMatcher": []
},
{
"label": "ML: Build NeoForge (pick MC)",
"type": "process",
"command": "${workspaceFolder}/multiloader/gradlew",
"windows": { "command": "${workspaceFolder}/multiloader/gradlew.bat" },
"options": { "cwd": "${workspaceFolder}/multiloader" },
"args": [":neoforge:build", "-Pminecraft_version=${input:mlMcVersion}"],
"group": "build",
"presentation": { "reveal": "always", "panel": "shared", "clear": true },
"problemMatcher": []
},
{
"label": "ML: Build Fabric (pick MC)",
"type": "process",
"command": "${workspaceFolder}/multiloader/gradlew",
"windows": { "command": "${workspaceFolder}/multiloader/gradlew.bat" },
"options": { "cwd": "${workspaceFolder}/multiloader" },
"args": [":fabric:build", "-Pminecraft_version=${input:mlMcVersion}"],
"group": "build",
"presentation": { "reveal": "always", "panel": "shared", "clear": true },
"problemMatcher": []
},
{
"label": "ML: Generate Fabric VS Code run configs (pick MC)",
"detail": "Loom's real task is 'vscode' (not genVsCodeRuns). Writes multiloader/.vscode/launch.json; use it from nerospace.code-workspace.",
"type": "process",
"command": "${workspaceFolder}/multiloader/gradlew",
"windows": { "command": "${workspaceFolder}/multiloader/gradlew.bat" },
"options": { "cwd": "${workspaceFolder}/multiloader" },
"args": [":fabric:vscode", "-Pminecraft_version=${input:mlMcVersion}"],
"presentation": { "reveal": "always", "panel": "shared", "clear": true },
"problemMatcher": []
},
{
"label": "ML: Refresh loom caches",
"type": "process",
"command": "${workspaceFolder}/multiloader/gradlew",
"windows": { "command": "${workspaceFolder}/multiloader/gradlew.bat" },
"options": { "cwd": "${workspaceFolder}/multiloader" },
"args": [":fabric:build", "-Pminecraft_version=${input:mlMcVersion}", "--refresh-dependencies"],
"presentation": { "reveal": "always", "panel": "shared", "clear": true },
"problemMatcher": []
}
],
"inputs": [
{
"id": "mlMcVersion",
"type": "pickString",
"description": "Minecraft version for the multiloader build",
"options": ["26.1.2", "26.2"],
"default": "26.2"
}
]
}
Loading
Loading