feat: Add meteor -> entities, assets, config#4
Conversation
Introduce a meteor event system: new entity and meteor-related classes, items and blocks, renderers, and networking. Adds generated assets (models, blockstates, item models, textures, language entries), loot table and tags for meteor blocks and alien materials, and updates mineable tag. Adds configurable meteor settings in Config (spawn pacing, distances, warning window, crater radius, etc.). Also includes data-gen and tooling updates for models/textures.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d8025a2d43
ℹ️ 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".
| int min = Math.max(0, Config.METEOR_MIN_DISTANCE.get()); | ||
| int max = Math.max(min + 1, Config.METEOR_MAX_DISTANCE.get()); | ||
| double angle = level.getRandom().nextDouble() * Math.PI * 2.0D; | ||
| double d = min + level.getRandom().nextDouble() * (max - min); |
There was a problem hiding this comment.
Keep natural meteor targets in ticking chunks
With the shipped defaults, this chooses targets 200–500 blocks from the anchor (12.5–31 chunks) and the code only calls getHeight before later spawning an entity; there is no chunk ticket/force-load path for the target. On servers with the default/common simulation distance, FallingMeteorEntity is spawned or moves into a non-ticking chunk, so onImpact never runs and the manager just drops the FALLING site after its timeout. Either choose a ticking target or hold a ticket until impact.
Useful? React with 👍 / 👎.
| if (!(event.getLevel() instanceof ServerLevel level) || !METEOR_DIMENSIONS.contains(level.dimension())) { | ||
| return; |
There was a problem hiding this comment.
Clear tracker state outside meteor dimensions
If a client has already received a present MeteorSyncPayload, then travels to any dimension excluded here (for example the station) while holding a tracker, this early return prevents the server from ever sending ABSENT; ClientMeteorTracker is a static cache updated only by this payload, so the action bar keeps pointing at the old meteor indefinitely. Send/trigger an ABSENT update for tracker holders in unsupported dimensions, or clear the client cache on dimension change.
Useful? React with 👍 / 👎.
Introduce Meteor Events support and documentation: add language strings and a new Star Guide chapter for meteor events; create advancement data for alien_fragment, alien_tech_scrap and alien_core; add a gallery meteor showcase shot and a buildMeteorSite helper in NerospaceCommands. Implement a frozen/gallery-only FallingMeteorEntity spawn method so a hovering meteor can be shown without falling. Update mod datagen (language/advancements), generated lang file, configuration docs and multiple wiki pages (Meteor Events, Meteor Rock, Meteor Core) and list new alien items in Items.md.
There was a problem hiding this comment.
Pull request overview
Adds a meteor event system to Nerospace, including server-side scheduling/persistence, a falling meteor entity that carves craters, loot-bearing meteor cores, client tracker UX, and the supporting assets/tags/config to integrate the feature into the mod.
Changes:
- Introduces server-side meteor scheduling + persistence (
MeteorEventManager,MeteorEvents) and a falling meteor entity that creates craters and spawns a loot core. - Adds new meteor blocks/items (meteor rock/core + alien loot + tracker/caller), client rendering, and a tracker action-bar readout fed by a new server→client payload.
- Updates config + datagen + generated resources (models, blockstates, lang, loot table, tags, mineable tag) and Blockbench/tooling inputs.
Reviewed changes
Copilot reviewed 47 out of 78 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| tools/gen_textures.py | Adds procedural texture generation for meteor/alien items and the falling meteor entity texture. |
| tools/gen_bbmodels.py | Registers new meteor/alien items/blocks for bbmodel tooling. |
| src/main/java/za/co/neroland/nerospace/registry/ModTags.java | Adds ALIEN_MATERIALS item tag key. |
| src/main/java/za/co/neroland/nerospace/registry/ModItems.java | Registers alien loot items, tracker/caller items, and meteor block items. |
| src/main/java/za/co/neroland/nerospace/registry/ModEntities.java | Registers the falling_meteor entity type. |
| src/main/java/za/co/neroland/nerospace/registry/ModCreativeModeTabs.java | Adds new meteor/alien content to the creative tab output. |
| src/main/java/za/co/neroland/nerospace/registry/ModBlocks.java | Registers meteor rock and meteor core blocks with properties. |
| src/main/java/za/co/neroland/nerospace/registry/ModBlockEntities.java | Registers the meteor core block entity type. |
| src/main/java/za/co/neroland/nerospace/network/ModNetwork.java | Registers MeteorSyncPayload client handler alongside existing payloads. |
| src/main/java/za/co/neroland/nerospace/network/MeteorSyncPayload.java | New server→client payload for nearest-meteor snapshot. |
| src/main/java/za/co/neroland/nerospace/NerospaceClient.java | Registers falling meteor renderer/layer; adds meteor tracker action-bar readout. |
| src/main/java/za/co/neroland/nerospace/meteor/MeteorSite.java | New tracked-site record model + codec. |
| src/main/java/za/co/neroland/nerospace/meteor/MeteorLoot.java | New deterministic loot rolling for meteor cores. |
| src/main/java/za/co/neroland/nerospace/meteor/MeteorEvents.java | New level tick hook to tick manager and sync tracker snapshots to holders. |
| src/main/java/za/co/neroland/nerospace/meteor/MeteorEventManager.java | New per-level SavedData manager to schedule/advance meteor sites. |
| src/main/java/za/co/neroland/nerospace/meteor/MeteorCoreBlockEntity.java | New BE storing rolled loot and dropping it on removal. |
| src/main/java/za/co/neroland/nerospace/meteor/MeteorCoreBlock.java | New BE-backed block for the loot core. |
| src/main/java/za/co/neroland/nerospace/meteor/MeteorCallerItem.java | New creative-only item to spawn a meteor at a clicked position. |
| src/main/java/za/co/neroland/nerospace/meteor/FallingMeteorEntity.java | New falling meteor entity: trail VFX + crater carving + loot core placement. |
| src/main/java/za/co/neroland/nerospace/datagen/ModModelProvider.java | Adds datagen model generation for meteor blocks and new items. |
| src/main/java/za/co/neroland/nerospace/datagen/ModLanguageProvider.java | Adds translation entries for new blocks/items/entity and tracker/caller messages. |
| src/main/java/za/co/neroland/nerospace/datagen/ModItemTagProvider.java | Populates alien_materials tag with the new loot items. |
| src/main/java/za/co/neroland/nerospace/datagen/ModBlockTagProvider.java | Adds meteor blocks to pickaxe-mineable tag generation. |
| src/main/java/za/co/neroland/nerospace/datagen/ModBlockLootSubProvider.java | Adds loot generation for meteor rock (core intentionally omitted). |
| src/main/java/za/co/neroland/nerospace/Config.java | Adds meteor pacing/targeting/crater/loot/debug config knobs. |
| src/main/java/za/co/neroland/nerospace/client/FallingMeteorRenderState.java | New render state for meteor tumbling. |
| src/main/java/za/co/neroland/nerospace/client/FallingMeteorRenderer.java | New renderer using submit pipeline for full-bright tumbling meteor. |
| src/main/java/za/co/neroland/nerospace/client/FallingMeteorModel.java | New simple Java-authored model (no Blockbench dependency). |
| src/main/java/za/co/neroland/nerospace/client/ClientMeteorTracker.java | New client-side snapshot holder for tracker UI, fed by payload. |
| src/generated/resources/data/nerospace/tags/item/alien_materials.json | Generated item tag values for alien materials. |
| src/generated/resources/data/nerospace/loot_table/blocks/meteor_rock.json | Generated loot table for meteor rock dropping itself. |
| src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json | Adds meteor blocks to vanilla pickaxe-mineable tag list. |
| src/generated/resources/assets/nerospace/models/item/meteor_tracker.json | Generated item model for meteor tracker. |
| src/generated/resources/assets/nerospace/models/item/meteor_caller.json | Generated item model for meteor caller. |
| src/generated/resources/assets/nerospace/models/item/alien_tech_scrap.json | Generated item model for alien tech scrap. |
| src/generated/resources/assets/nerospace/models/item/alien_fragment.json | Generated item model for alien fragment. |
| src/generated/resources/assets/nerospace/models/item/alien_core.json | Generated item model for alien core. |
| src/generated/resources/assets/nerospace/models/block/meteor_rock.json | Generated block model for meteor rock. |
| src/generated/resources/assets/nerospace/models/block/meteor_core.json | Generated block model for meteor core. |
| src/generated/resources/assets/nerospace/lang/en_us.json | Generated language updates for meteor/alien content. |
| src/generated/resources/assets/nerospace/items/meteor_tracker.json | Generated 1.21+ item definition for meteor tracker. |
| src/generated/resources/assets/nerospace/items/meteor_rock.json | Generated 1.21+ item definition for meteor rock. |
| src/generated/resources/assets/nerospace/items/meteor_core.json | Generated 1.21+ item definition for meteor core. |
| src/generated/resources/assets/nerospace/items/meteor_caller.json | Generated 1.21+ item definition for meteor caller. |
| src/generated/resources/assets/nerospace/items/alien_tech_scrap.json | Generated 1.21+ item definition for alien tech scrap. |
| src/generated/resources/assets/nerospace/items/alien_fragment.json | Generated 1.21+ item definition for alien fragment. |
| src/generated/resources/assets/nerospace/items/alien_core.json | Generated 1.21+ item definition for alien core. |
| src/generated/resources/assets/nerospace/blockstates/meteor_rock.json | Generated blockstate for meteor rock. |
| src/generated/resources/assets/nerospace/blockstates/meteor_core.json | Generated blockstate for meteor core. |
| art/blockbench/item/meteor_tracker.bbmodel | New Blockbench source for meteor tracker item art. |
| art/blockbench/item/meteor_caller.bbmodel | New Blockbench source for meteor caller item art. |
| art/blockbench/item/alien_tech_scrap.bbmodel | New Blockbench source for alien tech scrap item art. |
| art/blockbench/item/alien_fragment.bbmodel | New Blockbench source for alien fragment item art. |
| art/blockbench/item/alien_core.bbmodel | New Blockbench source for alien core item art. |
| art/blockbench/block/meteor_rock.bbmodel | New Blockbench source for meteor rock block art. |
| art/blockbench/block/meteor_core.bbmodel | New Blockbench source for meteor core block art. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| /** Flame + smoke trail, denser as the meteor nears the ground (client-side, per the design §4). */ | ||
| private void spawnTrail() { | ||
| double proximity = 1.0D - Math.min(1.0D, (getY() - this.targetY) / (double) FALL_HEIGHT); | ||
| int puffs = 2 + (int) (proximity * 4); |
| @Override | ||
| protected RenderShape getRenderShape(BlockState state) { | ||
| return RenderShape.MODEL; | ||
| } | ||
|
|
||
| @Override | ||
| public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { | ||
| return new MeteorCoreBlockEntity(pos, state); | ||
| } |
| BlockPos target = ClientMeteorTracker.pos(); | ||
| Vec3 p = mc.player.position(); |
| /** | ||
| * Client-side holder for the latest nearest-meteor snapshot (meteor-events design §6). Fed by | ||
| * {@link MeteorSyncPayload}; read by the tracker readout in {@code NerospaceClient.onClientTick}. | ||
| */ |
| public static List<ItemStack> roll(RandomSource rng, int bonusRolls) { | ||
| List<ItemStack> out = new ArrayList<>(); | ||
| // Guaranteed: a handful of alien fragments — every meteor seeds the scanner economy. | ||
| out.add(new ItemStack(ModItems.ALIEN_FRAGMENT.get(), 3 + rng.nextInt(4))); | ||
|
|
Normalize end-of-file/newline and minor formatting in GalleryCaptureHarness.java and NerospaceCommands.java. No functional changes — only whitespace/EOL adjustments to ensure consistent file endings and formatting.
Introduce a meteor event system: new entity and meteor-related classes, items and blocks, renderers, and networking. Adds generated assets (models, blockstates, item models, textures, language entries), loot table and tags for meteor blocks and alien materials, and updates mineable tag. Adds configurable meteor settings in Config (spawn pacing, distances, warning window, crater radius, etc.). Also includes data-gen and tooling updates for models/textures.
Summary
Related issue
Type of change
Checklist
./gradlew runData(if datagen changed) and./gradlew buildboth pass (BUILD SUCCESSFUL).Notes for reviewers