### Added
**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
**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
**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.
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }