feat: Add quarry, modules, trash can and assets#2
Conversation
Introduce a new quarry feature plus supporting modules and a trash can: added Java classes for quarry machine (controller, frame, landmark, controller BE, menu, renderer, render state, chunk loader, region, miner tiers, output filter, planet profiles), module registry and item classes, and trash can storage BE. Added generated resources (blockstates, models, item models, recipes, loot tables, advancements, tags, language entries) plus Blockbench model sources and textures. Updated datagen providers, registries, client code, tests, tools, and docs (wiki pages) to wire everything together. Also minor docs/format tweaks (.markdownlint, PRIVACY.md code fence, RELEASE_CHECKLIST formatting).
There was a problem hiding this comment.
Pull request overview
This PR introduces a new automated mining feature (Quarry Controller + Landmarks + Frame), a cross-machine upgrade-module system, and a Trash Can void-sink block, then wires them through registries, datagen, client rendering/UI, commands/gallery capture, and wiki documentation. It also enhances the local gradle-mcp helper with parsed diagnostics and a Markdown linter plus a companion auto-fixer script.
Changes:
- Add Quarry gameplay feature: region discovery from landmarks, frame placement, mining loop (with chunk forcing), GUI/menu, and client-side renderer/screen.
- Add cross-machine upgrade modules (items + aggregation logic) and a Trash Can storage block entity that voids items/fluids/gas.
- Update tooling (gradle-mcp diagnostics + markdown_check + fix_markdown), wiki pages, and generated assets/recipes/tags/advancements/models/lang entries.
Reviewed changes
Copilot reviewed 100 out of 153 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| wiki/Xertz-Quartz-Ore.md | Formatting/spacing tweaks for consistency. |
| wiki/Upgrade-Modules.md | New wiki page documenting frame casing + upgrade modules. |
| wiki/Universal-Pipe.md | Formatting fixes and code fence language normalization. |
| wiki/Trash-Can.md | New wiki page documenting the Trash Can block. |
| wiki/Terraformer.md | Formatting fixes and code fence language normalization. |
| wiki/Terraform-Monitor.md | Formatting fixes and code fence language normalization. |
| wiki/Station-Wall.md | Formatting/spacing tweaks for consistency. |
| wiki/Station-Floor.md | Formatting/spacing tweaks for consistency. |
| wiki/Station-Core.md | Formatting/spacing tweaks for consistency. |
| wiki/Station-Charter.md | Formatting fixes and code fence language normalization. |
| wiki/Star-Guide.md | Formatting fixes and code fence language normalization. |
| wiki/Rocket-Launch-Pad.md | Formatting fixes and code fence language normalization. |
| wiki/Roadmap.md | Minor Markdown cleanup (blank lines/formatting). |
| wiki/Quarry-Landmark.md | New wiki page documenting Quarry Landmarks. |
| wiki/Quarry-Controller.md | New wiki page documenting Quarry Controller setup/behavior. |
| wiki/Pipe-Filters-and-Upgrades.md | Formatting/spacing tweaks for consistency. |
| wiki/Passive-Generator.md | Formatting fixes and code fence language normalization. |
| wiki/Oxygen-Suit.md | Formatting fixes and code fence language normalization. |
| wiki/Oxygen-Generator.md | Formatting fixes and code fence language normalization. |
| wiki/Nerosteel-Ore.md | Formatting/spacing tweaks for consistency. |
| wiki/Nerosium-Ore.md | Formatting/spacing tweaks for consistency. |
| wiki/Nerosium-Grinder.md | Formatting fixes and code fence language normalization. |
| wiki/Launch-Gantry.md | Formatting fixes and code fence language normalization. |
| wiki/Items.md | Formatting/spacing tweaks for consistency. |
| wiki/Item-Store.md | Formatting fixes and code fence language normalization. |
| wiki/Hydration-Module.md | Formatting fixes and code fence language normalization. |
| wiki/Home.md | Add Quarry Controller to progression overview. |
| wiki/Glacite-Ore.md | Formatting/spacing tweaks for consistency. |
| wiki/Gas-Tank.md | Formatting fixes and code fence language normalization. |
| wiki/Future-Features.md | Formatting/spacing tweaks for consistency. |
| wiki/Fuel-Tank.md | Formatting fixes and code fence language normalization. |
| wiki/Fuel-Refinery.md | Formatting fixes and code fence language normalization. |
| wiki/Fluid-Tank.md | Formatting fixes and code fence language normalization. |
| wiki/Deepslate-Nerosium-Ore.md | Formatting/spacing tweaks for consistency. |
| wiki/Creatures.md | Formatting/spacing tweaks for consistency. |
| wiki/Creative-Source-Blocks.md | Formatting/spacing tweaks for consistency. |
| wiki/Configurator.md | Formatting/spacing tweaks for consistency. |
| wiki/Combustion-Generator.md | Formatting fixes and code fence language normalization. |
| wiki/Cindrite-Ore.md | Formatting/spacing tweaks for consistency. |
| wiki/Block-of-Raw-Nerosium.md | Formatting/spacing tweaks for consistency. |
| wiki/Block-of-Nerosteel.md | Formatting/spacing tweaks for consistency. |
| wiki/Block-of-Nerosium.md | Formatting/spacing tweaks for consistency. |
| wiki/Block-of-Glacite.md | Formatting/spacing tweaks for consistency. |
| wiki/Block-of-Cindrite.md | Formatting/spacing tweaks for consistency. |
| wiki/Battery.md | Formatting fixes and code fence language normalization. |
| wiki/_Sidebar.md | Add “Mining” section + links to quarry/module/trash pages; spacing tweaks. |
| tools/gradle-mcp/server.js | Add parsed build diagnostics + markdown_check tool; bump version. |
| tools/gen_textures.py | Generate quarry/trash/module textures and quarry GUI sprite. |
| tools/gen_bbmodels.py | Add quarry/trash/module bbmodel generation lists. |
| tools/fix_markdown.py | New script to auto-fix markdown_check-style violations. |
| tools/ecj.prefs | Improve null-annotation recognition + reduce noisy null warnings. |
| src/main/java/za/co/neroland/nerospace/Tuning.java | Add quarry buffer/fluid capacity/energy-per-block tuning hooks. |
| src/main/java/za/co/neroland/nerospace/storage/TrashCanBlockEntity.java | New Trash Can BE exposing item/fluid/gas transfer sinks. |
| src/main/java/za/co/neroland/nerospace/storage/TrashCanBlock.java | New Trash Can block + server ticker hookup. |
| src/main/java/za/co/neroland/nerospace/storage/FluidTankBlock.java | Update deprecated FluidUtil interaction path to handler overload. |
| src/main/java/za/co/neroland/nerospace/registry/ModMenuTypes.java | Register quarry controller menu type. |
| src/main/java/za/co/neroland/nerospace/registry/ModItems.java | Register quarry block items, trash can item, frame casing, and modules. |
| src/main/java/za/co/neroland/nerospace/registry/ModCreativeModeTabs.java | Expose quarry/module/trash content in creative tab. |
| src/main/java/za/co/neroland/nerospace/registry/ModCapabilities.java | Register quarry capabilities + trash-can item/fluid/gas capabilities. |
| src/main/java/za/co/neroland/nerospace/registry/ModBlocks.java | Register quarry controller/landmark/frame and trash can blocks. |
| src/main/java/za/co/neroland/nerospace/registry/ModBlockEntities.java | Register quarry controller/landmark and trash can block entities. |
| src/main/java/za/co/neroland/nerospace/NerospaceClient.java | Register quarry screen + quarry controller BE renderer. |
| src/main/java/za/co/neroland/nerospace/module/UpgradeModuleItem.java | New upgrade-module item wrapper with fixed ModuleType per item. |
| src/main/java/za/co/neroland/nerospace/module/ModuleType.java | New enum describing module types (speed/efficiency/fortune/silk). |
| src/main/java/za/co/neroland/nerospace/module/MachineModules.java | New reusable module-slot bank + aggregated effect computations. |
| src/main/java/za/co/neroland/nerospace/machine/quarry/QuarryRegion.java | New region discovery/representation derived from landmarks. |
| src/main/java/za/co/neroland/nerospace/machine/quarry/QuarryMenu.java | New menu/container for quarry slots + synced status data. |
| src/main/java/za/co/neroland/nerospace/machine/quarry/QuarryLandmarkBlockEntity.java | New cosmetic landmark BE for client particle “laser” effects. |
| src/main/java/za/co/neroland/nerospace/machine/quarry/QuarryLandmarkBlock.java | New landmark block + client ticker for cosmetic animation. |
| src/main/java/za/co/neroland/nerospace/machine/quarry/QuarryFrameBlock.java | New frame block type for recognition/skip logic + model codec. |
| src/main/java/za/co/neroland/nerospace/machine/quarry/QuarryControllerBlock.java | New quarry controller block + menu opening + server ticker hookup. |
| src/main/java/za/co/neroland/nerospace/machine/quarry/QuarryChunkLoader.java | Register TicketController for quarry chunk forcing. |
| src/main/java/za/co/neroland/nerospace/machine/quarry/PlanetMiningProfile.java | New per-dimension mining speed/yield profile lookup. |
| src/main/java/za/co/neroland/nerospace/machine/quarry/OutputFilter.java | New seam interface for future quarry output filtering. |
| src/main/java/za/co/neroland/nerospace/machine/quarry/MinerTier.java | New tier enum gating area/modules/speed and planet access. |
| src/main/java/za/co/neroland/nerospace/gametest/NerospaceGameTests.java | Suppress removal warning for mock ServerPlayer helper. |
| src/main/java/za/co/neroland/nerospace/datagen/ModRecipeProvider.java | Add recipes for quarry blocks, frame casing, modules, trash can. |
| src/main/java/za/co/neroland/nerospace/datagen/ModModelProvider.java | Generate models for quarry content + translucent quarry frame model. |
| src/main/java/za/co/neroland/nerospace/datagen/ModLanguageProvider.java | Add translations for quarry/modules/trash-can UI + blocks/items. |
| src/main/java/za/co/neroland/nerospace/datagen/ModBlockTagProvider.java | Tag quarry/trash blocks for pickaxe mining / tool requirements. |
| src/main/java/za/co/neroland/nerospace/datagen/ModBlockLootSubProvider.java | Add loot drops for quarry blocks and trash can (frame drops none). |
| src/main/java/za/co/neroland/nerospace/compat/jei/RefiningCategory.java | Adjust rocket fuel output .add call argument type. |
| src/main/java/za/co/neroland/nerospace/command/NerospaceCommands.java | Extend gallery builder with quarry landmark + operating quarry displays. |
| src/main/java/za/co/neroland/nerospace/client/QuarryScreen.java | New GUI screen for quarry controller. |
| src/main/java/za/co/neroland/nerospace/client/QuarryControllerRenderState.java | New render-state object for quarry controller BER. |
| src/main/java/za/co/neroland/nerospace/client/QuarryControllerRenderer.java | New renderer for gantry/drill-head visuals. |
| src/main/java/za/co/neroland/nerospace/client/GalleryCaptureHarness.java | Null-safety tweaks and add quarry capture shots. |
| src/generated/resources/data/nerospace/recipe/trash_can.json | Generated trash can crafting recipe. |
| src/generated/resources/data/nerospace/recipe/speed_module.json | Generated speed module crafting recipe. |
| src/generated/resources/data/nerospace/recipe/silk_touch_module.json | Generated silk touch module crafting recipe. |
| src/generated/resources/data/nerospace/recipe/quarry_landmark.json | Generated quarry landmark crafting recipe. |
| src/generated/resources/data/nerospace/recipe/quarry_controller.json | Generated quarry controller crafting recipe. |
| src/generated/resources/data/nerospace/recipe/frame_casing.json | Generated frame casing crafting recipe. |
| src/generated/resources/data/nerospace/recipe/fortune_module.json | Generated fortune module crafting recipe. |
| src/generated/resources/data/nerospace/recipe/efficiency_module.json | Generated efficiency module crafting recipe. |
| src/generated/resources/data/nerospace/loot_table/blocks/trash_can.json | Generated trash can block loot table. |
| src/generated/resources/data/nerospace/loot_table/blocks/quarry_landmark.json | Generated quarry landmark block loot table. |
| src/generated/resources/data/nerospace/loot_table/blocks/quarry_controller.json | Generated quarry controller block loot table. |
| src/generated/resources/data/nerospace/advancement/recipes/misc/trash_can.json | Generated recipe advancement for trash can. |
| src/generated/resources/data/nerospace/advancement/recipes/misc/speed_module.json | Generated recipe advancement for speed module. |
| src/generated/resources/data/nerospace/advancement/recipes/misc/silk_touch_module.json | Generated recipe advancement for silk touch module. |
| src/generated/resources/data/nerospace/advancement/recipes/misc/quarry_landmark.json | Generated recipe advancement for quarry landmark. |
| src/generated/resources/data/nerospace/advancement/recipes/misc/quarry_controller.json | Generated recipe advancement for quarry controller. |
| src/generated/resources/data/nerospace/advancement/recipes/misc/frame_casing.json | Generated recipe advancement for frame casing. |
| src/generated/resources/data/nerospace/advancement/recipes/misc/fortune_module.json | Generated recipe advancement for fortune module. |
| src/generated/resources/data/nerospace/advancement/recipes/misc/efficiency_module.json | Generated recipe advancement for efficiency module. |
| src/generated/resources/data/minecraft/tags/block/needs_iron_tool.json | Generated vanilla tag update to require iron tool for quarry controller. |
| src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json | Generated vanilla tag update to mine quarry/trash blocks with pickaxe. |
| src/generated/resources/assets/nerospace/models/item/speed_module.json | Generated item model for speed module. |
| src/generated/resources/assets/nerospace/models/item/silk_touch_module.json | Generated item model for silk touch module. |
| src/generated/resources/assets/nerospace/models/item/frame_casing.json | Generated item model for frame casing. |
| src/generated/resources/assets/nerospace/models/item/fortune_module.json | Generated item model for fortune module. |
| src/generated/resources/assets/nerospace/models/item/efficiency_module.json | Generated item model for efficiency module. |
| src/generated/resources/assets/nerospace/models/block/trash_can.json | Generated block model for trash can. |
| src/generated/resources/assets/nerospace/models/block/quarry_landmark.json | Generated block model for quarry landmark. |
| src/generated/resources/assets/nerospace/models/block/quarry_frame.json | Generated block model for quarry frame (AO off). |
| src/generated/resources/assets/nerospace/models/block/quarry_controller.json | Generated block model for quarry controller. |
| src/generated/resources/assets/nerospace/lang/en_us.json | Generated language keys for quarry/modules/trash can. |
| src/generated/resources/assets/nerospace/items/trash_can.json | Generated item definition pointing to block model. |
| src/generated/resources/assets/nerospace/items/speed_module.json | Generated item definition pointing to item model. |
| src/generated/resources/assets/nerospace/items/silk_touch_module.json | Generated item definition pointing to item model. |
| src/generated/resources/assets/nerospace/items/quarry_landmark.json | Generated item definition pointing to block model. |
| src/generated/resources/assets/nerospace/items/quarry_controller.json | Generated item definition pointing to block model. |
| src/generated/resources/assets/nerospace/items/frame_casing.json | Generated item definition pointing to item model. |
| src/generated/resources/assets/nerospace/items/fortune_module.json | Generated item definition pointing to item model. |
| src/generated/resources/assets/nerospace/items/efficiency_module.json | Generated item definition pointing to item model. |
| src/generated/resources/assets/nerospace/blockstates/trash_can.json | Generated blockstate for trash can. |
| src/generated/resources/assets/nerospace/blockstates/quarry_landmark.json | Generated blockstate for quarry landmark. |
| src/generated/resources/assets/nerospace/blockstates/quarry_frame.json | Generated blockstate for quarry frame. |
| src/generated/resources/assets/nerospace/blockstates/quarry_controller.json | Generated blockstate for quarry controller. |
| RELEASE_CHECKLIST.md | Markdown formatting/spacing tweaks. |
| PRIVACY.md | Code fence language normalization. |
| art/blockbench/item/speed_module.bbmodel | Add Blockbench source model for speed module. |
| art/blockbench/item/silk_touch_module.bbmodel | Add Blockbench source model for silk touch module. |
| art/blockbench/item/frame_casing.bbmodel | Add Blockbench source model for frame casing. |
| art/blockbench/item/fortune_module.bbmodel | Add Blockbench source model for fortune module. |
| art/blockbench/item/efficiency_module.bbmodel | Add Blockbench source model for efficiency module. |
| art/blockbench/block/trash_can.bbmodel | Add Blockbench source model for trash can. |
| art/blockbench/block/quarry_landmark.bbmodel | Add Blockbench source model for quarry landmark. |
| art/blockbench/block/quarry_frame.bbmodel | Add Blockbench source model for quarry frame. |
| art/blockbench/block/quarry_controller.bbmodel | Add Blockbench source model for quarry controller. |
| .markdownlint.json | Disable MD036 to align repo lint preferences. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| Auto-fix the Markdown violations the gradle-mcp `markdown_check` tool reports, in place. | ||
|
|
||
| Companion to that linter: it applies the same markdownlint rule subset the repo's | ||
| .markdownlint.json leaves enabled, so `markdown_check` comes back clean afterwards. |
| /** | ||
| * Trash Can: a bottomless sink for every transferable layer. It exposes item, fluid and gas | ||
| * capabilities that accept anything inserted (by hopper or pipe) and then <b>void it</b>. Each layer | ||
| * is a high-capacity buffer that is emptied every server tick, so it always has room and never spills | ||
| * anything back out — there is no extraction surface, so nothing can be pulled out of it. | ||
| */ |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2bada9544c
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| public void setRemoved() { | ||
| if (this.level instanceof ServerLevel serverLevel) { | ||
| releaseForcedChunks(serverLevel); | ||
| removeFrame(serverLevel); | ||
| } |
There was a problem hiding this comment.
Avoid tearing down frames on chunk unload
If BlockEntity#setRemoved is invoked for a normal controller chunk unload, this removes the entire frame ring even though the controller block is still present and its saved frameIndex/state still assume the frame exists. A quarry that a player leaves and later revisits can therefore lose the casings/frame without being broken; move frame teardown to the actual block-removal path and keep unload cleanup limited to non-world-changing state.
Useful? React with 👍 / 👎.
| if (!level.hasChunk(cx, cz)) { | ||
| forceLoad(level, cx, cz); | ||
| changed = true; | ||
| break; // retry next tick once the chunk is in |
There was a problem hiding this comment.
Ticket chunks even when they are already loaded
Because the quarry only calls forceLoad when hasChunk is false, a quarry started while the player is nearby never creates tickets for the already-loaded region/controller chunks; once the player walks away, those chunks can unload and the controller stops ticking instead of continuing the dig. Take the force-load ticket for the relevant chunks regardless of current loaded state, not only after encountering an unloaded target.
Useful? React with 👍 / 👎.
| public ResourceHandler<ItemResource> getItemHandler() { | ||
| return this.items; | ||
| } |
There was a problem hiding this comment.
Expose only non-extractable trash handlers
This returns a normal MachineItemHandler as the trash can capability, so adjacent pipes configured to pull can extract items during the tick before tick() clears the buffer; the same pattern applies to the fluid/gas handlers below. That makes the trash can able to re-output resources it was supposed to void, so these capabilities should discard on insert or otherwise reject extraction.
Useful? React with 👍 / 👎.
Replace the old translucent cube frame with a real 3-D open structural frame: new model elements and a dedicated registerQuarryFrame data-gen method, updated quarry_frame texture generator, and model JSON now uses a SIDE texture. Make the controller always materialise perimeter frame blocks (skip only existing quarry frames) so the ring is visible regardless of terrain. Extend render state with an ItemStackRenderState and headSpin, and update the renderer to draw depth-tested lines for the moving gantry/shaft and render a spinning, full-bright item model as the drill head (with proper transforms and lighting). Update QuarryFrameBlock javadoc and wiki to reflect the new visual/behaviour changes.
Revamp quarry visuals and behaviour: add QUARRY_MINE_INTERVAL and throttle mining to one block per work cycle derived from tier/modules/planet speed; smooth client-side drill-head motion by tracking previous/current mined blocks and their timestamps. Replace spinning item-model head with textured 3D gantry and drill-bit rendering (entityCutout, custom geometry), expand render bounding box and enable off-screen rendering. Make frame placement/resumption more robust: avoid framing over controllers or block entities, pre-carve interior-only pits (leave frame columns), and stage gallery quarries via a new helper in the dev command. Improve chunk ticketing by pinning only the active dig chunk and releasing older tickets; stop tearing down the frame on chunk unload (move teardown to preRemoveSideEffects). Persist new mine tracking fields to save/load. Update quarry frame texture and texture generator script to new visual theme, and refresh wiki notes to document pacing, interior-only excavation, and chunk-loading behaviour.
Introduce a new "mining" chapter and quarry progression: adds four advancement JSONs (frame_casing, quarry_landmark, quarry_controller, upgrade_module), updates ModAdvancements to register the new advancement chain, and extends StarGuide to include the mining steps. Also add language entries (en_us.json / ModLanguageProvider) for the new chapter and guide steps. Documentation updated: clarify quarry behavior and framing/casing rules in Quarry-Controller.md and update Star-Guide.md chapter/step counts and mining chapter summary.
Use distinct textures for the quarry gantry and drill head in the renderer and update texture generation accordingly. QuarryControllerRenderer: remove unused RenderType import, add GANTRY_TEX and DRILL_TEX identifiers, and submit separate RenderTypes.entityCutout calls for gantry and drill. Assets: add quarry_gantry.png and quarry_drill.png and update quarry_frame.png. tools/gen_textures.py: factor common strut creation into _gen_quarry_strut, make gen_quarry_frame use the generic function, add gen_quarry_gantry and gen_quarry_drill, and invoke them from main so all three textures are generated.
Summary
Introduce a new quarry feature plus supporting modules and a trash can: added Java classes for quarry machine (controller, frame, landmark, controller BE, menu, renderer, render state, chunk loader, region, miner tiers, output filter, planet profiles), module registry and item classes, and trash can storage BE. Added generated resources (blockstates, models, item models, recipes, loot tables, advancements, tags, language entries) plus Blockbench model sources and textures. Updated datagen providers, registries, client code, tests, tools, and docs (wiki pages) to wire everything together. Also minor docs/format tweaks (.markdownlint, PRIVACY.md code fence, RELEASE_CHECKLIST formatting).
Related issue
Type of change
Checklist
./gradlew runData(if datagen changed) and./gradlew buildboth pass (BUILD SUCCESSFUL).Notes for reviewers