-
Notifications
You must be signed in to change notification settings - Fork 2
Advanced Topics
This page covers advanced features and techniques for Moogs Structure Lib, including version-aware structures, advanced placement modifiers, and complex configuration options.
For structures that need different NBT files per Minecraft version, use version-aware pool elements. This allows a single structure definition to work across multiple Minecraft versions.
Use version-aware elements when:
- Block IDs or properties change between versions
- Structure format requirements differ
- You want to maintain compatibility across versions
Version-aware elements automatically select the correct NBT file based on the running Minecraft version. If no version match is found, it falls back to a default file.
Template Pool Element:
{
"weight": 1,
"element": {
"element_type": "moogs_structures:version_aware_single_pool_element",
"location": "namespace:structure/default",
"locations": {
"1.21.5-1.21.10": "namespace:structure/new_version",
"1.21-1.21.4": "namespace:structure/old_version"
},
"processors": "minecraft:empty",
"projection": "rigid"
}
}-
element_type: Must be"moogs_structures:version_aware_single_pool_element" -
location: Default/fallback NBT file path -
locations: Object mapping version ranges to NBT files- Key: Version range (e.g.,
"1.21.5-1.21.10") - Value: NBT file path for that version range
- Key: Version range (e.g.,
-
processors: Processor list (same as regular elements) -
projection: Projection type (same as regular elements)
Version ranges use format: "<start>-<end>"
Examples:
-
"1.21.5-1.21.10"- Versions 1.21.5 through 1.21.10 -
"1.21-1.21.4"- Versions 1.21 through 1.21.4 -
"1.21.5"- Single version
{
"name": "mvs:versioned_structure/start_pool",
"fallback": "minecraft:empty",
"elements": [
{
"weight": 1,
"element": {
"element_type": "moogs_structures:version_aware_single_pool_element",
"location": "mvs:structure/default",
"locations": {
"1.21.5-1.21.10": "mvs:structure/v1_21_5",
"1.21-1.21.4": "mvs:structure/v1_21"
},
"processors": "minecraft:empty",
"projection": "rigid"
}
}
]
}Behavior:
- Minecraft 1.21.5-1.21.10: Uses
mvs:structure/v1_21_5 - Minecraft 1.21-1.21.4: Uses
mvs:structure/v1_21 - Other versions: Uses
mvs:structure/default(fallback)
Burying types control how structures are positioned relative to terrain:
Places structure so its lowest corner aligns with terrain height.
Use case: Structures that should sit on the ground.
{
"burying_type": "LOWEST_CORNER"
}Places structure at average terrain height in the area.
Use case: Structures that should adapt to terrain variations.
{
"burying_type": "AVERAGE_LAND"
}Places structure so its lowest side aligns with terrain.
Use case: Structures that should follow terrain contours.
{
"burying_type": "LOWEST_SIDE"
}Restricts structure placement to specific Y coordinate ranges:
{
"y_allowance": {
"min_y_allowed": 50,
"max_y_allowed": 100
}
}Use cases:
- Ocean structures (restrict to ocean depth)
- Sky structures (restrict to high altitudes)
- Cave structures (restrict to underground)
Important: max_y_allowed cannot be less than min_y_allowed.
Allows specific pools to extend beyond normal structure boundaries:
{
"pools_that_ignore_boundaries": [
"mvs:cathedral/special_pool",
"mvs:cathedral/decorative_pool"
]
}Use case: Decorative elements or special features that can extend beyond main structure limits.
Limits how far jigsaw pieces can extend from the structure center:
{
"max_distance_from_center": 35
}Use case: Large jigsaw structures where you want to limit total size.
Example: Cathedral structure with max_distance_from_center: 35 means no piece can be more than 35 blocks from the center.
Controls how structures adapt to terrain:
No terrain adaptation. Structure places exactly as built.
{
"terrain_adaptation": "none"
}Use case: Underground structures, floating structures.
Thin beard adaptation. Structure blends slightly with terrain.
{
"terrain_adaptation": "beard_thin"
}Use case: Most surface structures (most common).
Box beard adaptation. More aggressive terrain blending.
{
"terrain_adaptation": "beard_box"
}Use case: Structures that should blend heavily with terrain.
Encapsulation adaptation. Structure is encapsulated by terrain.
{
"terrain_adaptation": "encapsulate"
}Use case: Buried structures, underground features.
Bury adaptation. Structure is buried in terrain.
{
"terrain_adaptation": "bury"
}Use case: Completely buried structures.
Controls how liquids are handled in structures:
{
"liquid_settings": "ignore_waterlogging"
}Options:
-
"ignore_waterlogging"- Ignores waterlogging (default) - Other options depend on Minecraft version
Use case: Underwater structures, structures near water.
Ensures structures don't spawn on biome borders:
{
"valid_biome_radius_check": 5
}Checks that all biomes within 5 chunks match the required biome.
Use case: Structures that need consistent biome context.
Moogs Structure Lib provides placement modifiers for different use cases. Note: These are for feature placement, not structure placement. They're used in different contexts than structure generation.
Offsets placement position by -8 blocks in X and Z.
Type: moogs_structures:minus_eight_placement
Use case: Feature placement adjustments.
Snaps placement to the lowest non-air block below.
Type: moogs_structures:snap_to_lower_non_air_placement
Use case: Features that need to sit on solid ground.
Allows unlimited count of feature placements.
Type: moogs_structures:unlimited_count
Syntax:
{
"type": "moogs_structures:unlimited_count",
"count": 5
}Use case: Features that should spawn multiple times.
Note: These placement modifiers are for feature generation (ores, vegetation, etc.), not structure generation. For structures, use AdvancedRandomSpread placement in structure sets.
Processor lists modify blocks during structure placement. They're referenced in template pools:
{
"processors": "namespace:processor_list_name"
}File location: data/<namespace>/worldgen/processor_list/<name>.json
Common processors:
-
minecraft:empty- No processing (most common) - Custom processors for block replacement, randomization, etc.
Example from MVS:
{
"processors": "mvs:cathedral"
}References data/mvs/worldgen/processor_list/cathedral.json.
Note: Processor lists are a Minecraft feature. See Minecraft documentation for details on creating custom processors.
For large expanding structures like mineshafts:
{
"type": "moogs_structures:moogs_structures_generic_jigsaw_structure",
"start_pool": "mvs:mineshaft/mineshaft",
"size": 10,
"max_distance_from_center": 90,
"pools_that_ignore_boundaries": [],
"project_start_to_heightmap": "WORLD_SURFACE_WG",
"cannot_spawn_in_liquid": true,
"terrain_height_radius_check": 1,
"allowed_terrain_height_range": 2,
"liquid_settings": "ignore_waterlogging",
"dimension_padding": 10,
"biomes": "#mvs:has_structure/taiga_biomes",
"step": "underground_structures",
"terrain_adaptation": "none",
"start_height": {
"absolute": 0
},
"spawn_overrides": {}
}Key settings:
- High
size(10) for expansion -
max_distance_from_centerto limit growth -
dimension_paddingto prevent overlap -
step: "underground_structures"for underground -
terrain_adaptation: "none"for precise placement
Nether structures use special structure type:
{
"type": "moogs_structures:moogs_structures_generic_nether_jigsaw_structure",
"start_pool": "mvs:nether_structure/start_pool",
"size": 1,
"biomes": "#mvs:has_structure/nether_biomes",
"land_search_direction": "HIGHEST_LAND",
"ledge_offset_y": 5,
"project_start_to_heightmap": "WORLD_SURFACE_WG",
"cannot_spawn_in_liquid": true,
"terrain_height_radius_check": 2,
"allowed_terrain_height_range": 1,
"step": "surface_structures",
"terrain_adaptation": "beard_thin",
"start_height": {
"absolute": 0
},
"spawn_overrides": {}
}Key settings:
-
moogs_structures_generic_nether_jigsaw_structuretype -
land_search_direction: "HIGHEST_LAND"or"LOWEST_LAND" -
ledge_offset_yfor positioning - Nether biome tags
- Use Version-Aware Elements - When supporting multiple versions
- Test Thoroughly - Advanced features can have unexpected interactions
- Document Complex Structures - Note jigsaw connections and pool relationships
- Start Simple - Add advanced features incrementally
- Use Appropriate Settings - Match terrain adaptation to structure type
-
Limit Growth - Use
max_distance_from_centerfor large structures - Test Exclusion Zones - Verify they work as expected
Version-aware not working?
- Check version range format
- Verify NBT files exist for all versions
- Check fallback file exists
Burying type not working?
- Verify terrain height checks are appropriate
- Check
y_allowancerestrictions - Ensure terrain is suitable
Structures too large?
- Reduce
sizevalue - Lower
max_distance_from_center - Check jigsaw connections aren't infinite
Exclusion zones too restrictive?
- Reduce
chunk_count - Check structure set tags are correct
- Verify
allowed_chunk_countlogic
See Also:
- Structure Files - Complete structure JSON reference
- Template Pools - Pool system details
- Placement Systems - Placement configuration