Technical Changelog - Apollounknowndev/lithostitched GitHub Wiki

1.5.0 (Beta 5)

Last big new batch of features for 1.5!

New Features

  • Added a folder for surface rules. They can be placed in lithostitched/surface_rule.
  • Added a reference surface rule type. It accepts a surface rule set, meaning tags are supported.
  • Added four new surface rule conditions.
    • Added all_of and any_of conditions for easy checking of multiple conditions at once.
    • Added biome condition, a more configurable version of vanilla's biome condition that accepts a single biome or biome tag on top of a list.
    • Added slope condition, a more configurable version of vanilla's steep condition.

Changes

  • The dungeon_invalid_blocks field in dungeon features now accepts a single block or list of blocks instead of exclusively tags.
  • In all places that accept an inclusive range of ints (e.g. 64, [64,96], {"min_inclusive":64,"max_inclusive":96}), the object version can omit min_inclusive or max_inclusive to have an unbound min/max value. This impacts the following:
    • allowed_count in multiple_of block predicate
    • allowed_count in grid placement condition
    • allowed_count in multiple_of placement condition
    • permitted_range in height_filter placement condition
    • allowed_depth in delegating pool element
    • height_difference in new slope surface condition

Fixes

  • Fixed a small parity discrepancy between vanilla and modded bandlands in the wrapped band type

1.5.0 (Beta 4)

New Features

  • Added processor lists for end cities, igloos, nether fossils, ruined portals, and woodland mansions.

Changes

  • Finished the structure template injection system. It is now possible to inject new pieces into shipwrecks, nether fossils, and woodland mansions.

Fixes

  • add_surface_rule modifiers now respect the priority field.

1.5.0 (Beta 2)

New Features

  • Added a system for creating custom bandlands like the vanilla Badlands biomes. A wiki page on these is coming soon™️.
  • Added an experimental system for injecting new structure templates into structures that use hardcoded structure template lists. Currently this only applies for Ruined Portals. A wiki page on these is coming soon™️.
  • Added in_structure block predicate, checking for if there's structure(s) within a given radius of the current position.

Changes

  • A handful of changes to Lithostitched jigsaw structures.
    • Added optional boolean field fixed_rotation. If set to true, the structure will not randomly rotate when placed.
    • Increased the max size value to 128.
    • Backported the 1.21.9 changes to max_distance_from_center. The field can now be an object with separate horizontal and vertical values.
  • Several additions to the delegating pool element type.
    • name: An optional resource location. When calculating the number of a pool element placed in a structure, elements with the name field will count as the same element.
    • allow_bounding_box_collisions: An optional boolean. When true, the element can place even if it would collide with other elements in the structure. Handle with care!
    • other_pieces_can_intersect: An optional boolean. When true, other elements can place even if they would collide with this element.
  • Added a priority field to all modifier types. Modifiers are now applied in ascending order of priority instead of by the internal modifier phase system.
  • Added a placement_type field to the stack_feature modifier, allowing you to set the placement type for the feature stack.
  • Improved the generation speed of Lithostitched's jigsaw structure using optimizations from Structure Layout Optimizer.

1.4.9

New Features

  • Added the sample_noise_router placement condition, identical to sample_density except the density_function density function field is replaced with a target noise router target field.

1.4.8

Changes

  • Moved the Template pool fallback chain found: warning behind a log_debug_messages config option.

1.4.7

Changes

  • Added an optional condition field to the delegating pool element type, allowing placement conditions to be used on individual pool elements.

1.4.5

Fixes

  • Fixed a crash when using the set_structure_spawn_condition modifier on Trial Chambers.

1.4.4

Fixes

  • Fixed several issues with the replace_effects worldgen modifier.

1.4.2

New Features

  • Added the delegating pool element type. It holds all functionality of the guaranteed and limited pool element types with some additional functionality such as piece-based terrain adaption. This does not replace the other pool element types!

Fixes

  • Fixed the limited pool element being prioritized in placement similar to the guaranteed pool element.
  • Fixed tags in the apply_random processor type not validating.

1.4

New Features

  • Added grid placement/structure condition for applying multiple structure conditions over an area in a grid pattern. See the placement condition page for details.
  • Added condition placement modifier which allows placement modifiers to be conditionally placed based on structure condition(s).
  • Added noise_slope placement modifier as a more configurable version of the vanilla noise_based_count placement modifier.

