Skip to main content

steel_worldgen/structure/
mod.rs

1//! Structure start/reference tracking.
2//!
3//! Vanilla keeps two per-chunk maps: `structureStarts` (originating here) and
4//! `structuresReferences` (pointing at nearby origin chunks). The structure key
5//! is `Identifier` until a structure registry is added.
6
7use steel_registry::structure::StructureData;
8use steel_utils::random::legacy_random::LegacyRandom;
9
10mod box_octree;
11pub mod desert_pyramid;
12pub mod end_city;
13pub mod fortress;
14/// Structure piece generation context.
15pub mod generation;
16/// Structure placement/selection engine.
17pub mod generator;
18pub mod igloo;
19pub mod jigsaw;
20pub mod jungle_temple;
21pub mod mansion;
22pub mod mineshaft;
23pub mod nether_fossil;
24pub mod ocean_monument;
25pub mod ocean_ruin;
26mod piece;
27pub mod placement;
28pub mod ruined_portal;
29pub mod shipwreck;
30pub mod single_piece;
31/// Structure starts and references.
32pub mod start;
33pub mod stronghold;
34pub mod swamp_hut;
35/// Miscellaneous structure utility functions.
36pub mod utils;
37
38pub use piece::{
39    ProceduralPieceData, RuinedPortalProperties, StructureBlockIgnore, StructureMirror,
40    StructurePiece, StructurePiecePayload, TemplateMarkerHandling, TemplatePieceData,
41    TemplatePlacementAdjustment, TemplatePlacementClip, TemplatePostProcess, TemplateProcessorList,
42};
43
44pub use generation::{ColumnBlock, GenerationContext, GenerationStub, StructureGenerationContext};
45pub use generator::{
46    FixedStructureBiomeProvider, StructureBiomeProvider, StructureGenerator,
47    StructureGeneratorAssets, StructureLocateCandidate, StructureLocatePlacement,
48    StructureLocatePlan, squared_distance,
49};
50pub use start::{StructureReferenceMap, StructureReferenceSet, StructureStart, StructureStartMap};
51pub(crate) use utils::{make_oriented_piece_bounding_box, random_horizontal_direction};
52
53/// Vanilla's `Structure::findValidGenerationPoint`. Impls own their RNG order,
54/// collision checks, and biome check.
55pub trait Structure: Send + Sync {
56    /// `structure` carries registry data; per-set metadata stays in placement.
57    /// `rng` is a fresh `LegacyRandom` seeded with `setLargeFeatureSeed`.
58    fn find_generation_point(
59        &self,
60        ctx: &mut dyn StructureGenerationContext,
61        structure: &StructureData,
62        rng: &mut LegacyRandom,
63    ) -> Option<GenerationStub>;
64}