promotional bannermobile promotional banner

NeroSpace

Mine alien ore, build machines to refine it, and craft tiered rockets to blast off to new planet-dimensions full of exotic ores. A space-exploration tech mod that turns survival into a journey from your first pickaxe to interstellar travel.
Back to Files

Nerospace 1.0.2 - Forge 26.2

File namenerospace-forge-26.2-1.0.2-all.jar
Uploader
NerolandNeroland
Uploaded
Aug 10, 2026
Downloads
21
Size
2.4 MB
Mod Loaders
Forge
File ID
8619086
Type
R
Release
Supported game versions
  • 26.2

Curse Maven Snippet

Forge

implementation "curse.maven:nerospace-1559818:8619086"

Learn more about Curse Maven

What's new

Added

NeroLink companion module (za.co.neroland.nerospace.link)

  • Nerospace now registers a module with Neroland Core's link registry, so the NeroLink companion bridge serves it instead of reporting nerospace: absent. Schema v1.
  • Five read-only sections: rockets (tier, fuel, oxygen, power, launch readiness + nearby launch-pad tiers), stations (the stations you own, plus registry capacity as plain counts), planets (gravity / airless / hazard, plus which worlds you have reached), life_support (your oxygen tank, suit tier and hazard shield) and star_guide (your chapter/step progress and next step).
  • Two deliberately conservative actions: rename_station (owner-gated, online-required, runs the same server-side path as the in-game naming console) and acknowledge_alert. Nothing in the module can launch a rocket, move a player or edit the world from a phone.
  • Three live events: oxygen_low and rocket_landed (owner-scoped), and a deliberately anaemic station_state broadcast carrying only a slot number, a dimension and a state word.
  • New config key linkModuleEnabled (default true, server-authoritative) switches the whole module off; it is re-checked on every snapshot, action and publish, so /neroland config reload applies immediately.
  • Privacy: every section is filtered by the requesting player's UUID. No other player's station, oxygen value or Star Guide step can appear in a response; ownership of other players is never emitted, not even as a name. Operator status is deliberately not honoured. Rockets and launch pads have no owner in Nerospace, so that section reports only what you could already see from where you stand (a 128-block radius around you, while online) rather than a server-wide roster.

Per-loader Maven artifacts published to GitHub Packages

  • The release workflow now publishes all six nerospace-<loader>-<mc> artifacts after the build, so sibling Nero mods can compile against za.co.neroland.nerospace.api from a remote repository instead of reaching Nerospace by reflection.

Marker-less quarry setup (frame outline)

  • The quarry area can now be defined without landmarks: outline a closed rectangle with hand-placed Frame Casing (it is now a placeable block item that places quarry_frame) and put the Quarry Controller beside it — the controller detects the complete perimeter (same plane, same size limits as the landmark path) and starts mining inside it immediately. The landmark flow is unchanged.
  • The GUI now shows why the quarry is paused ("Paused — frame incomplete / out of power / output buffer full / fluid buffer full / out of Frame Casing / wrong planet").

