1use crate::structure::{
2 DimensionPadding, HeightProviderData, JigsawConfig, LiquidSettingsData, MineshaftTypeData,
3 OceanRuinBiomeTempData, PoolAlias, RuinedPortalPlacementData, RuinedPortalSetupData,
4 StartHeight, StructureConfigData, StructureData, StructureGenerationStep, StructureRef,
5 StructureRegistry, StructureSpawnBoundingBox, StructureSpawnOverrideData, StructureSpawnerData,
6 TerrainAdjustment, VerticalAnchorData,
7};
8use std::sync::{LazyLock, OnceLock};
9use steel_utils::Identifier;
10static STRUCTURE_ANCIENT_CITY: LazyLock<StructureData> = LazyLock::new(|| StructureData {
11 key: Identifier::new("minecraft", "ancient_city"),
12 id: OnceLock::new(),
13 structure_type: Identifier::new("minecraft", "jigsaw"),
14 allowed_biomes: vec![Identifier::new("minecraft", "deep_dark")],
15 spawn_overrides: vec![
16 StructureSpawnOverrideData {
17 category: "water_creature".to_string(),
18 bounding_box: StructureSpawnBoundingBox::Full,
19 spawns: vec![],
20 },
21 StructureSpawnOverrideData {
22 category: "misc".to_string(),
23 bounding_box: StructureSpawnBoundingBox::Full,
24 spawns: vec![],
25 },
26 StructureSpawnOverrideData {
27 category: "axolotls".to_string(),
28 bounding_box: StructureSpawnBoundingBox::Full,
29 spawns: vec![],
30 },
31 StructureSpawnOverrideData {
32 category: "creature".to_string(),
33 bounding_box: StructureSpawnBoundingBox::Full,
34 spawns: vec![],
35 },
36 StructureSpawnOverrideData {
37 category: "monster".to_string(),
38 bounding_box: StructureSpawnBoundingBox::Full,
39 spawns: vec![],
40 },
41 StructureSpawnOverrideData {
42 category: "ambient".to_string(),
43 bounding_box: StructureSpawnBoundingBox::Full,
44 spawns: vec![],
45 },
46 StructureSpawnOverrideData {
47 category: "water_ambient".to_string(),
48 bounding_box: StructureSpawnBoundingBox::Full,
49 spawns: vec![],
50 },
51 StructureSpawnOverrideData {
52 category: "underground_water_creature".to_string(),
53 bounding_box: StructureSpawnBoundingBox::Full,
54 spawns: vec![],
55 },
56 ],
57 step: StructureGenerationStep::UndergroundDecoration,
58 terrain_adjustment: TerrainAdjustment::BeardBox,
59 config: StructureConfigData::Jigsaw(JigsawConfig {
60 start_pool: Identifier::new("minecraft", "ancient_city/city_center"),
61 max_depth: 7i32,
62 use_expansion_hack: false,
63 project_start_to_heightmap: None,
64 start_height: StartHeight::Constant(-27i32),
65 max_distance_from_center: 116i32,
66 start_jigsaw_name: Some(Identifier::new("minecraft", "city_anchor")),
67 dimension_padding: DimensionPadding {
68 bottom: 0i32,
69 top: 0i32,
70 },
71 pool_aliases: vec![],
72 liquid_settings: LiquidSettingsData::ApplyWaterlogging,
73 }),
74});
75static STRUCTURE_BASTION_REMNANT: LazyLock<StructureData> = LazyLock::new(|| StructureData {
76 key: Identifier::new("minecraft", "bastion_remnant"),
77 id: OnceLock::new(),
78 structure_type: Identifier::new("minecraft", "jigsaw"),
79 allowed_biomes: vec![
80 Identifier::new("minecraft", "crimson_forest"),
81 Identifier::new("minecraft", "nether_wastes"),
82 Identifier::new("minecraft", "soul_sand_valley"),
83 Identifier::new("minecraft", "warped_forest"),
84 ],
85 spawn_overrides: vec![],
86 step: StructureGenerationStep::SurfaceStructures,
87 terrain_adjustment: TerrainAdjustment::None,
88 config: StructureConfigData::Jigsaw(JigsawConfig {
89 start_pool: Identifier::new("minecraft", "bastion/starts"),
90 max_depth: 6i32,
91 use_expansion_hack: false,
92 project_start_to_heightmap: None,
93 start_height: StartHeight::Constant(33i32),
94 max_distance_from_center: 80i32,
95 start_jigsaw_name: None,
96 dimension_padding: DimensionPadding {
97 bottom: 0i32,
98 top: 0i32,
99 },
100 pool_aliases: vec![],
101 liquid_settings: LiquidSettingsData::ApplyWaterlogging,
102 }),
103});
104static STRUCTURE_BURIED_TREASURE: LazyLock<StructureData> = LazyLock::new(|| StructureData {
105 key: Identifier::new("minecraft", "buried_treasure"),
106 id: OnceLock::new(),
107 structure_type: Identifier::new("minecraft", "buried_treasure"),
108 allowed_biomes: vec![
109 Identifier::new("minecraft", "beach"),
110 Identifier::new("minecraft", "snowy_beach"),
111 ],
112 spawn_overrides: vec![],
113 step: StructureGenerationStep::UndergroundStructures,
114 terrain_adjustment: TerrainAdjustment::None,
115 config: StructureConfigData::Empty,
116});
117static STRUCTURE_DESERT_PYRAMID: LazyLock<StructureData> = LazyLock::new(|| StructureData {
118 key: Identifier::new("minecraft", "desert_pyramid"),
119 id: OnceLock::new(),
120 structure_type: Identifier::new("minecraft", "desert_pyramid"),
121 allowed_biomes: vec![Identifier::new("minecraft", "desert")],
122 spawn_overrides: vec![],
123 step: StructureGenerationStep::SurfaceStructures,
124 terrain_adjustment: TerrainAdjustment::None,
125 config: StructureConfigData::Empty,
126});
127static STRUCTURE_END_CITY: LazyLock<StructureData> = LazyLock::new(|| StructureData {
128 key: Identifier::new("minecraft", "end_city"),
129 id: OnceLock::new(),
130 structure_type: Identifier::new("minecraft", "end_city"),
131 allowed_biomes: vec![
132 Identifier::new("minecraft", "end_highlands"),
133 Identifier::new("minecraft", "end_midlands"),
134 ],
135 spawn_overrides: vec![],
136 step: StructureGenerationStep::SurfaceStructures,
137 terrain_adjustment: TerrainAdjustment::None,
138 config: StructureConfigData::Empty,
139});
140static STRUCTURE_FORTRESS: LazyLock<StructureData> = LazyLock::new(|| StructureData {
141 key: Identifier::new("minecraft", "fortress"),
142 id: OnceLock::new(),
143 structure_type: Identifier::new("minecraft", "fortress"),
144 allowed_biomes: vec![
145 Identifier::new("minecraft", "basalt_deltas"),
146 Identifier::new("minecraft", "crimson_forest"),
147 Identifier::new("minecraft", "nether_wastes"),
148 Identifier::new("minecraft", "soul_sand_valley"),
149 Identifier::new("minecraft", "warped_forest"),
150 ],
151 spawn_overrides: vec![StructureSpawnOverrideData {
152 category: "monster".to_string(),
153 bounding_box: StructureSpawnBoundingBox::Piece,
154 spawns: vec![
155 StructureSpawnerData {
156 entity_type: Identifier::new("minecraft", "blaze"),
157 weight: 10i32,
158 min_count: 2i32,
159 max_count: 3i32,
160 },
161 StructureSpawnerData {
162 entity_type: Identifier::new("minecraft", "zombified_piglin"),
163 weight: 5i32,
164 min_count: 4i32,
165 max_count: 4i32,
166 },
167 StructureSpawnerData {
168 entity_type: Identifier::new("minecraft", "wither_skeleton"),
169 weight: 8i32,
170 min_count: 5i32,
171 max_count: 5i32,
172 },
173 StructureSpawnerData {
174 entity_type: Identifier::new("minecraft", "skeleton"),
175 weight: 2i32,
176 min_count: 5i32,
177 max_count: 5i32,
178 },
179 StructureSpawnerData {
180 entity_type: Identifier::new("minecraft", "magma_cube"),
181 weight: 3i32,
182 min_count: 4i32,
183 max_count: 4i32,
184 },
185 ],
186 }],
187 step: StructureGenerationStep::UndergroundDecoration,
188 terrain_adjustment: TerrainAdjustment::None,
189 config: StructureConfigData::Empty,
190});
191static STRUCTURE_IGLOO: LazyLock<StructureData> = LazyLock::new(|| StructureData {
192 key: Identifier::new("minecraft", "igloo"),
193 id: OnceLock::new(),
194 structure_type: Identifier::new("minecraft", "igloo"),
195 allowed_biomes: vec![
196 Identifier::new("minecraft", "snowy_plains"),
197 Identifier::new("minecraft", "snowy_slopes"),
198 Identifier::new("minecraft", "snowy_taiga"),
199 ],
200 spawn_overrides: vec![],
201 step: StructureGenerationStep::SurfaceStructures,
202 terrain_adjustment: TerrainAdjustment::None,
203 config: StructureConfigData::Empty,
204});
205static STRUCTURE_JUNGLE_PYRAMID: LazyLock<StructureData> = LazyLock::new(|| StructureData {
206 key: Identifier::new("minecraft", "jungle_pyramid"),
207 id: OnceLock::new(),
208 structure_type: Identifier::new("minecraft", "jungle_temple"),
209 allowed_biomes: vec![
210 Identifier::new("minecraft", "bamboo_jungle"),
211 Identifier::new("minecraft", "jungle"),
212 ],
213 spawn_overrides: vec![],
214 step: StructureGenerationStep::SurfaceStructures,
215 terrain_adjustment: TerrainAdjustment::None,
216 config: StructureConfigData::Empty,
217});
218static STRUCTURE_MANSION: LazyLock<StructureData> = LazyLock::new(|| StructureData {
219 key: Identifier::new("minecraft", "mansion"),
220 id: OnceLock::new(),
221 structure_type: Identifier::new("minecraft", "woodland_mansion"),
222 allowed_biomes: vec![
223 Identifier::new("minecraft", "dark_forest"),
224 Identifier::new("minecraft", "pale_garden"),
225 ],
226 spawn_overrides: vec![],
227 step: StructureGenerationStep::SurfaceStructures,
228 terrain_adjustment: TerrainAdjustment::None,
229 config: StructureConfigData::Empty,
230});
231static STRUCTURE_MINESHAFT: LazyLock<StructureData> = LazyLock::new(|| StructureData {
232 key: Identifier::new("minecraft", "mineshaft"),
233 id: OnceLock::new(),
234 structure_type: Identifier::new("minecraft", "mineshaft"),
235 allowed_biomes: vec![
236 Identifier::new("minecraft", "bamboo_jungle"),
237 Identifier::new("minecraft", "beach"),
238 Identifier::new("minecraft", "birch_forest"),
239 Identifier::new("minecraft", "cherry_grove"),
240 Identifier::new("minecraft", "cold_ocean"),
241 Identifier::new("minecraft", "dark_forest"),
242 Identifier::new("minecraft", "deep_cold_ocean"),
243 Identifier::new("minecraft", "deep_frozen_ocean"),
244 Identifier::new("minecraft", "deep_lukewarm_ocean"),
245 Identifier::new("minecraft", "deep_ocean"),
246 Identifier::new("minecraft", "desert"),
247 Identifier::new("minecraft", "dripstone_caves"),
248 Identifier::new("minecraft", "flower_forest"),
249 Identifier::new("minecraft", "forest"),
250 Identifier::new("minecraft", "frozen_ocean"),
251 Identifier::new("minecraft", "frozen_peaks"),
252 Identifier::new("minecraft", "frozen_river"),
253 Identifier::new("minecraft", "grove"),
254 Identifier::new("minecraft", "ice_spikes"),
255 Identifier::new("minecraft", "jagged_peaks"),
256 Identifier::new("minecraft", "jungle"),
257 Identifier::new("minecraft", "lukewarm_ocean"),
258 Identifier::new("minecraft", "lush_caves"),
259 Identifier::new("minecraft", "mangrove_swamp"),
260 Identifier::new("minecraft", "meadow"),
261 Identifier::new("minecraft", "mushroom_fields"),
262 Identifier::new("minecraft", "ocean"),
263 Identifier::new("minecraft", "old_growth_birch_forest"),
264 Identifier::new("minecraft", "old_growth_pine_taiga"),
265 Identifier::new("minecraft", "old_growth_spruce_taiga"),
266 Identifier::new("minecraft", "pale_garden"),
267 Identifier::new("minecraft", "plains"),
268 Identifier::new("minecraft", "river"),
269 Identifier::new("minecraft", "savanna"),
270 Identifier::new("minecraft", "savanna_plateau"),
271 Identifier::new("minecraft", "snowy_beach"),
272 Identifier::new("minecraft", "snowy_plains"),
273 Identifier::new("minecraft", "snowy_slopes"),
274 Identifier::new("minecraft", "snowy_taiga"),
275 Identifier::new("minecraft", "sparse_jungle"),
276 Identifier::new("minecraft", "stony_peaks"),
277 Identifier::new("minecraft", "stony_shore"),
278 Identifier::new("minecraft", "sunflower_plains"),
279 Identifier::new("minecraft", "swamp"),
280 Identifier::new("minecraft", "taiga"),
281 Identifier::new("minecraft", "warm_ocean"),
282 Identifier::new("minecraft", "windswept_forest"),
283 Identifier::new("minecraft", "windswept_gravelly_hills"),
284 Identifier::new("minecraft", "windswept_hills"),
285 Identifier::new("minecraft", "windswept_savanna"),
286 ],
287 spawn_overrides: vec![],
288 step: StructureGenerationStep::UndergroundStructures,
289 terrain_adjustment: TerrainAdjustment::None,
290 config: StructureConfigData::Mineshaft {
291 mineshaft_type: MineshaftTypeData::Normal,
292 },
293});
294static STRUCTURE_MINESHAFT_MESA: LazyLock<StructureData> = LazyLock::new(|| StructureData {
295 key: Identifier::new("minecraft", "mineshaft_mesa"),
296 id: OnceLock::new(),
297 structure_type: Identifier::new("minecraft", "mineshaft"),
298 allowed_biomes: vec![
299 Identifier::new("minecraft", "badlands"),
300 Identifier::new("minecraft", "eroded_badlands"),
301 Identifier::new("minecraft", "wooded_badlands"),
302 ],
303 spawn_overrides: vec![],
304 step: StructureGenerationStep::UndergroundStructures,
305 terrain_adjustment: TerrainAdjustment::None,
306 config: StructureConfigData::Mineshaft {
307 mineshaft_type: MineshaftTypeData::Mesa,
308 },
309});
310static STRUCTURE_MONUMENT: LazyLock<StructureData> = LazyLock::new(|| StructureData {
311 key: Identifier::new("minecraft", "monument"),
312 id: OnceLock::new(),
313 structure_type: Identifier::new("minecraft", "ocean_monument"),
314 allowed_biomes: vec![
315 Identifier::new("minecraft", "deep_cold_ocean"),
316 Identifier::new("minecraft", "deep_frozen_ocean"),
317 Identifier::new("minecraft", "deep_lukewarm_ocean"),
318 Identifier::new("minecraft", "deep_ocean"),
319 ],
320 spawn_overrides: vec![
321 StructureSpawnOverrideData {
322 category: "monster".to_string(),
323 bounding_box: StructureSpawnBoundingBox::Full,
324 spawns: vec![StructureSpawnerData {
325 entity_type: Identifier::new("minecraft", "guardian"),
326 weight: 1i32,
327 min_count: 2i32,
328 max_count: 4i32,
329 }],
330 },
331 StructureSpawnOverrideData {
332 category: "axolotls".to_string(),
333 bounding_box: StructureSpawnBoundingBox::Full,
334 spawns: vec![],
335 },
336 StructureSpawnOverrideData {
337 category: "underground_water_creature".to_string(),
338 bounding_box: StructureSpawnBoundingBox::Full,
339 spawns: vec![],
340 },
341 ],
342 step: StructureGenerationStep::SurfaceStructures,
343 terrain_adjustment: TerrainAdjustment::None,
344 config: StructureConfigData::Empty,
345});
346static STRUCTURE_NETHER_FOSSIL: LazyLock<StructureData> = LazyLock::new(|| StructureData {
347 key: Identifier::new("minecraft", "nether_fossil"),
348 id: OnceLock::new(),
349 structure_type: Identifier::new("minecraft", "nether_fossil"),
350 allowed_biomes: vec![Identifier::new("minecraft", "soul_sand_valley")],
351 spawn_overrides: vec![],
352 step: StructureGenerationStep::UndergroundDecoration,
353 terrain_adjustment: TerrainAdjustment::BeardThin,
354 config: StructureConfigData::NetherFossil {
355 height: HeightProviderData::Uniform {
356 min_inclusive: VerticalAnchorData::Absolute(32i32),
357 max_inclusive: VerticalAnchorData::BelowTop(2i32),
358 },
359 },
360});
361static STRUCTURE_OCEAN_RUIN_COLD: LazyLock<StructureData> = LazyLock::new(|| StructureData {
362 key: Identifier::new("minecraft", "ocean_ruin_cold"),
363 id: OnceLock::new(),
364 structure_type: Identifier::new("minecraft", "ocean_ruin"),
365 allowed_biomes: vec![
366 Identifier::new("minecraft", "cold_ocean"),
367 Identifier::new("minecraft", "deep_cold_ocean"),
368 Identifier::new("minecraft", "deep_frozen_ocean"),
369 Identifier::new("minecraft", "deep_ocean"),
370 Identifier::new("minecraft", "frozen_ocean"),
371 Identifier::new("minecraft", "ocean"),
372 ],
373 spawn_overrides: vec![],
374 step: StructureGenerationStep::SurfaceStructures,
375 terrain_adjustment: TerrainAdjustment::None,
376 config: StructureConfigData::OceanRuin {
377 biome_temp: OceanRuinBiomeTempData::Cold,
378 large_probability: 0.3f32,
379 cluster_probability: 0.9f32,
380 },
381});
382static STRUCTURE_OCEAN_RUIN_WARM: LazyLock<StructureData> = LazyLock::new(|| StructureData {
383 key: Identifier::new("minecraft", "ocean_ruin_warm"),
384 id: OnceLock::new(),
385 structure_type: Identifier::new("minecraft", "ocean_ruin"),
386 allowed_biomes: vec![
387 Identifier::new("minecraft", "deep_lukewarm_ocean"),
388 Identifier::new("minecraft", "lukewarm_ocean"),
389 Identifier::new("minecraft", "warm_ocean"),
390 ],
391 spawn_overrides: vec![],
392 step: StructureGenerationStep::SurfaceStructures,
393 terrain_adjustment: TerrainAdjustment::None,
394 config: StructureConfigData::OceanRuin {
395 biome_temp: OceanRuinBiomeTempData::Warm,
396 large_probability: 0.3f32,
397 cluster_probability: 0.9f32,
398 },
399});
400static STRUCTURE_PILLAGER_OUTPOST: LazyLock<StructureData> = LazyLock::new(|| StructureData {
401 key: Identifier::new("minecraft", "pillager_outpost"),
402 id: OnceLock::new(),
403 structure_type: Identifier::new("minecraft", "jigsaw"),
404 allowed_biomes: vec![
405 Identifier::new("minecraft", "cherry_grove"),
406 Identifier::new("minecraft", "desert"),
407 Identifier::new("minecraft", "frozen_peaks"),
408 Identifier::new("minecraft", "grove"),
409 Identifier::new("minecraft", "jagged_peaks"),
410 Identifier::new("minecraft", "meadow"),
411 Identifier::new("minecraft", "plains"),
412 Identifier::new("minecraft", "savanna"),
413 Identifier::new("minecraft", "snowy_plains"),
414 Identifier::new("minecraft", "snowy_slopes"),
415 Identifier::new("minecraft", "stony_peaks"),
416 Identifier::new("minecraft", "taiga"),
417 ],
418 spawn_overrides: vec![StructureSpawnOverrideData {
419 category: "monster".to_string(),
420 bounding_box: StructureSpawnBoundingBox::Full,
421 spawns: vec![StructureSpawnerData {
422 entity_type: Identifier::new("minecraft", "pillager"),
423 weight: 1i32,
424 min_count: 1i32,
425 max_count: 1i32,
426 }],
427 }],
428 step: StructureGenerationStep::SurfaceStructures,
429 terrain_adjustment: TerrainAdjustment::BeardThin,
430 config: StructureConfigData::Jigsaw(JigsawConfig {
431 start_pool: Identifier::new("minecraft", "pillager_outpost/base_plates"),
432 max_depth: 7i32,
433 use_expansion_hack: true,
434 project_start_to_heightmap: Some("WORLD_SURFACE_WG".to_string()),
435 start_height: StartHeight::Constant(0i32),
436 max_distance_from_center: 80i32,
437 start_jigsaw_name: None,
438 dimension_padding: DimensionPadding {
439 bottom: 0i32,
440 top: 0i32,
441 },
442 pool_aliases: vec![],
443 liquid_settings: LiquidSettingsData::ApplyWaterlogging,
444 }),
445});
446static STRUCTURE_RUINED_PORTAL: LazyLock<StructureData> = LazyLock::new(|| StructureData {
447 key: Identifier::new("minecraft", "ruined_portal"),
448 id: OnceLock::new(),
449 structure_type: Identifier::new("minecraft", "ruined_portal"),
450 allowed_biomes: vec![
451 Identifier::new("minecraft", "beach"),
452 Identifier::new("minecraft", "birch_forest"),
453 Identifier::new("minecraft", "dark_forest"),
454 Identifier::new("minecraft", "dripstone_caves"),
455 Identifier::new("minecraft", "flower_forest"),
456 Identifier::new("minecraft", "forest"),
457 Identifier::new("minecraft", "frozen_river"),
458 Identifier::new("minecraft", "grove"),
459 Identifier::new("minecraft", "ice_spikes"),
460 Identifier::new("minecraft", "lush_caves"),
461 Identifier::new("minecraft", "mushroom_fields"),
462 Identifier::new("minecraft", "old_growth_birch_forest"),
463 Identifier::new("minecraft", "old_growth_pine_taiga"),
464 Identifier::new("minecraft", "old_growth_spruce_taiga"),
465 Identifier::new("minecraft", "pale_garden"),
466 Identifier::new("minecraft", "plains"),
467 Identifier::new("minecraft", "river"),
468 Identifier::new("minecraft", "savanna"),
469 Identifier::new("minecraft", "snowy_beach"),
470 Identifier::new("minecraft", "snowy_plains"),
471 Identifier::new("minecraft", "snowy_taiga"),
472 Identifier::new("minecraft", "sunflower_plains"),
473 Identifier::new("minecraft", "taiga"),
474 ],
475 spawn_overrides: vec![],
476 step: StructureGenerationStep::SurfaceStructures,
477 terrain_adjustment: TerrainAdjustment::None,
478 config: StructureConfigData::RuinedPortal {
479 setups: vec![
480 RuinedPortalSetupData {
481 placement: RuinedPortalPlacementData::Underground,
482 weight: 0.5f32,
483 air_pocket_probability: 1f32,
484 can_be_cold: true,
485 mossiness: 0.2f32,
486 overgrown: false,
487 replace_with_blackstone: false,
488 vines: false,
489 },
490 RuinedPortalSetupData {
491 placement: RuinedPortalPlacementData::OnLandSurface,
492 weight: 0.5f32,
493 air_pocket_probability: 0.5f32,
494 can_be_cold: true,
495 mossiness: 0.2f32,
496 overgrown: false,
497 replace_with_blackstone: false,
498 vines: false,
499 },
500 ],
501 },
502});
503static STRUCTURE_RUINED_PORTAL_DESERT: LazyLock<StructureData> = LazyLock::new(|| StructureData {
504 key: Identifier::new("minecraft", "ruined_portal_desert"),
505 id: OnceLock::new(),
506 structure_type: Identifier::new("minecraft", "ruined_portal"),
507 allowed_biomes: vec![Identifier::new("minecraft", "desert")],
508 spawn_overrides: vec![],
509 step: StructureGenerationStep::SurfaceStructures,
510 terrain_adjustment: TerrainAdjustment::None,
511 config: StructureConfigData::RuinedPortal {
512 setups: vec![RuinedPortalSetupData {
513 placement: RuinedPortalPlacementData::PartlyBuried,
514 weight: 1f32,
515 air_pocket_probability: 0f32,
516 can_be_cold: false,
517 mossiness: 0f32,
518 overgrown: false,
519 replace_with_blackstone: false,
520 vines: false,
521 }],
522 },
523});
524static STRUCTURE_RUINED_PORTAL_JUNGLE: LazyLock<StructureData> = LazyLock::new(|| StructureData {
525 key: Identifier::new("minecraft", "ruined_portal_jungle"),
526 id: OnceLock::new(),
527 structure_type: Identifier::new("minecraft", "ruined_portal"),
528 allowed_biomes: vec![
529 Identifier::new("minecraft", "bamboo_jungle"),
530 Identifier::new("minecraft", "jungle"),
531 Identifier::new("minecraft", "sparse_jungle"),
532 ],
533 spawn_overrides: vec![],
534 step: StructureGenerationStep::SurfaceStructures,
535 terrain_adjustment: TerrainAdjustment::None,
536 config: StructureConfigData::RuinedPortal {
537 setups: vec![RuinedPortalSetupData {
538 placement: RuinedPortalPlacementData::OnLandSurface,
539 weight: 1f32,
540 air_pocket_probability: 0.5f32,
541 can_be_cold: false,
542 mossiness: 0.8f32,
543 overgrown: true,
544 replace_with_blackstone: false,
545 vines: true,
546 }],
547 },
548});
549static STRUCTURE_RUINED_PORTAL_MOUNTAIN: LazyLock<StructureData> =
550 LazyLock::new(|| StructureData {
551 key: Identifier::new("minecraft", "ruined_portal_mountain"),
552 id: OnceLock::new(),
553 structure_type: Identifier::new("minecraft", "ruined_portal"),
554 allowed_biomes: vec![
555 Identifier::new("minecraft", "badlands"),
556 Identifier::new("minecraft", "cherry_grove"),
557 Identifier::new("minecraft", "eroded_badlands"),
558 Identifier::new("minecraft", "frozen_peaks"),
559 Identifier::new("minecraft", "jagged_peaks"),
560 Identifier::new("minecraft", "meadow"),
561 Identifier::new("minecraft", "savanna_plateau"),
562 Identifier::new("minecraft", "snowy_slopes"),
563 Identifier::new("minecraft", "stony_peaks"),
564 Identifier::new("minecraft", "stony_shore"),
565 Identifier::new("minecraft", "windswept_forest"),
566 Identifier::new("minecraft", "windswept_gravelly_hills"),
567 Identifier::new("minecraft", "windswept_hills"),
568 Identifier::new("minecraft", "windswept_savanna"),
569 Identifier::new("minecraft", "wooded_badlands"),
570 ],
571 spawn_overrides: vec![],
572 step: StructureGenerationStep::SurfaceStructures,
573 terrain_adjustment: TerrainAdjustment::None,
574 config: StructureConfigData::RuinedPortal {
575 setups: vec![
576 RuinedPortalSetupData {
577 placement: RuinedPortalPlacementData::InMountain,
578 weight: 0.5f32,
579 air_pocket_probability: 1f32,
580 can_be_cold: true,
581 mossiness: 0.2f32,
582 overgrown: false,
583 replace_with_blackstone: false,
584 vines: false,
585 },
586 RuinedPortalSetupData {
587 placement: RuinedPortalPlacementData::OnLandSurface,
588 weight: 0.5f32,
589 air_pocket_probability: 0.5f32,
590 can_be_cold: true,
591 mossiness: 0.2f32,
592 overgrown: false,
593 replace_with_blackstone: false,
594 vines: false,
595 },
596 ],
597 },
598 });
599static STRUCTURE_RUINED_PORTAL_NETHER: LazyLock<StructureData> = LazyLock::new(|| StructureData {
600 key: Identifier::new("minecraft", "ruined_portal_nether"),
601 id: OnceLock::new(),
602 structure_type: Identifier::new("minecraft", "ruined_portal"),
603 allowed_biomes: vec![
604 Identifier::new("minecraft", "basalt_deltas"),
605 Identifier::new("minecraft", "crimson_forest"),
606 Identifier::new("minecraft", "nether_wastes"),
607 Identifier::new("minecraft", "soul_sand_valley"),
608 Identifier::new("minecraft", "warped_forest"),
609 ],
610 spawn_overrides: vec![],
611 step: StructureGenerationStep::SurfaceStructures,
612 terrain_adjustment: TerrainAdjustment::None,
613 config: StructureConfigData::RuinedPortal {
614 setups: vec![RuinedPortalSetupData {
615 placement: RuinedPortalPlacementData::InNether,
616 weight: 1f32,
617 air_pocket_probability: 0.5f32,
618 can_be_cold: false,
619 mossiness: 0f32,
620 overgrown: false,
621 replace_with_blackstone: true,
622 vines: false,
623 }],
624 },
625});
626static STRUCTURE_RUINED_PORTAL_OCEAN: LazyLock<StructureData> = LazyLock::new(|| StructureData {
627 key: Identifier::new("minecraft", "ruined_portal_ocean"),
628 id: OnceLock::new(),
629 structure_type: Identifier::new("minecraft", "ruined_portal"),
630 allowed_biomes: vec![
631 Identifier::new("minecraft", "cold_ocean"),
632 Identifier::new("minecraft", "deep_cold_ocean"),
633 Identifier::new("minecraft", "deep_frozen_ocean"),
634 Identifier::new("minecraft", "deep_lukewarm_ocean"),
635 Identifier::new("minecraft", "deep_ocean"),
636 Identifier::new("minecraft", "frozen_ocean"),
637 Identifier::new("minecraft", "lukewarm_ocean"),
638 Identifier::new("minecraft", "ocean"),
639 Identifier::new("minecraft", "warm_ocean"),
640 ],
641 spawn_overrides: vec![],
642 step: StructureGenerationStep::SurfaceStructures,
643 terrain_adjustment: TerrainAdjustment::None,
644 config: StructureConfigData::RuinedPortal {
645 setups: vec![RuinedPortalSetupData {
646 placement: RuinedPortalPlacementData::OnOceanFloor,
647 weight: 1f32,
648 air_pocket_probability: 0f32,
649 can_be_cold: true,
650 mossiness: 0.8f32,
651 overgrown: false,
652 replace_with_blackstone: false,
653 vines: false,
654 }],
655 },
656});
657static STRUCTURE_RUINED_PORTAL_SWAMP: LazyLock<StructureData> = LazyLock::new(|| StructureData {
658 key: Identifier::new("minecraft", "ruined_portal_swamp"),
659 id: OnceLock::new(),
660 structure_type: Identifier::new("minecraft", "ruined_portal"),
661 allowed_biomes: vec![
662 Identifier::new("minecraft", "mangrove_swamp"),
663 Identifier::new("minecraft", "swamp"),
664 ],
665 spawn_overrides: vec![],
666 step: StructureGenerationStep::SurfaceStructures,
667 terrain_adjustment: TerrainAdjustment::None,
668 config: StructureConfigData::RuinedPortal {
669 setups: vec![RuinedPortalSetupData {
670 placement: RuinedPortalPlacementData::OnOceanFloor,
671 weight: 1f32,
672 air_pocket_probability: 0f32,
673 can_be_cold: false,
674 mossiness: 0.5f32,
675 overgrown: false,
676 replace_with_blackstone: false,
677 vines: true,
678 }],
679 },
680});
681static STRUCTURE_SHIPWRECK: LazyLock<StructureData> = LazyLock::new(|| StructureData {
682 key: Identifier::new("minecraft", "shipwreck"),
683 id: OnceLock::new(),
684 structure_type: Identifier::new("minecraft", "shipwreck"),
685 allowed_biomes: vec![
686 Identifier::new("minecraft", "cold_ocean"),
687 Identifier::new("minecraft", "deep_cold_ocean"),
688 Identifier::new("minecraft", "deep_frozen_ocean"),
689 Identifier::new("minecraft", "deep_lukewarm_ocean"),
690 Identifier::new("minecraft", "deep_ocean"),
691 Identifier::new("minecraft", "frozen_ocean"),
692 Identifier::new("minecraft", "lukewarm_ocean"),
693 Identifier::new("minecraft", "ocean"),
694 Identifier::new("minecraft", "warm_ocean"),
695 ],
696 spawn_overrides: vec![],
697 step: StructureGenerationStep::SurfaceStructures,
698 terrain_adjustment: TerrainAdjustment::None,
699 config: StructureConfigData::Shipwreck { is_beached: false },
700});
701static STRUCTURE_SHIPWRECK_BEACHED: LazyLock<StructureData> = LazyLock::new(|| StructureData {
702 key: Identifier::new("minecraft", "shipwreck_beached"),
703 id: OnceLock::new(),
704 structure_type: Identifier::new("minecraft", "shipwreck"),
705 allowed_biomes: vec![
706 Identifier::new("minecraft", "beach"),
707 Identifier::new("minecraft", "snowy_beach"),
708 ],
709 spawn_overrides: vec![],
710 step: StructureGenerationStep::SurfaceStructures,
711 terrain_adjustment: TerrainAdjustment::None,
712 config: StructureConfigData::Shipwreck { is_beached: true },
713});
714static STRUCTURE_STRONGHOLD: LazyLock<StructureData> = LazyLock::new(|| StructureData {
715 key: Identifier::new("minecraft", "stronghold"),
716 id: OnceLock::new(),
717 structure_type: Identifier::new("minecraft", "stronghold"),
718 allowed_biomes: vec![
719 Identifier::new("minecraft", "badlands"),
720 Identifier::new("minecraft", "bamboo_jungle"),
721 Identifier::new("minecraft", "beach"),
722 Identifier::new("minecraft", "birch_forest"),
723 Identifier::new("minecraft", "cherry_grove"),
724 Identifier::new("minecraft", "cold_ocean"),
725 Identifier::new("minecraft", "dark_forest"),
726 Identifier::new("minecraft", "deep_cold_ocean"),
727 Identifier::new("minecraft", "deep_dark"),
728 Identifier::new("minecraft", "deep_frozen_ocean"),
729 Identifier::new("minecraft", "deep_lukewarm_ocean"),
730 Identifier::new("minecraft", "deep_ocean"),
731 Identifier::new("minecraft", "desert"),
732 Identifier::new("minecraft", "dripstone_caves"),
733 Identifier::new("minecraft", "eroded_badlands"),
734 Identifier::new("minecraft", "flower_forest"),
735 Identifier::new("minecraft", "forest"),
736 Identifier::new("minecraft", "frozen_ocean"),
737 Identifier::new("minecraft", "frozen_peaks"),
738 Identifier::new("minecraft", "frozen_river"),
739 Identifier::new("minecraft", "grove"),
740 Identifier::new("minecraft", "ice_spikes"),
741 Identifier::new("minecraft", "jagged_peaks"),
742 Identifier::new("minecraft", "jungle"),
743 Identifier::new("minecraft", "lukewarm_ocean"),
744 Identifier::new("minecraft", "lush_caves"),
745 Identifier::new("minecraft", "mangrove_swamp"),
746 Identifier::new("minecraft", "meadow"),
747 Identifier::new("minecraft", "mushroom_fields"),
748 Identifier::new("minecraft", "ocean"),
749 Identifier::new("minecraft", "old_growth_birch_forest"),
750 Identifier::new("minecraft", "old_growth_pine_taiga"),
751 Identifier::new("minecraft", "old_growth_spruce_taiga"),
752 Identifier::new("minecraft", "pale_garden"),
753 Identifier::new("minecraft", "plains"),
754 Identifier::new("minecraft", "river"),
755 Identifier::new("minecraft", "savanna"),
756 Identifier::new("minecraft", "savanna_plateau"),
757 Identifier::new("minecraft", "snowy_beach"),
758 Identifier::new("minecraft", "snowy_plains"),
759 Identifier::new("minecraft", "snowy_slopes"),
760 Identifier::new("minecraft", "snowy_taiga"),
761 Identifier::new("minecraft", "sparse_jungle"),
762 Identifier::new("minecraft", "stony_peaks"),
763 Identifier::new("minecraft", "stony_shore"),
764 Identifier::new("minecraft", "sunflower_plains"),
765 Identifier::new("minecraft", "swamp"),
766 Identifier::new("minecraft", "taiga"),
767 Identifier::new("minecraft", "warm_ocean"),
768 Identifier::new("minecraft", "windswept_forest"),
769 Identifier::new("minecraft", "windswept_gravelly_hills"),
770 Identifier::new("minecraft", "windswept_hills"),
771 Identifier::new("minecraft", "windswept_savanna"),
772 Identifier::new("minecraft", "wooded_badlands"),
773 ],
774 spawn_overrides: vec![],
775 step: StructureGenerationStep::SurfaceStructures,
776 terrain_adjustment: TerrainAdjustment::Bury,
777 config: StructureConfigData::Empty,
778});
779static STRUCTURE_SWAMP_HUT: LazyLock<StructureData> = LazyLock::new(|| StructureData {
780 key: Identifier::new("minecraft", "swamp_hut"),
781 id: OnceLock::new(),
782 structure_type: Identifier::new("minecraft", "swamp_hut"),
783 allowed_biomes: vec![Identifier::new("minecraft", "swamp")],
784 spawn_overrides: vec![
785 StructureSpawnOverrideData {
786 category: "monster".to_string(),
787 bounding_box: StructureSpawnBoundingBox::Piece,
788 spawns: vec![StructureSpawnerData {
789 entity_type: Identifier::new("minecraft", "witch"),
790 weight: 1i32,
791 min_count: 1i32,
792 max_count: 1i32,
793 }],
794 },
795 StructureSpawnOverrideData {
796 category: "creature".to_string(),
797 bounding_box: StructureSpawnBoundingBox::Piece,
798 spawns: vec![StructureSpawnerData {
799 entity_type: Identifier::new("minecraft", "cat"),
800 weight: 1i32,
801 min_count: 1i32,
802 max_count: 1i32,
803 }],
804 },
805 ],
806 step: StructureGenerationStep::SurfaceStructures,
807 terrain_adjustment: TerrainAdjustment::None,
808 config: StructureConfigData::Empty,
809});
810static STRUCTURE_TRAIL_RUINS: LazyLock<StructureData> = LazyLock::new(|| StructureData {
811 key: Identifier::new("minecraft", "trail_ruins"),
812 id: OnceLock::new(),
813 structure_type: Identifier::new("minecraft", "jigsaw"),
814 allowed_biomes: vec![
815 Identifier::new("minecraft", "jungle"),
816 Identifier::new("minecraft", "old_growth_birch_forest"),
817 Identifier::new("minecraft", "old_growth_pine_taiga"),
818 Identifier::new("minecraft", "old_growth_spruce_taiga"),
819 Identifier::new("minecraft", "snowy_taiga"),
820 Identifier::new("minecraft", "taiga"),
821 ],
822 spawn_overrides: vec![],
823 step: StructureGenerationStep::UndergroundStructures,
824 terrain_adjustment: TerrainAdjustment::Bury,
825 config: StructureConfigData::Jigsaw(JigsawConfig {
826 start_pool: Identifier::new("minecraft", "trail_ruins/tower"),
827 max_depth: 7i32,
828 use_expansion_hack: false,
829 project_start_to_heightmap: Some("WORLD_SURFACE_WG".to_string()),
830 start_height: StartHeight::Constant(-15i32),
831 max_distance_from_center: 80i32,
832 start_jigsaw_name: None,
833 dimension_padding: DimensionPadding {
834 bottom: 0i32,
835 top: 0i32,
836 },
837 pool_aliases: vec![],
838 liquid_settings: LiquidSettingsData::ApplyWaterlogging,
839 }),
840});
841static STRUCTURE_TRIAL_CHAMBERS: LazyLock<StructureData> = LazyLock::new(|| StructureData {
842 key: Identifier::new("minecraft", "trial_chambers"),
843 id: OnceLock::new(),
844 structure_type: Identifier::new("minecraft", "jigsaw"),
845 allowed_biomes: vec![
846 Identifier::new("minecraft", "badlands"),
847 Identifier::new("minecraft", "bamboo_jungle"),
848 Identifier::new("minecraft", "beach"),
849 Identifier::new("minecraft", "birch_forest"),
850 Identifier::new("minecraft", "cherry_grove"),
851 Identifier::new("minecraft", "cold_ocean"),
852 Identifier::new("minecraft", "dark_forest"),
853 Identifier::new("minecraft", "deep_cold_ocean"),
854 Identifier::new("minecraft", "deep_frozen_ocean"),
855 Identifier::new("minecraft", "deep_lukewarm_ocean"),
856 Identifier::new("minecraft", "deep_ocean"),
857 Identifier::new("minecraft", "desert"),
858 Identifier::new("minecraft", "dripstone_caves"),
859 Identifier::new("minecraft", "eroded_badlands"),
860 Identifier::new("minecraft", "flower_forest"),
861 Identifier::new("minecraft", "forest"),
862 Identifier::new("minecraft", "frozen_ocean"),
863 Identifier::new("minecraft", "frozen_peaks"),
864 Identifier::new("minecraft", "frozen_river"),
865 Identifier::new("minecraft", "grove"),
866 Identifier::new("minecraft", "ice_spikes"),
867 Identifier::new("minecraft", "jagged_peaks"),
868 Identifier::new("minecraft", "jungle"),
869 Identifier::new("minecraft", "lukewarm_ocean"),
870 Identifier::new("minecraft", "lush_caves"),
871 Identifier::new("minecraft", "mangrove_swamp"),
872 Identifier::new("minecraft", "meadow"),
873 Identifier::new("minecraft", "mushroom_fields"),
874 Identifier::new("minecraft", "ocean"),
875 Identifier::new("minecraft", "old_growth_birch_forest"),
876 Identifier::new("minecraft", "old_growth_pine_taiga"),
877 Identifier::new("minecraft", "old_growth_spruce_taiga"),
878 Identifier::new("minecraft", "pale_garden"),
879 Identifier::new("minecraft", "plains"),
880 Identifier::new("minecraft", "river"),
881 Identifier::new("minecraft", "savanna"),
882 Identifier::new("minecraft", "savanna_plateau"),
883 Identifier::new("minecraft", "snowy_beach"),
884 Identifier::new("minecraft", "snowy_plains"),
885 Identifier::new("minecraft", "snowy_slopes"),
886 Identifier::new("minecraft", "snowy_taiga"),
887 Identifier::new("minecraft", "sparse_jungle"),
888 Identifier::new("minecraft", "stony_peaks"),
889 Identifier::new("minecraft", "stony_shore"),
890 Identifier::new("minecraft", "sunflower_plains"),
891 Identifier::new("minecraft", "swamp"),
892 Identifier::new("minecraft", "taiga"),
893 Identifier::new("minecraft", "warm_ocean"),
894 Identifier::new("minecraft", "windswept_forest"),
895 Identifier::new("minecraft", "windswept_gravelly_hills"),
896 Identifier::new("minecraft", "windswept_hills"),
897 Identifier::new("minecraft", "windswept_savanna"),
898 Identifier::new("minecraft", "wooded_badlands"),
899 ],
900 spawn_overrides: vec![
901 StructureSpawnOverrideData {
902 category: "water_creature".to_string(),
903 bounding_box: StructureSpawnBoundingBox::Piece,
904 spawns: vec![],
905 },
906 StructureSpawnOverrideData {
907 category: "misc".to_string(),
908 bounding_box: StructureSpawnBoundingBox::Piece,
909 spawns: vec![],
910 },
911 StructureSpawnOverrideData {
912 category: "axolotls".to_string(),
913 bounding_box: StructureSpawnBoundingBox::Piece,
914 spawns: vec![],
915 },
916 StructureSpawnOverrideData {
917 category: "creature".to_string(),
918 bounding_box: StructureSpawnBoundingBox::Piece,
919 spawns: vec![],
920 },
921 StructureSpawnOverrideData {
922 category: "monster".to_string(),
923 bounding_box: StructureSpawnBoundingBox::Piece,
924 spawns: vec![],
925 },
926 StructureSpawnOverrideData {
927 category: "ambient".to_string(),
928 bounding_box: StructureSpawnBoundingBox::Piece,
929 spawns: vec![],
930 },
931 StructureSpawnOverrideData {
932 category: "water_ambient".to_string(),
933 bounding_box: StructureSpawnBoundingBox::Piece,
934 spawns: vec![],
935 },
936 StructureSpawnOverrideData {
937 category: "underground_water_creature".to_string(),
938 bounding_box: StructureSpawnBoundingBox::Piece,
939 spawns: vec![],
940 },
941 ],
942 step: StructureGenerationStep::UndergroundStructures,
943 terrain_adjustment: TerrainAdjustment::Encapsulate,
944 config: StructureConfigData::Jigsaw(JigsawConfig {
945 start_pool: Identifier::new("minecraft", "trial_chambers/chamber/end"),
946 max_depth: 20i32,
947 use_expansion_hack: false,
948 project_start_to_heightmap: None,
949 start_height: StartHeight::Uniform {
950 min: -40i32,
951 max: -20i32,
952 },
953 max_distance_from_center: 116i32,
954 start_jigsaw_name: None,
955 dimension_padding: DimensionPadding {
956 bottom: 10i32,
957 top: 10i32,
958 },
959 pool_aliases: vec![
960 PoolAlias::RandomGroup {
961 groups: vec![
962 (
963 vec![
964 (
965 Identifier::new(
966 "minecraft",
967 "trial_chambers/spawner/contents/ranged",
968 ),
969 Identifier::new(
970 "minecraft",
971 "trial_chambers/spawner/ranged/skeleton",
972 ),
973 ),
974 (
975 Identifier::new(
976 "minecraft",
977 "trial_chambers/spawner/contents/slow_ranged",
978 ),
979 Identifier::new(
980 "minecraft",
981 "trial_chambers/spawner/slow_ranged/skeleton",
982 ),
983 ),
984 ],
985 1i32,
986 ),
987 (
988 vec![
989 (
990 Identifier::new(
991 "minecraft",
992 "trial_chambers/spawner/contents/ranged",
993 ),
994 Identifier::new("minecraft", "trial_chambers/spawner/ranged/stray"),
995 ),
996 (
997 Identifier::new(
998 "minecraft",
999 "trial_chambers/spawner/contents/slow_ranged",
1000 ),
1001 Identifier::new(
1002 "minecraft",
1003 "trial_chambers/spawner/slow_ranged/stray",
1004 ),
1005 ),
1006 ],
1007 1i32,
1008 ),
1009 (
1010 vec![
1011 (
1012 Identifier::new(
1013 "minecraft",
1014 "trial_chambers/spawner/contents/ranged",
1015 ),
1016 Identifier::new(
1017 "minecraft",
1018 "trial_chambers/spawner/ranged/poison_skeleton",
1019 ),
1020 ),
1021 (
1022 Identifier::new(
1023 "minecraft",
1024 "trial_chambers/spawner/contents/slow_ranged",
1025 ),
1026 Identifier::new(
1027 "minecraft",
1028 "trial_chambers/spawner/slow_ranged/poison_skeleton",
1029 ),
1030 ),
1031 ],
1032 1i32,
1033 ),
1034 ],
1035 },
1036 PoolAlias::Random {
1037 alias: Identifier::new("minecraft", "trial_chambers/spawner/contents/melee"),
1038 targets: vec![
1039 (
1040 Identifier::new("minecraft", "trial_chambers/spawner/melee/zombie"),
1041 1i32,
1042 ),
1043 (
1044 Identifier::new("minecraft", "trial_chambers/spawner/melee/husk"),
1045 1i32,
1046 ),
1047 (
1048 Identifier::new("minecraft", "trial_chambers/spawner/melee/spider"),
1049 1i32,
1050 ),
1051 ],
1052 },
1053 PoolAlias::Random {
1054 alias: Identifier::new("minecraft", "trial_chambers/spawner/contents/small_melee"),
1055 targets: vec![
1056 (
1057 Identifier::new("minecraft", "trial_chambers/spawner/small_melee/slime"),
1058 1i32,
1059 ),
1060 (
1061 Identifier::new(
1062 "minecraft",
1063 "trial_chambers/spawner/small_melee/cave_spider",
1064 ),
1065 1i32,
1066 ),
1067 (
1068 Identifier::new(
1069 "minecraft",
1070 "trial_chambers/spawner/small_melee/silverfish",
1071 ),
1072 1i32,
1073 ),
1074 (
1075 Identifier::new(
1076 "minecraft",
1077 "trial_chambers/spawner/small_melee/baby_zombie",
1078 ),
1079 1i32,
1080 ),
1081 ],
1082 },
1083 ],
1084 liquid_settings: LiquidSettingsData::IgnoreWaterlogging,
1085 }),
1086});
1087static STRUCTURE_VILLAGE_DESERT: LazyLock<StructureData> = LazyLock::new(|| StructureData {
1088 key: Identifier::new("minecraft", "village_desert"),
1089 id: OnceLock::new(),
1090 structure_type: Identifier::new("minecraft", "jigsaw"),
1091 allowed_biomes: vec![Identifier::new("minecraft", "desert")],
1092 spawn_overrides: vec![],
1093 step: StructureGenerationStep::SurfaceStructures,
1094 terrain_adjustment: TerrainAdjustment::BeardThin,
1095 config: StructureConfigData::Jigsaw(JigsawConfig {
1096 start_pool: Identifier::new("minecraft", "village/desert/town_centers"),
1097 max_depth: 6i32,
1098 use_expansion_hack: true,
1099 project_start_to_heightmap: Some("WORLD_SURFACE_WG".to_string()),
1100 start_height: StartHeight::Constant(0i32),
1101 max_distance_from_center: 80i32,
1102 start_jigsaw_name: None,
1103 dimension_padding: DimensionPadding {
1104 bottom: 0i32,
1105 top: 0i32,
1106 },
1107 pool_aliases: vec![],
1108 liquid_settings: LiquidSettingsData::ApplyWaterlogging,
1109 }),
1110});
1111static STRUCTURE_VILLAGE_PLAINS: LazyLock<StructureData> = LazyLock::new(|| StructureData {
1112 key: Identifier::new("minecraft", "village_plains"),
1113 id: OnceLock::new(),
1114 structure_type: Identifier::new("minecraft", "jigsaw"),
1115 allowed_biomes: vec![
1116 Identifier::new("minecraft", "meadow"),
1117 Identifier::new("minecraft", "plains"),
1118 ],
1119 spawn_overrides: vec![],
1120 step: StructureGenerationStep::SurfaceStructures,
1121 terrain_adjustment: TerrainAdjustment::BeardThin,
1122 config: StructureConfigData::Jigsaw(JigsawConfig {
1123 start_pool: Identifier::new("minecraft", "village/plains/town_centers"),
1124 max_depth: 6i32,
1125 use_expansion_hack: true,
1126 project_start_to_heightmap: Some("WORLD_SURFACE_WG".to_string()),
1127 start_height: StartHeight::Constant(0i32),
1128 max_distance_from_center: 80i32,
1129 start_jigsaw_name: None,
1130 dimension_padding: DimensionPadding {
1131 bottom: 0i32,
1132 top: 0i32,
1133 },
1134 pool_aliases: vec![],
1135 liquid_settings: LiquidSettingsData::ApplyWaterlogging,
1136 }),
1137});
1138static STRUCTURE_VILLAGE_SAVANNA: LazyLock<StructureData> = LazyLock::new(|| StructureData {
1139 key: Identifier::new("minecraft", "village_savanna"),
1140 id: OnceLock::new(),
1141 structure_type: Identifier::new("minecraft", "jigsaw"),
1142 allowed_biomes: vec![Identifier::new("minecraft", "savanna")],
1143 spawn_overrides: vec![],
1144 step: StructureGenerationStep::SurfaceStructures,
1145 terrain_adjustment: TerrainAdjustment::BeardThin,
1146 config: StructureConfigData::Jigsaw(JigsawConfig {
1147 start_pool: Identifier::new("minecraft", "village/savanna/town_centers"),
1148 max_depth: 6i32,
1149 use_expansion_hack: true,
1150 project_start_to_heightmap: Some("WORLD_SURFACE_WG".to_string()),
1151 start_height: StartHeight::Constant(0i32),
1152 max_distance_from_center: 80i32,
1153 start_jigsaw_name: None,
1154 dimension_padding: DimensionPadding {
1155 bottom: 0i32,
1156 top: 0i32,
1157 },
1158 pool_aliases: vec![],
1159 liquid_settings: LiquidSettingsData::ApplyWaterlogging,
1160 }),
1161});
1162static STRUCTURE_VILLAGE_SNOWY: LazyLock<StructureData> = LazyLock::new(|| StructureData {
1163 key: Identifier::new("minecraft", "village_snowy"),
1164 id: OnceLock::new(),
1165 structure_type: Identifier::new("minecraft", "jigsaw"),
1166 allowed_biomes: vec![Identifier::new("minecraft", "snowy_plains")],
1167 spawn_overrides: vec![],
1168 step: StructureGenerationStep::SurfaceStructures,
1169 terrain_adjustment: TerrainAdjustment::BeardThin,
1170 config: StructureConfigData::Jigsaw(JigsawConfig {
1171 start_pool: Identifier::new("minecraft", "village/snowy/town_centers"),
1172 max_depth: 6i32,
1173 use_expansion_hack: true,
1174 project_start_to_heightmap: Some("WORLD_SURFACE_WG".to_string()),
1175 start_height: StartHeight::Constant(0i32),
1176 max_distance_from_center: 80i32,
1177 start_jigsaw_name: None,
1178 dimension_padding: DimensionPadding {
1179 bottom: 0i32,
1180 top: 0i32,
1181 },
1182 pool_aliases: vec![],
1183 liquid_settings: LiquidSettingsData::ApplyWaterlogging,
1184 }),
1185});
1186static STRUCTURE_VILLAGE_TAIGA: LazyLock<StructureData> = LazyLock::new(|| StructureData {
1187 key: Identifier::new("minecraft", "village_taiga"),
1188 id: OnceLock::new(),
1189 structure_type: Identifier::new("minecraft", "jigsaw"),
1190 allowed_biomes: vec![Identifier::new("minecraft", "taiga")],
1191 spawn_overrides: vec![],
1192 step: StructureGenerationStep::SurfaceStructures,
1193 terrain_adjustment: TerrainAdjustment::BeardThin,
1194 config: StructureConfigData::Jigsaw(JigsawConfig {
1195 start_pool: Identifier::new("minecraft", "village/taiga/town_centers"),
1196 max_depth: 6i32,
1197 use_expansion_hack: true,
1198 project_start_to_heightmap: Some("WORLD_SURFACE_WG".to_string()),
1199 start_height: StartHeight::Constant(0i32),
1200 max_distance_from_center: 80i32,
1201 start_jigsaw_name: None,
1202 dimension_padding: DimensionPadding {
1203 bottom: 0i32,
1204 top: 0i32,
1205 },
1206 pool_aliases: vec![],
1207 liquid_settings: LiquidSettingsData::ApplyWaterlogging,
1208 }),
1209});
1210pub fn register_structures(registry: &mut StructureRegistry) {
1211 registry.register(&*STRUCTURE_ANCIENT_CITY);
1212 registry.register(&*STRUCTURE_BASTION_REMNANT);
1213 registry.register(&*STRUCTURE_BURIED_TREASURE);
1214 registry.register(&*STRUCTURE_DESERT_PYRAMID);
1215 registry.register(&*STRUCTURE_END_CITY);
1216 registry.register(&*STRUCTURE_FORTRESS);
1217 registry.register(&*STRUCTURE_IGLOO);
1218 registry.register(&*STRUCTURE_JUNGLE_PYRAMID);
1219 registry.register(&*STRUCTURE_MANSION);
1220 registry.register(&*STRUCTURE_MINESHAFT);
1221 registry.register(&*STRUCTURE_MINESHAFT_MESA);
1222 registry.register(&*STRUCTURE_MONUMENT);
1223 registry.register(&*STRUCTURE_NETHER_FOSSIL);
1224 registry.register(&*STRUCTURE_OCEAN_RUIN_COLD);
1225 registry.register(&*STRUCTURE_OCEAN_RUIN_WARM);
1226 registry.register(&*STRUCTURE_PILLAGER_OUTPOST);
1227 registry.register(&*STRUCTURE_RUINED_PORTAL);
1228 registry.register(&*STRUCTURE_RUINED_PORTAL_DESERT);
1229 registry.register(&*STRUCTURE_RUINED_PORTAL_JUNGLE);
1230 registry.register(&*STRUCTURE_RUINED_PORTAL_MOUNTAIN);
1231 registry.register(&*STRUCTURE_RUINED_PORTAL_NETHER);
1232 registry.register(&*STRUCTURE_RUINED_PORTAL_OCEAN);
1233 registry.register(&*STRUCTURE_RUINED_PORTAL_SWAMP);
1234 registry.register(&*STRUCTURE_SHIPWRECK);
1235 registry.register(&*STRUCTURE_SHIPWRECK_BEACHED);
1236 registry.register(&*STRUCTURE_STRONGHOLD);
1237 registry.register(&*STRUCTURE_SWAMP_HUT);
1238 registry.register(&*STRUCTURE_TRAIL_RUINS);
1239 registry.register(&*STRUCTURE_TRIAL_CHAMBERS);
1240 registry.register(&*STRUCTURE_VILLAGE_DESERT);
1241 registry.register(&*STRUCTURE_VILLAGE_PLAINS);
1242 registry.register(&*STRUCTURE_VILLAGE_SAVANNA);
1243 registry.register(&*STRUCTURE_VILLAGE_SNOWY);
1244 registry.register(&*STRUCTURE_VILLAGE_TAIGA);
1245}
1246pub fn vanilla_structures() -> Vec<StructureRef> {
1247 vec![
1248 &*STRUCTURE_ANCIENT_CITY,
1249 &*STRUCTURE_BASTION_REMNANT,
1250 &*STRUCTURE_BURIED_TREASURE,
1251 &*STRUCTURE_DESERT_PYRAMID,
1252 &*STRUCTURE_END_CITY,
1253 &*STRUCTURE_FORTRESS,
1254 &*STRUCTURE_IGLOO,
1255 &*STRUCTURE_JUNGLE_PYRAMID,
1256 &*STRUCTURE_MANSION,
1257 &*STRUCTURE_MINESHAFT,
1258 &*STRUCTURE_MINESHAFT_MESA,
1259 &*STRUCTURE_MONUMENT,
1260 &*STRUCTURE_NETHER_FOSSIL,
1261 &*STRUCTURE_OCEAN_RUIN_COLD,
1262 &*STRUCTURE_OCEAN_RUIN_WARM,
1263 &*STRUCTURE_PILLAGER_OUTPOST,
1264 &*STRUCTURE_RUINED_PORTAL,
1265 &*STRUCTURE_RUINED_PORTAL_DESERT,
1266 &*STRUCTURE_RUINED_PORTAL_JUNGLE,
1267 &*STRUCTURE_RUINED_PORTAL_MOUNTAIN,
1268 &*STRUCTURE_RUINED_PORTAL_NETHER,
1269 &*STRUCTURE_RUINED_PORTAL_OCEAN,
1270 &*STRUCTURE_RUINED_PORTAL_SWAMP,
1271 &*STRUCTURE_SHIPWRECK,
1272 &*STRUCTURE_SHIPWRECK_BEACHED,
1273 &*STRUCTURE_STRONGHOLD,
1274 &*STRUCTURE_SWAMP_HUT,
1275 &*STRUCTURE_TRAIL_RUINS,
1276 &*STRUCTURE_TRIAL_CHAMBERS,
1277 &*STRUCTURE_VILLAGE_DESERT,
1278 &*STRUCTURE_VILLAGE_PLAINS,
1279 &*STRUCTURE_VILLAGE_SAVANNA,
1280 &*STRUCTURE_VILLAGE_SNOWY,
1281 &*STRUCTURE_VILLAGE_TAIGA,
1282 ]
1283}