Skip to content

feat: Add meteor -> entities, assets, config#4

Open
Dario-Maselli wants to merge 4 commits into
feature/solar-panelsfrom
feature/world-events
Open

feat: Add meteor -> entities, assets, config#4
Dario-Maselli wants to merge 4 commits into
feature/solar-panelsfrom
feature/world-events

Conversation

@Dario-Maselli

Copy link
Copy Markdown
Member

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

  • 🐞 Bug fix
  • ✨ New feature / content
  • 🎨 Assets / textures / models
  • 🧹 Refactor / cleanup
  • 📖 Docs

Checklist

  • ./gradlew runData (if datagen changed) and ./gradlew build both pass (BUILD SUCCESSFUL).
  • New blocks/items have models + textures (or are intentionally placeholder).
  • No new compiler warnings.
  • I understand the project is All Rights Reserved and have the right to contribute this code.

Notes for reviewers

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.
Copilot AI review requested due to automatic review settings June 16, 2026 08:15

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment on lines +189 to +192
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);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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 👍 / 👎.

Comment on lines +43 to +44
if (!(event.getLevel() instanceof ServerLevel level) || !METEOR_DIMENSIONS.contains(level.dimension())) {
return;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment on lines +119 to +122
/** 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);
Comment on lines +30 to +38
@Override
protected RenderShape getRenderShape(BlockState state) {
return RenderShape.MODEL;
}

@Override
public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
return new MeteorCoreBlockEntity(pos, state);
}
Comment on lines +362 to +363
BlockPos target = ClientMeteorTracker.pos();
Vec3 p = mc.player.position();
Comment on lines +9 to +12
/**
* 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}.
*/
Comment on lines +52 to +56
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants