mirror of
https://github.com/Pumpkin-MC/Pumpkin.git
synced 2026-08-30 20:14:23 +00:00
* Add /place template command with BlockPlacer trait and tab-completion support - Add BlockPlacer trait to abstract block placement over ProtoChunk (worldgen) and WorldBlockPlacer (live command), used by place_template() - Implement BlockPlacer for ProtoChunk (pumpkin-world) and WorldBlockPlacer (pumpkin crate) - Add World::queue_block_updates() to insert into unsent_block_changes without triggering full set_block_state callbacks - Generate _generated_all_template_names() at build time from structure assets for use in tab-completion suggestions - Add TemplateNameArgumentType for the new command system with list_suggestions() using all_template_names() - Implement /place template <template> [pos] in the new command system (CommandDispatcher, CommandExecutor, ArgumentBuilder) - Fix borrow-across-await: clone template name to owned String early * feat: add /place structure and /place jigsaw commands Adds /place structure <id> [pos] for all structure types with two placement paths: - Jigsaw structures (ancient_city, bastion_remnant, etc.): fast path using JigsawPlacement::add_pieces directly at the target position - Non-jigsaw structures (desert_pyramid, end_city, etc.): generate pieces via dispatch, place into synthetic ProtoChunks with pre-seeded heightmaps and a stone floor so pieces can detect terrain, then delta-apply only changed blocks to the world via WorldBlockPlacer Also adds /place jigsaw <pool> <target> <depth> [pos] for manual jigsaw template placement. Architecture: - generate_structure_position() extracts the shared generator dispatch from try_generate_structure / lazily_generate_structure (both now delegate to it, eliminating ~150 lines of duplicated match arms) - place_pool_element_templates() extracted from PoolElementStructurePiece for reuse by the command with WorldBlockPlacer - StructureKeys gains from_name()/to_name()/all_names() via codegen - StructureNameArgumentType and PoolNameArgumentType for tab-completion - flat_ocean_floor_height_map made pub in ProtoChunk for heightmap seeding * feat: add /place feature command Adds /place feature <feature> [pos] for placing configured features at a specific position. Resolves the PlacedFeature name via from_name(), resolves the inner ConfiguredFeature from PLACED_FEATURES / CONFIGURED_FEATURES, then calls ConfiguredFeature::generate() directly at the target position -- skipping placement modifiers so the feature appears exactly where specified. Also adds /place structure improvements: - Synthetic chunk terrain fill: stone below surface + grass on top, so pieces that carve through solid terrain (stronghold corridors, etc.) find material to work with. Snapshot/delta ensures only structure blocks reach the world. - Shared snapshot_blocks() and apply_delta() helpers eliminate ~30 lines of duplicated diff logic between structure and feature paths. - ground_y() and chunk_population_seed() helpers replace magic numbers. - Structure success message now reports the structure name instead of the piece count. Infrastructure: - PlacedFeature::all_names() generated via pumpkin-codegen for tab-completion suggestions in PlacedFeatureNameArgumentType. - GenerationCache trait implemented for ProtoChunk (single-chunk delegation) so ConfiguredFeature::generate() works without the full chunk-generation cache system. - flat_ocean_floor_height_map made pub in ProtoChunk for heightmap seeding. - configured_features and feature modules made pub for access from the command crate. * fix(command): use world settings for place * docs(place): clarify synthetic terrain delta behavior