Skip to main content

Overview

Structure modifiers allow you to modify Minecraft’s structure generation system, including template pools (jigsaw structures), structure sets, processor lists, and structure spawn conditions.

Add Template Pool Elements

Adds structure pool elements to existing template pools.
public record AddTemplatePoolElementsModifier(
    int priority,
    HolderSet<StructureTemplatePool> templatePools,
    List<Pair<StructurePoolElement, Integer>> elements
) implements Modifier

Parameters

type
string
required
Must be "lithostitched:add_template_pool_elements"
priority
integer
default:"1000"
Execution priority. Lower values execute first.
template_pools
string | string[]
required
Registry ID(s) of template pool(s) to modify. Supports tags with # prefix.
elements
array
required
Array of pool elements to add. Each element contains:

Example

{
  "type": "lithostitched:add_template_pool_elements",
  "priority": 1000,
  "template_pools": "minecraft:village/plains/houses",
  "elements": [
    {
      "element": {
        "location": "mymod:village/plains/custom_house",
        "processors": "minecraft:empty",
        "projection": "rigid",
        "element_type": "minecraft:single_pool_element"
      },
      "weight": 5
    }
  ]
}

Add Structure Set Entries

Adds structure entries to structure sets, controlling which structures can generate together.
public record AddStructureSetEntriesModifier(
    int priority,
    HolderSet<StructureSet> structureSets,
    List<StructureSet.StructureSelectionEntry> entries
) implements Modifier

Parameters

type
string
required
Must be "lithostitched:add_structure_set_entries"
priority
integer
default:"1000"
Execution priority.
structure_sets
string | string[]
required
Registry ID(s) of structure set(s) to modify.
entries
array
required
Array of structure selection entries to add.

Example

{
  "type": "lithostitched:add_structure_set_entries",
  "structure_sets": "minecraft:villages",
  "entries": [
    {
      "structure": "mymod:custom_village",
      "weight": 5
    }
  ]
}

Remove Structure Set Entries

Removes structure entries from structure sets.
public record RemoveStructureSetEntriesModifier(
    int priority,
    HolderSet<StructureSet> structureSets,
    List<Holder<Structure>> entries
) implements Modifier

Parameters

type
string
required
Must be "lithostitched:remove_structure_set_entries"
priority
integer
default:"2000"
Execution priority. Defaults to 2000 to run after additions.
structure_sets
string | string[]
required
Registry ID(s) of structure set(s) to modify.
structures
string[]
required
Array of structure registry IDs to remove.

Example

{
  "type": "lithostitched:remove_structure_set_entries",
  "priority": 2000,
  "structure_sets": "minecraft:desert_pyramids",
  "structures": [
    "minecraft:desert_pyramid"
  ]
}

Set Pool Aliases

Sets or appends pool aliases for jigsaw structures, allowing dynamic pool replacement.
public record SetPoolAliasesModifier(
    int priority,
    HolderSet<Structure> structures,
    List<PoolAliasBinding> poolAliases,
    boolean append
) implements Modifier

Parameters

type
string
required
Must be "lithostitched:set_pool_aliases"
priority
integer
default:"1000"
Execution priority.
structures
string | string[]
required
Registry ID(s) of jigsaw structure(s) to modify.
pool_aliases
array
required
Array of pool alias bindings. Each binding maps an alias to target pools.
append
boolean
default:"true"
Whether to append to existing aliases (true) or replace them (false).

Example

{
  "type": "lithostitched:set_pool_aliases",
  "structures": "minecraft:village_plains",
  "append": true,
  "pool_aliases": [
    {
      "type": "minecraft:direct",
      "alias": "mymod:village_variant",
      "target": "mymod:plains_houses_variant"
    }
  ]
}
Target structures must be jigsaw structures (vanilla or lithostitched:jigsaw). The modifier will fail validation for non-jigsaw structures.

Set Pool Element Processors

Sets or appends structure processors to template pool elements.
public record SetPoolElementProcessorsModifier(
    int priority,
    HolderSet<StructureTemplatePool> templatePools,
    Optional<List<Identifier>> locations,
    Holder<StructureProcessorList> processorList,
    boolean append
) implements Modifier

Parameters