Changes

  • Removed the old format of using singular target names (e.g. structure, template_pool from most worldgen modifiers. This was deprecated in 1.3.9 last month for removal in 1.4.
  • Added optional anchor field to position processor condition. Possible fields are structure_start for current/vanilla behavior and piece for piece-relative position checks.
  • Renamed structure conditions to placement conditions internally.

Fixes

  • Fixed non-Lithostitched template pool injection not being applied correctly.
  • Fix processor lists functioning incorrectly with the apply_random processor.

1.3.10

Fixes

  • Fixed the condition processor not matching input blocks correctly when the block has already been processed.

1.3.9

First version on 1.21.4! 1.21.2 support has been dropped.

New Features

  • Added block_state block predicate type. It takes a properties field, which is a block state predicate.
  • Added offset placement modifier type as a more configurable version of vanilla's random_offset. It takes an x_offset, y_offset and z_offset integer provider field. These fields can be omitted for an offset of 0 on that axis. Offsets on the x/z axis are clamped from -16 to 16, y axis is unclamped.

Changes

  • Renamed the remove_structures_from_structure_set worldgen modifier to remove_structure_set_entries for consistency.
  • Changed the syntax of most worldgen modifiers slightly.

Fields for the target element to be modified (e.g. the template_pool field in the add_template_pool_elements modifier) are now plural and are sets, meaning they can also take lists of elements or a #-prefixed element tag.

Old syntax:

{
  "type": "lithostitched:add_template_pool_elements",
  "template_pool": "minecraft:trial_chambers/decor",
  "elements": []
}

New syntax:

{
  "type": "lithostitched:add_template_pool_elements",
  "template_pools": [ // This can still be a single element, the list is an example
    "minecraft:trial_chambers/decor"
    "example:some_other_pool"
  ],
  "elements": []
}

This applies to:

  • base_feature in stack_feature
  • structure_set in add_structure_set_entries and remove_structure_set_entries
  • structure in set_pool_aliases and set_structure_spawn_condition
  • template_pool in add_template_pool_elements and set_pool_element_processors
  • processor_list in add_processor_list_processors

The old format is currently still supported! Support for the old format will be removed upon the release of Lithostitched v1.4 in January 2025.


1.3.8

New Features

  • Added schedule_tick processor, which will schedule block and fluid ticking.

Changes

  • Made the random_mode field in the condition processor optional.

Fixes

  • Fixed the reference processor not working.
  • Fixed a rare chunk saving error/crash that could occur with jigsaw structures which was amplified when using C2ME.

1.3.7

Changes

  • Added the min_depth field to the limited pool element type.
  • Made the match_type field in the matching_blocks processor condition default to input.
  • Structures using the lithostitched:jigsaw structure type use the chained template pool fallback system even if breaks_seed_parity is disabled.

Fixes

  • Fixed the min_depth field in guaranteed pool elements not working.
  • Fixed the block_entity_modifier in set_block processor not working correctly in some cases.
  • Fixed 1.20 modifier predicates not working.

1.3.5

Lots of new features and changes this release!

New Features

Because there is so many new features, the changelog won't include format details. Please see the respective wiki pages for details.

  • Configured Feature Types

    • Added composite for stacking multiple placed features in the same place.
    • Added select for selecting a placed feature to place based on a block predicate.
    • Added weighted_selector as a more convenient version of vanilla's random_selector.
    • Added large_dripstone as a more configurable version of vanilla's large_dripstone.
    • Added ore as a more configurable version of vanilla's ore.
    • Added vines as a more configurable version of vanilla's vines.
  • Block Predicate Types

    • Added multiple_of for checking if a certain number or range of numbers of block predicates pass.
    • Added random_chance to pass a certain percentage of the time
  • Block State Provider Types

    • Added random_block for placing a random block from a block set (block, list of blocks, #-prefixed tag of blocks)
    • Added weighted as a version of vanilla's weighted_state_provider with entries being state providers rather than block states.
  • Structure Condition Types

    • Added multiple_of for checking if a certain number or range of numbers of structure conditions pass.
  • Structure Processor Types

    • Added condition as a more powerful, configurable and readable version of several vanilla processors.
      • The condition processors checks processor conditions and if they pass, a processor will run. See the [processor condition] page for details.
    • Added discard_input, which discards the structure template's block and uses the one in the world already. Built for use with the condition processor.
    • Added set_block, which sets the block to a new block. Built for use with the condition processor.
  • Worldgen Modifier Types

    • Replaced redirect_feature with stack_feature, which lets you stack multiple features onto an existing configured feature.
    • Added set_pool_element_processors for setting structure processors onto template pool entries directly.
    • Added set_structure_spawn_condition for setting/adding a spawn condition onto an existing structure.

Changes

  • The vanilla jigsaw structure type now uses Lithostitched's jigsaw structure system.

    • This means all vanilla jigsaw structures and the vast majority of modded ones will support guaranteed/limited pool elements and generate faster.
    • The optimizations come at the loss of some seed parity, jigsaw structure layouts without Lithostitched will be different from with it. (The location of structures is unaffected.)
      • Disable breaks_seed_parity in the config to maintain seed parity.
  • Modified the height_filter structure condition.

    • Added a range_type field which can be absolute (old behavior) or heightmap_relative.
    • Replaced min_inclusive and max_inclusive with permitted_range, which is an int range (64, [64,96], {"min_inclusive":64,"max_inclusive":96}).
  • Removed the matching_blocks rule test. Use the condition processor as a replacement.

Fixes

  • Fixed an issue with density function wrapping that would cause some world's worldgen to break down if closed and reopened multiple times.
  • Fixed lithostitched:jigsaw structure generation being fully random rather than seed-based random.
  • Fixed the reference processor not being able to modify blocks multiple times.
  • Fixed set_pool_aliases modifiers not working consistently on Trial Chambers.

Non-Mod Changes

  • Updated the generator site for all the new changes.
  • Added a placed feature generator to the site.

1.3.4

Additions

  • Added the ability to customize shipwreck wood types using a processor list tag.

Non-Mod Changes

  • Updated the wiki with a new Guides section for guides on features like custom shipwreck palettes and custom trial chambers mobs.

1.3.3 (1.20.1 only)

Changes

  • Fixed modifier predicates. If a modifier predicate doesn't pass, the entire modifier won't be registered.
  • Massive internal refactoring to Modifier to align it with the 1.21 version.

1.3.1b (1.20.1 only)

Fixes

  • Fixed the delegating structure type not working.

Non-Mod Changes

  • Updated the Lithostitched generator site to enforce inlining a delegate structure in the delegating structure type, as references weren't allowed.

1.3.1a

Changes

  • Added a dimension field to the wrap_noise_router modifier type, being an id for a dimension. The dimension referenced doesn't have to exist.

1.3.1

Additions

  • Added the wrap_density_function and wrap_noise_router worldgen modifier types, allowing for density function injection.
    • Both have a priority field, being an int representing the priority the modifier takes in wrapping around density functions/noise router entries. These modifiers are applied in ascending priority order (low -> high values). Defaults to 1000.
    • Both have a wrapper_function field, being a density function to wrap around the target.
    • wrap_density_function has a target_function field, being a density function reference to wrap.
    • wrap_noise_router has a target field, being a noise router field to wrap.
  • Added two density function types for use in the previously mentioned modifier types: wrapped_marker and original_marker. Both can only be used in density functions referenced by the density function injection modifiers and will crash the game if attempted to be computed regularly.
    • wrapped_marker is a marker for the current wrapped density function. For example, the following worldgen modifier will multiply temperature by 2:
{
  "type": "lithostitched:wrap_noise_router",
  "target": "temperature",
  "wrapper_function": {
    "type": "minecraft:mul",
    "argument1": 2,
    "argument2": {
      "type": "lithostitched:wrapped_marker"
    }
  }
}
  • original_marker is a marker to get the original density function without other mod/datapack's wrappings around it.

Non-Mod Changes

  • Updated the Lithostitched generator site with new worldgen modifier and density function types, adding a density function generator as well.

1.3.0

Additions

  • Brought the 1.20.1 version up to speed with the 1.21 version. They will be the two main supported versions for the foreseeable future.
  • Added processor list injection with the add_processor_list_processors worldgen modifier type.
  • Added the ability to place structure nbt files as features with the structure_template feature type.
  • Added the matching_blocks rule test type, making functionality such as random tag matches possible.
  • Added an optional heightmap field to the height_filter structure condition.
  • Removed the apply_with_chance pool alias type.

Non-Mod Changes

  • Fully restructured the wiki to be easier to navigate.
  • Added a technical changelog (that's where you are right now!).
  • Created a modified version of misode.github.io with full Lithostitched support. View it here!