Public cargo-rocket route API (za.co.neroland.nerospace.api)

  • New semver-stable route surface for logistics consumers (NeroLogistics' RouteProvider seam):
    • NerospaceRoutes — static lookup facade: endpoints() (Home + Orbital Station + the three moons, stable order), endpoint/isEndpoint, route(from, to), routesFrom(from), and isOpen(...) liveness checks against loaded dimensions.
    • RouteEndpoint — immutable endpoint record (dimension key, display name, optional PlanetId).
    • CargoRoute — immutable directed route record carrying the minimum rocket tier (1–4), the per-launch fuel cost in millibuckets (the same cross-dimension launch cost a crewed rocket pays, fuelCost-config-scaled at query time), and a canonical transit duration in ticks (TRANSIT_TICKS_PER_STEP per step of separation in the destination order).
  • Read-only and player-data-free; the internals (rocket.Destinations, rocket.RocketTravel, rocket.RocketTier) remain internal.

Meteor Tracker is now craftable (survival)

  • New shaped recipe: a vanilla Compass with Nerosteel Ingots above and below and Redstone Dust at the sides. The tracker was previously creative-only. (The four destination compasses remain creative-only pending a rework.)

Optional Energized Power interop declared

  • All three loader manifests now declare Energized Power as an optional/suggested dependency with AFTER load ordering, so its capabilities and c: tags are ready before Nerospace loads when it is installed. Nerospace stays fully independent of it.

Fixed

A refused GUI no longer reports as a successful one (MC-NEROSPACE-J)

  • The MenuOpener guard already stopped a Bukkit/Paper hybrid from taking the server thread down when a plugin choked on a modded item during InventoryOpenEvent — but 21 of its 22 call sites discarded the result and returned InteractionResult.SUCCESS regardless. They now return the new MenuOpener.openOrConsume, which reports CONSUME on a refusal. FAIL would be wrong: it does not consume the action, so the interaction would fall through to the held item and the player would place a block against the machine they were trying to open.
  • An Alien Villager whose trade screen was refused stayed locked forever. startTrading set the trading player before opening, and nothing cleared it when the open failed — so the villager was flagged as busy with a player who had no window, and neither they nor anyone else could trade with it again. It is now released on refusal.
  • Handled-failure telemetry was applying its handled / source tags through a scope that never reached the event, so every report arrived unlabelled, at error level, in its own new issue. The tags now land, the level is WARNING (a guard caught it; the server carried on), and reports are fingerprinted by guard and operation so hybrid noise collapses into one issue without swallowing a genuine bug in one of our own menus.
  • Privacy: the guard's log line and telemetry payload identified the menu by its rendered title, which for a renamed Alien Villager is text a player typed on a name tag. It now sends the translation key or the provider class name, never player-authored text.

Right-to-erasure now reaches Alien Villager reputation (POPIA/GDPR)

  • Each Alien Villager keeps a UUID -> reputation map in its own entity NBT — an undeclared fourth per-player store that Nerospace's Core erasure hook never touched, so an erased player's UUID could sit in villager NBT indefinitely. The eraser (now data.NerospaceErasure) sweeps every loaded level and drops the entry, and a villager whose chunk loads later in the same server session has the entry stripped as it reads its NBT. The residual gap — a villager in a chunk never visited again after a server restart — is documented in code rather than papered over; deliberately no persistent suppression list, because storing the very UUID we were asked to forget, forever, would be worse.
  • The eraser's comment claiming an offline player's attachment data "resets to defaults on its own" was wrong: both oxygen and star_guide_seen are declared serialize(...) with copyOnDeath() and persist in the player's save file. The comment now states the real limitation, and an erasure that lands while a player is offline is completed the next time they log in during the same session.

Machine blocks now drop themselves when mined

  • Several blocks used requiresCorrectToolForDrops but were missing from the minecraft:mineable/pickaxe tag, so no tool ever counted as correct and they dropped nothing: Fuel Tank, Fuel Refinery, Oxygen Generator, Terraformer, Hydration Module, Terraform Monitor, Star Guide, Solar Panel (all tiers), Quarry Controller, Rocket Launch Pad, Launch Gantry, Village Core (plus Meteor Core, Launch Controller and its filler for mining-speed parity). All are now pickaxe-mineable; loot-table-dropping ones also need an iron tool, matching the other machines. Solar Panel T2/T3 keep their one-item multiblock drop from code (their loot tables are now empty to prevent a duplicate drop).

Changed

Neroland Core dependency floor raised to 1.10.0

  • nerolandcore_version moves from 1.4.0 to 1.10.0 (six minors of drift). Core's V1 API is frozen and every minor in that range is additive-only, so no Nerospace code changed. The loader dependency ranges are derived from this single property — [1.10.0,2.0) for NeoForge/Forge and >=1.10.0 <2.0.0 for Fabric — so an out-of-date Core is now refused at load time instead of crashing later at registration.

Quarry frame lifecycle

  • Breaking a frame block now drops a Frame Casing, and the quarry notices the broken ring: it rebuilds the gap from its casing stock, or pauses with "frame incomplete" until the player patches the ring by hand or inserts casings into the frame slots.
  • A finished dig dismantles its frame: the standing frame blocks are removed and their casings returned to the controller's frame slots (spilled at the controller if the slots overflow). Breaking the controller still drops everything it holds.
  • Breaking the controller mid-dig no longer silently deletes the frame. The orphaned frame blocks now decay: each one crumbles (break effect, dropping its Frame Casing — the same drop as mining it yourself) at its own random moment, the ring slowly dissolving block by block over roughly the next 30 seconds to 4 minutes (tunable via the new quarryFrameDecayTicks config key). Placing a new controller beside a still-complete orphaned ring re-adopts it and stops the decay.

Storage blocks moved to Neroland Core

  • The Battery, Fluid Tank, Gas Tank, Item Store, and Trash Can (the first four with their Creative variants) now ship in the shared Neroland Core library instead of Nerospace. Their ids changed from nerospace:* to nerolandcore:battery, nerolandcore:fluid_tank, nerolandcore:gas_tank, nerolandcore:item_store, nerolandcore:trash_can (and nerolandcore:creative_*), so every Neroland mod now shares one set of storage endpoints. They craft and behave exactly as before.
  • Bumped the required Neroland Core dependency to 1.1.0 (the release that adds these blocks and the generic fluid/gas storage APIs; the Trash Can also brings Core's first menu type and client screen).
  • The Universal Pipe still interoperates with all of these blocks — it bridges Core's nerolandcore:fluid / nerolandcore:gas (and energy / item) capabilities onto Nerospace's own nerospace:fluid / nerospace:gas lookups, so existing pipe networks keep working (including voiding into the Trash Can).

Generators now push power directly (no cables needed)

  • The Combustion Generator, Passive Generator, and Solar Panel now default their energy auto-eject to ON: they push power into adjacent receivers every tick — machines, batteries, pipes, and (via Neroland Core 1.3.2's Forge-Energy fallback) third-party FE blocks. Auto-eject can still be toggled off per machine in the side-config UI.

Quarry pacing rebalance

  • The quarry's mining interval increased from 8 to 10 ticks — a modest slow-down to rebalance throughput against its power draw.

Neroland Core dependency bumped to 1.3.2

  • Brings the standard Forge-Energy fallback in Core's energy lookup: the Universal Pipe now connects to and transfers with third-party FE cables and machines (e.g. Energized Power) on NeoForge and Forge, and Core's Battery pushes power into adjacent blocks without cables. See Neroland Core's changelog for details.

Build & CI

  • New auto-assign workflow: the maintainer is assigned to newly opened issues and PRs (including forked PRs via a limited, API-only pull_request_target).
  • publish.yml release-note extraction now tries the exact version section first, falls back to [Unreleased], and only uses the placeholder when neither exists.

Migration note (existing worlds)

  • Block-id aliases preserve existing placements. Blocks already placed as nerospace:battery, nerospace:fluid_tank, nerospace:gas_tank, nerospace:item_store, or nerospace:trash_can (and creative_*) are remapped to the matching nerolandcore: block on load:
    • Forge — via Forge's MissingMappingsEvent (fully supported).
    • NeoForge / Fabric — modern NeoForge removed that event and Fabric never had one, so a small, strictly-scoped mixin remaps these ids at the registry lookup instead. It is require = 0 (best-effort): if it can't apply on a given version it safely no-ops rather than crashing. Verify on your save after updating; if a placed block ever drops, break and re-place it with the Neroland Core variant — items and stored contents are unaffected regardless.

This mod has no additional files