type
string
required
Must be "lithostitched:set_pool_element_processors"
priority
integer
default:"1000"
Execution priority.
template_pools
string | string[]
required
Registry ID(s) of template pool(s) to modify.
locations
string[]
Optional array of structure template locations to filter. If omitted, applies to all elements in the pool.
processor_list
string | object
required
Registry ID or inline definition of processor list to apply.
append
boolean
default:"true"
Whether to append processors (true) or replace them (false).

Example

{
  "type": "lithostitched:set_pool_element_processors",
  "template_pools": "minecraft:village/plains/houses",
  "locations": [
    "minecraft:village/plains/houses/plains_medium_house_1",
    "minecraft:village/plains/houses/plains_medium_house_2"
  ],
  "processor_list": "mymod:weathering_processors",
  "append": true
}

Set Structure Spawn Condition

Sets placement conditions for structure spawning.
public record SetStructureSpawnConditionModifier(
    int priority,
    HolderSet<Structure> structures,
    PlacementCondition spawnCondition,
    boolean append
) implements Modifier

Parameters

type
string
required
Must be "lithostitched:set_structure_spawn_condition"
priority
integer
default:"1000"
Execution priority.
structures
string | string[]
required
Registry ID(s) of structure(s) to modify.
spawn_condition
object
required
A PlacementCondition object defining when the structure can spawn.
append
boolean
default:"true"
Whether to append to existing conditions or replace them.

Example

{
  "type": "lithostitched:set_structure_spawn_condition",
  "structures": "mymod:custom_structure",
  "spawn_condition": {
    "type": "lithostitched:in_biome",
    "biomes": [
      "minecraft:plains",
      "minecraft:sunflower_plains"
    ]
  },
  "append": false
}

Add Processor List Processors

Adds structure processors to existing processor lists.
public record AddProcessorListProcessorsModifier(
    int priority,
    HolderSet<StructureProcessorList> processorLists,
    StructureProcessorList processors
) implements Modifier

Parameters

type
string
required
Must be "lithostitched:add_processor_list_processors"
priority
integer
default:"1000"
Execution priority.
processor_lists
string | string[]
required
Registry ID(s) of processor list(s) to modify.
processors
object
required
A StructureProcessorList object containing processors to add.

Example

{
  "type": "lithostitched:add_processor_list_processors",
  "processor_lists": "minecraft:village_plains",
  "processors": {
    "processors": [
      {
        "processor_type": "minecraft:rule",
        "rules": [
          {
            "location_predicate": {
              "predicate_type": "minecraft:always_true"
            },
            "input_predicate": {
              "block": "minecraft:cobblestone",
              "predicate_type": "minecraft:random_block_match",
              "probability": 0.1
            },
            "output_state": {
              "Name": "minecraft:mossy_cobblestone"
            }
          }
        ]
      }
    ]
  }
}

Add Structure Templates

Adds structure template locations to template lists.
public record AddStructureTemplatesModifier(
    int priority,
    HolderSet<TemplateList> targets,
    List<Identifier> templates
) implements Modifier

Parameters

type
string
required
Must be "lithostitched:add_structure_templates"
priority
integer
default:"1000"
Execution priority.
targets
string | string[]
required
Registry ID(s) of template list(s) to modify.
templates
string | string[]
required
Template location(s) to add to the list.

Example

{
  "type": "lithostitched:add_structure_templates",
  "targets": "mymod:dungeon_templates",
  "templates": [
    "mymod:dungeons/variant_1",
    "mymod:dungeons/variant_2",
    "mymod:dungeons/variant_3"
  ]
}

Best Practices

  • Vanilla structures typically use weights between 1-10
  • Higher weights increase selection probability
  • Balance weights to maintain vanilla structure distribution
  • Test in-game to verify desired spawn rates
  • Processors execute in order within a list
  • When appending, new processors run after existing ones
  • Use append: false to completely replace processor behavior
  • Consider processor interactions carefully
  • Create structure tags for related structures
  • Apply modifiers to tags instead of individual structures
  • Easier to maintain and extend
  • Use /locate structure to find modified structures
  • Verify processor effects with different seeds
  • Check that weights produce expected distribution
  • Test with multiple datapacks enabled

Pool Elements

Learn about structure pool element types

Processors

Explore structure processor types

Placement Conditions

Understand placement condition system

Examples

See practical structure modifier examples

Build docs developers (and LLMs) love