1use crate :: { feature :: * , vanilla_blocks , vanilla_fluids } ; use steel_utils :: value_providers :: { FloatProvider , HeightProvider , IntProvider , UniformIntProvider , VerticalAnchor , WeightedIntProvider , } ; use steel_utils :: { Direction , Identifier , Rotation } ; use std :: sync :: { LazyLock , OnceLock } ; use glam :: IVec3 ; pub static ACACIA : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("acacia") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: ACACIA_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: ACACIA_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Forking (TrunkPlacerBase { base_height : 5i32 , height_rand_a : 2i32 , height_rand_b : 2i32 , }) , foliage_placer : FoliagePlacer :: Acacia (FoliagePlacerBase { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (0i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , upper_size : 2i32 , min_clipped_height : None , }) , decorators : vec ! [] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static AMETHYST_GEODE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("amethyst_geode") , kind : ConfiguredFeatureKind :: Geode (GeodeConfiguration { blocks : GeodeBlockSettings { filling_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: AIR , properties : & [] , } } , inner_layer_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: AMETHYST_BLOCK , properties : & [] , } } , alternate_inner_layer_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BUDDING_AMETHYST , properties : & [] , } } , middle_layer_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: CALCITE , properties : & [] , } } , outer_layer_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SMOOTH_BASALT , properties : & [] , } } , inner_placements : vec ! [BlockStateData { block : & vanilla_blocks :: SMALL_AMETHYST_BUD , properties : & [("facing" , "up") , ("waterlogged" , "false")] , } , BlockStateData { block : & vanilla_blocks :: MEDIUM_AMETHYST_BUD , properties : & [("facing" , "up") , ("waterlogged" , "false")] , } , BlockStateData { block : & vanilla_blocks :: LARGE_AMETHYST_BUD , properties : & [("facing" , "up") , ("waterlogged" , "false")] , } , BlockStateData { block : & vanilla_blocks :: AMETHYST_CLUSTER , properties : & [("facing" , "up") , ("waterlogged" , "false")] , }] , cannot_replace : Identifier :: vanilla_static ("features_cannot_replace") , invalid_blocks : Identifier :: vanilla_static ("geode_invalid_blocks") , } , layers : GeodeLayerSettings { filling : 1.7f64 , inner_layer : 2.2f64 , middle_layer : 3.2f64 , outer_layer : 4.2f64 , } , crack : GeodeCrackSettings { generate_crack_chance : 0.95f64 , base_crack_size : 2f64 , crack_point_offset : 2i32 , } , use_potential_placements_chance : 0.35f64 , use_alternate_layer0_chance : 0.083f64 , placements_require_layer0_alternate : true , outer_wall_distance : IntProvider :: Uniform { min_inclusive : 4i32 , max_inclusive : 6i32 , } , distribution_points : IntProvider :: Uniform { min_inclusive : 3i32 , max_inclusive : 4i32 , } , point_offset : IntProvider :: Uniform { min_inclusive : 1i32 , max_inclusive : 2i32 , } , min_gen_offset : - 16i32 , max_gen_offset : 16i32 , invalid_blocks_threshold : 1i32 , noise_multiplier : 0.05f64 , }) , id : OnceLock :: new () , } }) ; pub static AZALEA_TREE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("azalea_tree") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: ROOTED_DIRT , properties : & [] , } } , foliage_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: AZALEA_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } , weight : 3i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: FLOWERING_AZALEA_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } , weight : 1i32 }] } , trunk_placer : TrunkPlacer :: Bending (BendingTrunkPlacer { base_height : 4i32 , height_rand_a : 2i32 , height_rand_b : 0i32 , min_height_for_leaves : 3i32 , bend_length : IntProvider :: Uniform { min_inclusive : 1i32 , max_inclusive : 2i32 , } , }) , foliage_placer : FoliagePlacer :: RandomSpread (RandomSpreadFoliagePlacer { radius : IntProvider :: Constant (3i32) , offset : IntProvider :: Constant (0i32) , foliage_height : 2i32 , leaf_placement_attempts : 50i32 , }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , upper_size : 1i32 , min_clipped_height : None , }) , decorators : vec ! [] , root_placer : None , ignore_vines : false , }) , id : OnceLock :: new () , } }) ; pub static BAMBOO_NO_PODZOL : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("bamboo_no_podzol") , kind : ConfiguredFeatureKind :: Bamboo (BambooConfiguration { probability : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static BAMBOO_SOME_PODZOL : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("bamboo_some_podzol") , kind : ConfiguredFeatureKind :: Bamboo (BambooConfiguration { probability : 0.2f32 , }) , id : OnceLock :: new () , } }) ; pub static BAMBOO_VEGETATION : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("bamboo_vegetation") , kind : ConfiguredFeatureKind :: RandomSelector (RandomSelectorConfiguration { features : vec ! [WeightedPlacedFeature { chance : 0.05f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FANCY_OAK_CHECKED) } , WeightedPlacedFeature { chance : 0.15f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: JUNGLE_BUSH) } , WeightedPlacedFeature { chance : 0.7f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: MEGA_JUNGLE_TREE_CHECKED) }] , default : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Reference (& crate :: vanilla_configured_features :: GRASS_JUNGLE) , placement : vec ! [PlacementModifier :: Count { count : IntProvider :: Constant (32i32) } , PlacementModifier :: RandomOffset { xz_spread : IntProvider :: Trapezoid { min : - 7i32 , max : 7i32 , plateau : 0i32 , } , y_spread : IntProvider :: Trapezoid { min : - 3i32 , max : 3i32 , plateau : 0i32 , } , } , PlacementModifier :: BlockPredicateFilter { predicate : BlockPredicate :: AllOf { predicates : vec ! [BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("air") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlocks { blocks : BlockRefList (vec ! [& vanilla_blocks :: PODZOL]) , offset : IVec3 :: new (0i32 , - 1i32 , 0i32) }) }] } }] , })) , }) , id : OnceLock :: new () , } }) ; pub static BASALT_BLOBS : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("basalt_blobs") , kind : ConfiguredFeatureKind :: NetherrackReplaceBlobs (NetherrackReplaceBlobsConfiguration { target : BlockStateData { block : & vanilla_blocks :: NETHERRACK , properties : & [] , } , state : BlockStateData { block : & vanilla_blocks :: BASALT , properties : & [("axis" , "y")] , } , radius : IntProvider :: Uniform { min_inclusive : 3i32 , max_inclusive : 7i32 , } , }) , id : OnceLock :: new () , } }) ; pub static BASALT_PILLAR : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("basalt_pillar") , kind : ConfiguredFeatureKind :: BasaltPillar , id : OnceLock :: new () , } }) ; pub static BERRY_BUSH : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("berry_bush") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SWEET_BERRY_BUSH , properties : & [("age" , "3")] , } } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static BIRCH : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("birch") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIRCH_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIRCH_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Straight (TrunkPlacerBase { base_height : 5i32 , height_rand_a : 2i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Blob (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (0i32) , height : IntProvider :: Constant (3i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , upper_size : 1i32 , min_clipped_height : None , }) , decorators : vec ! [] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static BIRCH_BEES_0002 : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("birch_bees_0002") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIRCH_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIRCH_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Straight (TrunkPlacerBase { base_height : 5i32 , height_rand_a : 2i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Blob (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (0i32) , height : IntProvider :: Constant (3i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , upper_size : 1i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: Beehive { probability : 0.002f32 }] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static BIRCH_BEES_0002_LEAF_LITTER : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("birch_bees_0002_leaf_litter") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIRCH_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIRCH_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Straight (TrunkPlacerBase { base_height : 5i32 , height_rand_a : 2i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Blob (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (0i32) , height : IntProvider :: Constant (3i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , upper_size : 1i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: Beehive { probability : 0.002f32 } , TreeDecorator :: PlaceOnGround (PlaceOnGroundDecorator { block_state_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "3")] , } , weight : 1i32 }] } , tries : 96i32 , radius : 4i32 , height : 2i32 , }) , TreeDecorator :: PlaceOnGround (PlaceOnGroundDecorator { block_state_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "4")] , } , weight : 1i32 }] } , tries : 150i32 , radius : 2i32 , height : 2i32 , })] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static BIRCH_BEES_002 : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("birch_bees_002") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIRCH_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIRCH_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Straight (TrunkPlacerBase { base_height : 5i32 , height_rand_a : 2i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Blob (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (0i32) , height : IntProvider :: Constant (3i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , upper_size : 1i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: Beehive { probability : 0.02f32 }] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static BIRCH_BEES_005 : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("birch_bees_005") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIRCH_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIRCH_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Straight (TrunkPlacerBase { base_height : 5i32 , height_rand_a : 2i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Blob (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (0i32) , height : IntProvider :: Constant (3i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , upper_size : 1i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: Beehive { probability : 0.05f32 }] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static BIRCH_LEAF_LITTER : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("birch_leaf_litter") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIRCH_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIRCH_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Straight (TrunkPlacerBase { base_height : 5i32 , height_rand_a : 2i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Blob (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (0i32) , height : IntProvider :: Constant (3i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , upper_size : 1i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: PlaceOnGround (PlaceOnGroundDecorator { block_state_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "3")] , } , weight : 1i32 }] } , tries : 96i32 , radius : 4i32 , height : 2i32 , }) , TreeDecorator :: PlaceOnGround (PlaceOnGroundDecorator { block_state_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "4")] , } , weight : 1i32 }] } , tries : 150i32 , radius : 2i32 , height : 2i32 , })] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static BIRCH_TALL : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("birch_tall") , kind : ConfiguredFeatureKind :: RandomSelector (RandomSelectorConfiguration { features : vec ! [WeightedPlacedFeature { chance : 0.00625f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FALLEN_SUPER_BIRCH_TREE) } , WeightedPlacedFeature { chance : 0.5f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: SUPER_BIRCH_BEES_0002) } , WeightedPlacedFeature { chance : 0.0125f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FALLEN_BIRCH_TREE) }] , default : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: BIRCH_BEES_0002) , }) , id : OnceLock :: new () , } }) ; pub static BLACKSTONE_BLOBS : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("blackstone_blobs") , kind : ConfiguredFeatureKind :: NetherrackReplaceBlobs (NetherrackReplaceBlobsConfiguration { target : BlockStateData { block : & vanilla_blocks :: NETHERRACK , properties : & [] , } , state : BlockStateData { block : & vanilla_blocks :: BLACKSTONE , properties : & [] , } , radius : IntProvider :: Uniform { min_inclusive : 3i32 , max_inclusive : 7i32 , } , }) , id : OnceLock :: new () , } }) ; pub static BLUE_ICE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("blue_ice") , kind : ConfiguredFeatureKind :: BlueIce , id : OnceLock :: new () , } }) ; pub static BONUS_CHEST : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("bonus_chest") , kind : ConfiguredFeatureKind :: BonusChest , id : OnceLock :: new () , } }) ; pub static BROWN_MUSHROOM : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("brown_mushroom") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BROWN_MUSHROOM , properties : & [] , } } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static BUSH : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("bush") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BUSH , properties : & [] , } } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static CACTUS : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("cactus") , kind : ConfiguredFeatureKind :: BlockColumn (BlockColumnConfiguration { direction : Direction :: Up , allowed_placement : BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("air") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , layers : vec ! [BlockColumnLayer { height : IntProvider :: BiasedToBottom { min_inclusive : 1i32 , max_inclusive : 3i32 , } , provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: CACTUS , properties : & [("age" , "0")] , } } } , BlockColumnLayer { height : IntProvider :: WeightedList { distribution : vec ! [WeightedIntProvider { data : IntProvider :: Constant (0i32) , weight : 3i32 } , WeightedIntProvider { data : IntProvider :: Constant (1i32) , weight : 1i32 }] } , provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: CACTUS_FLOWER , properties : & [] , } } }] , prioritize_tip : false , }) , id : OnceLock :: new () , } }) ; pub static CAVE_VINE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("cave_vine") , kind : ConfiguredFeatureKind :: BlockColumn (BlockColumnConfiguration { direction : Direction :: Down , allowed_placement : BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("air") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , layers : vec ! [BlockColumnLayer { height : IntProvider :: WeightedList { distribution : vec ! [WeightedIntProvider { data : IntProvider :: Uniform { min_inclusive : 0i32 , max_inclusive : 19i32 , } , weight : 2i32 } , WeightedIntProvider { data : IntProvider :: Uniform { min_inclusive : 0i32 , max_inclusive : 2i32 , } , weight : 3i32 } , WeightedIntProvider { data : IntProvider :: Uniform { min_inclusive : 0i32 , max_inclusive : 6i32 , } , weight : 10i32 }] } , provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: CAVE_VINES_PLANT , properties : & [("berries" , "false")] , } , weight : 4i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: CAVE_VINES_PLANT , properties : & [("berries" , "true")] , } , weight : 1i32 }] } } , BlockColumnLayer { height : IntProvider :: Constant (1i32) , provider : BlockStateProvider :: RandomizedInt { property : "age" . to_string () , source : Box :: new (BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: CAVE_VINES , properties : & [("age" , "0") , ("berries" , "false")] , } , weight : 4i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: CAVE_VINES , properties : & [("age" , "0") , ("berries" , "true")] , } , weight : 1i32 }] }) , values : IntProvider :: Uniform { min_inclusive : 23i32 , max_inclusive : 25i32 , } , } }] , prioritize_tip : true , }) , id : OnceLock :: new () , } }) ; pub static CAVE_VINE_IN_MOSS : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("cave_vine_in_moss") , kind : ConfiguredFeatureKind :: BlockColumn (BlockColumnConfiguration { direction : Direction :: Down , allowed_placement : BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("air") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , layers : vec ! [BlockColumnLayer { height : IntProvider :: WeightedList { distribution : vec ! [WeightedIntProvider { data : IntProvider :: Uniform { min_inclusive : 0i32 , max_inclusive : 3i32 , } , weight : 5i32 } , WeightedIntProvider { data : IntProvider :: Uniform { min_inclusive : 1i32 , max_inclusive : 7i32 , } , weight : 1i32 }] } , provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: CAVE_VINES_PLANT , properties : & [("berries" , "false")] , } , weight : 4i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: CAVE_VINES_PLANT , properties : & [("berries" , "true")] , } , weight : 1i32 }] } } , BlockColumnLayer { height : IntProvider :: Constant (1i32) , provider : BlockStateProvider :: RandomizedInt { property : "age" . to_string () , source : Box :: new (BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: CAVE_VINES , properties : & [("age" , "0") , ("berries" , "false")] , } , weight : 4i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: CAVE_VINES , properties : & [("age" , "0") , ("berries" , "true")] , } , weight : 1i32 }] }) , values : IntProvider :: Uniform { min_inclusive : 23i32 , max_inclusive : 25i32 , } , } }] , prioritize_tip : true , }) , id : OnceLock :: new () , } }) ; pub static CHERRY : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("cherry") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: CHERRY_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: CHERRY_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Cherry (CherryTrunkPlacer { base_height : 7i32 , height_rand_a : 1i32 , height_rand_b : 0i32 , branch_count : IntProvider :: WeightedList { distribution : vec ! [WeightedIntProvider { data : IntProvider :: Constant (1i32) , weight : 1i32 } , WeightedIntProvider { data : IntProvider :: Constant (2i32) , weight : 1i32 } , WeightedIntProvider { data : IntProvider :: Constant (3i32) , weight : 1i32 }] } , branch_horizontal_length : IntProvider :: Uniform { min_inclusive : 2i32 , max_inclusive : 4i32 , } , branch_start_offset_from_top : UniformIntProvider { min_inclusive : - 4i32 , max_inclusive : - 3i32 , } , branch_end_offset_from_top : IntProvider :: Uniform { min_inclusive : - 1i32 , max_inclusive : 0i32 , } , }) , foliage_placer : FoliagePlacer :: Cherry (CherryFoliagePlacer { radius : IntProvider :: Constant (4i32) , offset : IntProvider :: Constant (0i32) , height : IntProvider :: Constant (5i32) , wide_bottom_layer_hole_chance : 0.25f32 , corner_hole_chance : 0.25f32 , hanging_leaves_chance : 0.16666667f32 , hanging_leaves_extension_chance : 0.33333334f32 , }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , upper_size : 2i32 , min_clipped_height : None , }) , decorators : vec ! [] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static CHERRY_BEES_005 : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("cherry_bees_005") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: CHERRY_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: CHERRY_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Cherry (CherryTrunkPlacer { base_height : 7i32 , height_rand_a : 1i32 , height_rand_b : 0i32 , branch_count : IntProvider :: WeightedList { distribution : vec ! [WeightedIntProvider { data : IntProvider :: Constant (1i32) , weight : 1i32 } , WeightedIntProvider { data : IntProvider :: Constant (2i32) , weight : 1i32 } , WeightedIntProvider { data : IntProvider :: Constant (3i32) , weight : 1i32 }] } , branch_horizontal_length : IntProvider :: Uniform { min_inclusive : 2i32 , max_inclusive : 4i32 , } , branch_start_offset_from_top : UniformIntProvider { min_inclusive : - 4i32 , max_inclusive : - 3i32 , } , branch_end_offset_from_top : IntProvider :: Uniform { min_inclusive : - 1i32 , max_inclusive : 0i32 , } , }) , foliage_placer : FoliagePlacer :: Cherry (CherryFoliagePlacer { radius : IntProvider :: Constant (4i32) , offset : IntProvider :: Constant (0i32) , height : IntProvider :: Constant (5i32) , wide_bottom_layer_hole_chance : 0.25f32 , corner_hole_chance : 0.25f32 , hanging_leaves_chance : 0.16666667f32 , hanging_leaves_extension_chance : 0.33333334f32 , }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , upper_size : 2i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: Beehive { probability : 0.05f32 }] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static CHORUS_PLANT : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("chorus_plant") , kind : ConfiguredFeatureKind :: ChorusPlant , id : OnceLock :: new () , } }) ; pub static CLAY_POOL_WITH_DRIPLEAVES : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("clay_pool_with_dripleaves") , kind : ConfiguredFeatureKind :: WaterloggedVegetationPatch (VegetationPatchConfiguration { replaceable : Identifier :: vanilla_static ("lush_ground_replaceable") , ground_state : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: CLAY , properties : & [] , } } , vegetation_feature : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Reference (& crate :: vanilla_configured_features :: DRIPLEAF) , placement : vec ! [] , })) , surface : VerticalSurface :: Floor , depth : IntProvider :: Constant (3i32) , extra_bottom_block_chance : 0.8f32 , vertical_range : 5i32 , vegetation_chance : 0.1f32 , xz_radius : IntProvider :: Uniform { min_inclusive : 4i32 , max_inclusive : 7i32 , } , extra_edge_column_chance : 0.7f32 , }) , id : OnceLock :: new () , } }) ; pub static CLAY_WITH_DRIPLEAVES : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("clay_with_dripleaves") , kind : ConfiguredFeatureKind :: VegetationPatch (VegetationPatchConfiguration { replaceable : Identifier :: vanilla_static ("lush_ground_replaceable") , ground_state : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: CLAY , properties : & [] , } } , vegetation_feature : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Reference (& crate :: vanilla_configured_features :: DRIPLEAF) , placement : vec ! [] , })) , surface : VerticalSurface :: Floor , depth : IntProvider :: Constant (3i32) , extra_bottom_block_chance : 0.8f32 , vertical_range : 2i32 , vegetation_chance : 0.05f32 , xz_radius : IntProvider :: Uniform { min_inclusive : 4i32 , max_inclusive : 7i32 , } , extra_edge_column_chance : 0.7f32 , }) , id : OnceLock :: new () , } }) ; pub static CRIMSON_FOREST_VEGETATION : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("crimson_forest_vegetation") , kind : ConfiguredFeatureKind :: NetherForestVegetation (NetherForestVegetationConfiguration { state_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: CRIMSON_ROOTS , properties : & [] , } , weight : 87i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: CRIMSON_FUNGUS , properties : & [] , } , weight : 11i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WARPED_FUNGUS , properties : & [] , } , weight : 1i32 }] } , spread_width : 8i32 , spread_height : 4i32 , }) , id : OnceLock :: new () , } }) ; pub static CRIMSON_FOREST_VEGETATION_BONEMEAL : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("crimson_forest_vegetation_bonemeal") , kind : ConfiguredFeatureKind :: NetherForestVegetation (NetherForestVegetationConfiguration { state_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: CRIMSON_ROOTS , properties : & [] , } , weight : 87i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: CRIMSON_FUNGUS , properties : & [] , } , weight : 11i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WARPED_FUNGUS , properties : & [] , } , weight : 1i32 }] } , spread_width : 3i32 , spread_height : 1i32 , }) , id : OnceLock :: new () , } }) ; pub static CRIMSON_FUNGUS : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("crimson_fungus") , kind : ConfiguredFeatureKind :: HugeFungus (HugeFungusConfiguration { valid_base_block : BlockStateData { block : & vanilla_blocks :: CRIMSON_NYLIUM , properties : & [] , } , stem_state : BlockStateData { block : & vanilla_blocks :: CRIMSON_STEM , properties : & [("axis" , "y")] , } , hat_state : BlockStateData { block : & vanilla_blocks :: NETHER_WART_BLOCK , properties : & [] , } , decor_state : BlockStateData { block : & vanilla_blocks :: SHROOMLIGHT , properties : & [] , } , replaceable_blocks : BlockPredicate :: MatchingBlocks { blocks : BlockRefList (vec ! [& vanilla_blocks :: OAK_SAPLING , & vanilla_blocks :: SPRUCE_SAPLING , & vanilla_blocks :: BIRCH_SAPLING , & vanilla_blocks :: JUNGLE_SAPLING , & vanilla_blocks :: ACACIA_SAPLING , & vanilla_blocks :: CHERRY_SAPLING , & vanilla_blocks :: DARK_OAK_SAPLING , & vanilla_blocks :: PALE_OAK_SAPLING , & vanilla_blocks :: MANGROVE_PROPAGULE , & vanilla_blocks :: DANDELION , & vanilla_blocks :: TORCHFLOWER , & vanilla_blocks :: POPPY , & vanilla_blocks :: BLUE_ORCHID , & vanilla_blocks :: ALLIUM , & vanilla_blocks :: AZURE_BLUET , & vanilla_blocks :: RED_TULIP , & vanilla_blocks :: ORANGE_TULIP , & vanilla_blocks :: WHITE_TULIP , & vanilla_blocks :: PINK_TULIP , & vanilla_blocks :: OXEYE_DAISY , & vanilla_blocks :: CORNFLOWER , & vanilla_blocks :: WITHER_ROSE , & vanilla_blocks :: LILY_OF_THE_VALLEY , & vanilla_blocks :: BROWN_MUSHROOM , & vanilla_blocks :: RED_MUSHROOM , & vanilla_blocks :: WHEAT , & vanilla_blocks :: SUGAR_CANE , & vanilla_blocks :: ATTACHED_PUMPKIN_STEM , & vanilla_blocks :: ATTACHED_MELON_STEM , & vanilla_blocks :: PUMPKIN_STEM , & vanilla_blocks :: MELON_STEM , & vanilla_blocks :: LILY_PAD , & vanilla_blocks :: NETHER_WART , & vanilla_blocks :: COCOA , & vanilla_blocks :: CARROTS , & vanilla_blocks :: POTATOES , & vanilla_blocks :: CHORUS_PLANT , & vanilla_blocks :: CHORUS_FLOWER , & vanilla_blocks :: TORCHFLOWER_CROP , & vanilla_blocks :: PITCHER_CROP , & vanilla_blocks :: BEETROOTS , & vanilla_blocks :: SWEET_BERRY_BUSH , & vanilla_blocks :: WARPED_FUNGUS , & vanilla_blocks :: CRIMSON_FUNGUS , & vanilla_blocks :: WEEPING_VINES , & vanilla_blocks :: WEEPING_VINES_PLANT , & vanilla_blocks :: TWISTING_VINES , & vanilla_blocks :: TWISTING_VINES_PLANT , & vanilla_blocks :: CAVE_VINES , & vanilla_blocks :: CAVE_VINES_PLANT , & vanilla_blocks :: SPORE_BLOSSOM , & vanilla_blocks :: AZALEA , & vanilla_blocks :: FLOWERING_AZALEA , & vanilla_blocks :: MOSS_CARPET , & vanilla_blocks :: PINK_PETALS , & vanilla_blocks :: WILDFLOWERS , & vanilla_blocks :: BIG_DRIPLEAF , & vanilla_blocks :: BIG_DRIPLEAF_STEM , & vanilla_blocks :: SMALL_DRIPLEAF]) , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , planted : false , }) , id : OnceLock :: new () , } }) ; pub static CRIMSON_FUNGUS_PLANTED : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("crimson_fungus_planted") , kind : ConfiguredFeatureKind :: HugeFungus (HugeFungusConfiguration { valid_base_block : BlockStateData { block : & vanilla_blocks :: CRIMSON_NYLIUM , properties : & [] , } , stem_state : BlockStateData { block : & vanilla_blocks :: CRIMSON_STEM , properties : & [("axis" , "y")] , } , hat_state : BlockStateData { block : & vanilla_blocks :: NETHER_WART_BLOCK , properties : & [] , } , decor_state : BlockStateData { block : & vanilla_blocks :: SHROOMLIGHT , properties : & [] , } , replaceable_blocks : BlockPredicate :: MatchingBlocks { blocks : BlockRefList (vec ! [& vanilla_blocks :: OAK_SAPLING , & vanilla_blocks :: SPRUCE_SAPLING , & vanilla_blocks :: BIRCH_SAPLING , & vanilla_blocks :: JUNGLE_SAPLING , & vanilla_blocks :: ACACIA_SAPLING , & vanilla_blocks :: CHERRY_SAPLING , & vanilla_blocks :: DARK_OAK_SAPLING , & vanilla_blocks :: PALE_OAK_SAPLING , & vanilla_blocks :: MANGROVE_PROPAGULE , & vanilla_blocks :: DANDELION , & vanilla_blocks :: TORCHFLOWER , & vanilla_blocks :: POPPY , & vanilla_blocks :: BLUE_ORCHID , & vanilla_blocks :: ALLIUM , & vanilla_blocks :: AZURE_BLUET , & vanilla_blocks :: RED_TULIP , & vanilla_blocks :: ORANGE_TULIP , & vanilla_blocks :: WHITE_TULIP , & vanilla_blocks :: PINK_TULIP , & vanilla_blocks :: OXEYE_DAISY , & vanilla_blocks :: CORNFLOWER , & vanilla_blocks :: WITHER_ROSE , & vanilla_blocks :: LILY_OF_THE_VALLEY , & vanilla_blocks :: BROWN_MUSHROOM , & vanilla_blocks :: RED_MUSHROOM , & vanilla_blocks :: WHEAT , & vanilla_blocks :: SUGAR_CANE , & vanilla_blocks :: ATTACHED_PUMPKIN_STEM , & vanilla_blocks :: ATTACHED_MELON_STEM , & vanilla_blocks :: PUMPKIN_STEM , & vanilla_blocks :: MELON_STEM , & vanilla_blocks :: LILY_PAD , & vanilla_blocks :: NETHER_WART , & vanilla_blocks :: COCOA , & vanilla_blocks :: CARROTS , & vanilla_blocks :: POTATOES , & vanilla_blocks :: CHORUS_PLANT , & vanilla_blocks :: CHORUS_FLOWER , & vanilla_blocks :: TORCHFLOWER_CROP , & vanilla_blocks :: PITCHER_CROP , & vanilla_blocks :: BEETROOTS , & vanilla_blocks :: SWEET_BERRY_BUSH , & vanilla_blocks :: WARPED_FUNGUS , & vanilla_blocks :: CRIMSON_FUNGUS , & vanilla_blocks :: WEEPING_VINES , & vanilla_blocks :: WEEPING_VINES_PLANT , & vanilla_blocks :: TWISTING_VINES , & vanilla_blocks :: TWISTING_VINES_PLANT , & vanilla_blocks :: CAVE_VINES , & vanilla_blocks :: CAVE_VINES_PLANT , & vanilla_blocks :: SPORE_BLOSSOM , & vanilla_blocks :: AZALEA , & vanilla_blocks :: FLOWERING_AZALEA , & vanilla_blocks :: MOSS_CARPET , & vanilla_blocks :: PINK_PETALS , & vanilla_blocks :: WILDFLOWERS , & vanilla_blocks :: BIG_DRIPLEAF , & vanilla_blocks :: BIG_DRIPLEAF_STEM , & vanilla_blocks :: SMALL_DRIPLEAF]) , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , planted : true , }) , id : OnceLock :: new () , } }) ; pub static CRIMSON_ROOTS : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("crimson_roots") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: CRIMSON_ROOTS , properties : & [] , } } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static DARK_FOREST_VEGETATION : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("dark_forest_vegetation") , kind : ConfiguredFeatureKind :: RandomSelector (RandomSelectorConfiguration { features : vec ! [WeightedPlacedFeature { chance : 0.025f32 , feature : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Reference (& crate :: vanilla_configured_features :: HUGE_BROWN_MUSHROOM) , placement : vec ! [] , })) } , WeightedPlacedFeature { chance : 0.05f32 , feature : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Reference (& crate :: vanilla_configured_features :: HUGE_RED_MUSHROOM) , placement : vec ! [] , })) } , WeightedPlacedFeature { chance : 0.6666667f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: DARK_OAK_LEAF_LITTER) } , WeightedPlacedFeature { chance : 0.0025f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FALLEN_BIRCH_TREE) } , WeightedPlacedFeature { chance : 0.2f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: BIRCH_LEAF_LITTER) } , WeightedPlacedFeature { chance : 0.0125f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FALLEN_OAK_TREE) } , WeightedPlacedFeature { chance : 0.1f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FANCY_OAK_LEAF_LITTER) }] , default : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: OAK_LEAF_LITTER) , }) , id : OnceLock :: new () , } }) ; pub static DARK_OAK : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("dark_oak") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DARK_OAK_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DARK_OAK_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: DarkOak (TrunkPlacerBase { base_height : 6i32 , height_rand_a : 2i32 , height_rand_b : 1i32 , }) , foliage_placer : FoliagePlacer :: DarkOak (FoliagePlacerBase { radius : IntProvider :: Constant (0i32) , offset : IntProvider :: Constant (0i32) }) , minimum_size : FeatureSize :: ThreeLayers (ThreeLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , middle_size : 1i32 , upper_limit : 1i32 , upper_size : 2i32 , min_clipped_height : None , }) , decorators : vec ! [] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static DARK_OAK_LEAF_LITTER : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("dark_oak_leaf_litter") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DARK_OAK_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DARK_OAK_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: DarkOak (TrunkPlacerBase { base_height : 6i32 , height_rand_a : 2i32 , height_rand_b : 1i32 , }) , foliage_placer : FoliagePlacer :: DarkOak (FoliagePlacerBase { radius : IntProvider :: Constant (0i32) , offset : IntProvider :: Constant (0i32) }) , minimum_size : FeatureSize :: ThreeLayers (ThreeLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , middle_size : 1i32 , upper_limit : 1i32 , upper_size : 2i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: PlaceOnGround (PlaceOnGroundDecorator { block_state_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "3")] , } , weight : 1i32 }] } , tries : 96i32 , radius : 4i32 , height : 2i32 , }) , TreeDecorator :: PlaceOnGround (PlaceOnGroundDecorator { block_state_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "4")] , } , weight : 1i32 }] } , tries : 150i32 , radius : 2i32 , height : 2i32 , })] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static DEAD_BUSH : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("dead_bush") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DEAD_BUSH , properties : & [] , } } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static DELTA : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("delta") , kind : ConfiguredFeatureKind :: DeltaFeature (DeltaFeatureConfiguration { contents : BlockStateData { block : & vanilla_blocks :: LAVA , properties : & [("level" , "0")] , } , rim : BlockStateData { block : & vanilla_blocks :: MAGMA_BLOCK , properties : & [] , } , size : IntProvider :: Uniform { min_inclusive : 3i32 , max_inclusive : 7i32 , } , rim_size : IntProvider :: Uniform { min_inclusive : 0i32 , max_inclusive : 2i32 , } , }) , id : OnceLock :: new () , } }) ; pub static DESERT_WELL : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("desert_well") , kind : ConfiguredFeatureKind :: DesertWell , id : OnceLock :: new () , } }) ; pub static DISK_CLAY : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("disk_clay") , kind : ConfiguredFeatureKind :: Disk (DiskConfiguration { state_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: CLAY , properties : & [] , } } , target : BlockPredicate :: MatchingBlocks { blocks : BlockRefList (vec ! [& vanilla_blocks :: DIRT , & vanilla_blocks :: CLAY]) , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , radius : IntProvider :: Uniform { min_inclusive : 2i32 , max_inclusive : 3i32 , } , half_height : 1i32 , }) , id : OnceLock :: new () , } }) ; pub static DISK_GRASS : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("disk_grass") , kind : ConfiguredFeatureKind :: Disk (DiskConfiguration { state_provider : BlockStateProvider :: RuleBased { fallback : Some (Box :: new (BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } })) , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: AnyOf { predicates : vec ! [BlockPredicate :: Solid { offset : IVec3 :: new (0i32 , 1i32 , 0i32) } , BlockPredicate :: MatchingFluids { fluids : FluidRefList (vec ! [& vanilla_fluids :: WATER]) , offset : IVec3 :: new (0i32 , 1i32 , 0i32) }] }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: GRASS_BLOCK , properties : & [("snowy" , "false")] , } } , }] , } , target : BlockPredicate :: MatchingBlocks { blocks : BlockRefList (vec ! [& vanilla_blocks :: DIRT , & vanilla_blocks :: MUD]) , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , radius : IntProvider :: Uniform { min_inclusive : 2i32 , max_inclusive : 6i32 , } , half_height : 2i32 , }) , id : OnceLock :: new () , } }) ; pub static DISK_GRAVEL : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("disk_gravel") , kind : ConfiguredFeatureKind :: Disk (DiskConfiguration { state_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: GRAVEL , properties : & [] , } } , target : BlockPredicate :: MatchingBlocks { blocks : BlockRefList (vec ! [& vanilla_blocks :: DIRT , & vanilla_blocks :: GRASS_BLOCK]) , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , radius : IntProvider :: Uniform { min_inclusive : 2i32 , max_inclusive : 5i32 , } , half_height : 2i32 , }) , id : OnceLock :: new () , } }) ; pub static DISK_SAND : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("disk_sand") , kind : ConfiguredFeatureKind :: Disk (DiskConfiguration { state_provider : BlockStateProvider :: RuleBased { fallback : Some (Box :: new (BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SAND , properties : & [] , } })) , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: MatchingBlocks { blocks : BlockRefList (vec ! [& vanilla_blocks :: AIR]) , offset : IVec3 :: new (0i32 , - 1i32 , 0i32) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SANDSTONE , properties : & [] , } } , }] , } , target : BlockPredicate :: MatchingBlocks { blocks : BlockRefList (vec ! [& vanilla_blocks :: DIRT , & vanilla_blocks :: GRASS_BLOCK]) , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , radius : IntProvider :: Uniform { min_inclusive : 2i32 , max_inclusive : 6i32 , } , half_height : 2i32 , }) , id : OnceLock :: new () , } }) ; pub static DRIPLEAF : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("dripleaf") , kind : ConfiguredFeatureKind :: SimpleRandomSelector (SimpleRandomSelectorConfiguration { features : vec ! [PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: SMALL_DRIPLEAF , properties : & [("facing" , "east") , ("half" , "lower") , ("waterlogged" , "false")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: SMALL_DRIPLEAF , properties : & [("facing" , "west") , ("half" , "lower") , ("waterlogged" , "false")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: SMALL_DRIPLEAF , properties : & [("facing" , "north") , ("half" , "lower") , ("waterlogged" , "false")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: SMALL_DRIPLEAF , properties : & [("facing" , "south") , ("half" , "lower") , ("waterlogged" , "false")] , } , weight : 1i32 }] } , schedule_tick : false , }))) , placement : vec ! [] , })) , PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: BlockColumn (BlockColumnConfiguration { direction : Direction :: Up , allowed_placement : BlockPredicate :: AnyOf { predicates : vec ! [BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("air") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , BlockPredicate :: MatchingBlocks { blocks : BlockRefList (vec ! [& vanilla_blocks :: WATER]) , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }] } , layers : vec ! [BlockColumnLayer { height : IntProvider :: WeightedList { distribution : vec ! [WeightedIntProvider { data : IntProvider :: Uniform { min_inclusive : 0i32 , max_inclusive : 4i32 , } , weight : 2i32 } , WeightedIntProvider { data : IntProvider :: Constant (0i32) , weight : 1i32 }] } , provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIG_DRIPLEAF_STEM , properties : & [("facing" , "east") , ("waterlogged" , "false")] , } } } , BlockColumnLayer { height : IntProvider :: Constant (1i32) , provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIG_DRIPLEAF , properties : & [("facing" , "east") , ("tilt" , "none") , ("waterlogged" , "false")] , } } }] , prioritize_tip : true , }))) , placement : vec ! [] , })) , PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: BlockColumn (BlockColumnConfiguration { direction : Direction :: Up , allowed_placement : BlockPredicate :: AnyOf { predicates : vec ! [BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("air") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , BlockPredicate :: MatchingBlocks { blocks : BlockRefList (vec ! [& vanilla_blocks :: WATER]) , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }] } , layers : vec ! [BlockColumnLayer { height : IntProvider :: WeightedList { distribution : vec ! [WeightedIntProvider { data : IntProvider :: Uniform { min_inclusive : 0i32 , max_inclusive : 4i32 , } , weight : 2i32 } , WeightedIntProvider { data : IntProvider :: Constant (0i32) , weight : 1i32 }] } , provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIG_DRIPLEAF_STEM , properties : & [("facing" , "west") , ("waterlogged" , "false")] , } } } , BlockColumnLayer { height : IntProvider :: Constant (1i32) , provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIG_DRIPLEAF , properties : & [("facing" , "west") , ("tilt" , "none") , ("waterlogged" , "false")] , } } }] , prioritize_tip : true , }))) , placement : vec ! [] , })) , PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: BlockColumn (BlockColumnConfiguration { direction : Direction :: Up , allowed_placement : BlockPredicate :: AnyOf { predicates : vec ! [BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("air") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , BlockPredicate :: MatchingBlocks { blocks : BlockRefList (vec ! [& vanilla_blocks :: WATER]) , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }] } , layers : vec ! [BlockColumnLayer { height : IntProvider :: WeightedList { distribution : vec ! [WeightedIntProvider { data : IntProvider :: Uniform { min_inclusive : 0i32 , max_inclusive : 4i32 , } , weight : 2i32 } , WeightedIntProvider { data : IntProvider :: Constant (0i32) , weight : 1i32 }] } , provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIG_DRIPLEAF_STEM , properties : & [("facing" , "south") , ("waterlogged" , "false")] , } } } , BlockColumnLayer { height : IntProvider :: Constant (1i32) , provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIG_DRIPLEAF , properties : & [("facing" , "south") , ("tilt" , "none") , ("waterlogged" , "false")] , } } }] , prioritize_tip : true , }))) , placement : vec ! [] , })) , PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: BlockColumn (BlockColumnConfiguration { direction : Direction :: Up , allowed_placement : BlockPredicate :: AnyOf { predicates : vec ! [BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("air") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , BlockPredicate :: MatchingBlocks { blocks : BlockRefList (vec ! [& vanilla_blocks :: WATER]) , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }] } , layers : vec ! [BlockColumnLayer { height : IntProvider :: WeightedList { distribution : vec ! [WeightedIntProvider { data : IntProvider :: Uniform { min_inclusive : 0i32 , max_inclusive : 4i32 , } , weight : 2i32 } , WeightedIntProvider { data : IntProvider :: Constant (0i32) , weight : 1i32 }] } , provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIG_DRIPLEAF_STEM , properties : & [("facing" , "north") , ("waterlogged" , "false")] , } } } , BlockColumnLayer { height : IntProvider :: Constant (1i32) , provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIG_DRIPLEAF , properties : & [("facing" , "north") , ("tilt" , "none") , ("waterlogged" , "false")] , } } }] , prioritize_tip : true , }))) , placement : vec ! [] , }))] , }) , id : OnceLock :: new () , } }) ; pub static DRIPSTONE_CLUSTER : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("dripstone_cluster") , kind : ConfiguredFeatureKind :: SpeleothemCluster (SpeleothemClusterConfiguration { base_block : BlockStateData { block : & vanilla_blocks :: DRIPSTONE_BLOCK , properties : & [] , } , pointed_block : BlockStateData { block : & vanilla_blocks :: POINTED_DRIPSTONE , properties : & [("thickness" , "tip") , ("vertical_direction" , "up") , ("waterlogged" , "false")] , } , replaceable_blocks : BlockHolderSet :: Tag (Identifier :: vanilla_static ("dripstone_replaceable_blocks")) , floor_to_ceiling_search_range : 12i32 , height : IntProvider :: Uniform { min_inclusive : 3i32 , max_inclusive : 6i32 , } , radius : IntProvider :: Uniform { min_inclusive : 2i32 , max_inclusive : 8i32 , } , max_stalagmite_stalactite_height_diff : 1i32 , height_deviation : 3i32 , speleothem_block_layer_thickness : IntProvider :: Uniform { min_inclusive : 2i32 , max_inclusive : 4i32 , } , density : FloatProvider :: Uniform { min_inclusive : 0.3f32 , max_exclusive : 0.7f32 , } , wetness : FloatProvider :: ClampedNormal { mean : 0.1f32 , deviation : 0.3f32 , min : 0.1f32 , max : 0.9f32 , } , chance_of_speleothem_at_max_distance_from_center : 0.1f32 , max_distance_from_edge_affecting_chance_of_speleothem : 3i32 , max_distance_from_center_affecting_height_bias : 8i32 , }) , id : OnceLock :: new () , } }) ; pub static DRY_GRASS : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("dry_grass") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: SHORT_DRY_GRASS , properties : & [] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: TALL_DRY_GRASS , properties : & [] , } , weight : 1i32 }] } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static END_GATEWAY_DELAYED : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("end_gateway_delayed") , kind : ConfiguredFeatureKind :: EndGateway (EndGatewayConfiguration { exit : None , exact : false , }) , id : OnceLock :: new () , } }) ; pub static END_GATEWAY_RETURN : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("end_gateway_return") , kind : ConfiguredFeatureKind :: EndGateway (EndGatewayConfiguration { exit : Some (IVec3 :: new (100i32 , 50i32 , 0i32)) , exact : true , }) , id : OnceLock :: new () , } }) ; pub static END_ISLAND : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("end_island") , kind : ConfiguredFeatureKind :: EndIsland , id : OnceLock :: new () , } }) ; pub static END_PLATFORM : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("end_platform") , kind : ConfiguredFeatureKind :: EndPlatform , id : OnceLock :: new () , } }) ; pub static END_SPIKE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("end_spike") , kind : ConfiguredFeatureKind :: EndSpike (EndSpikeConfiguration { spikes : vec ! [] , crystal_invulnerable : false , crystal_beam_target : None , }) , id : OnceLock :: new () , } }) ; pub static FALLEN_BIRCH_TREE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("fallen_birch_tree") , kind : ConfiguredFeatureKind :: FallenTree (FallenTreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIRCH_LOG , properties : & [("axis" , "y")] , } } , log_length : IntProvider :: Uniform { min_inclusive : 5i32 , max_inclusive : 8i32 , } , stump_decorators : vec ! [] , log_decorators : vec ! [TreeDecorator :: AttachedToLogs (AttachedToLogsDecorator { probability : 0.1f32 , block_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: RED_MUSHROOM , properties : & [] , } , weight : 2i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: BROWN_MUSHROOM , properties : & [] , } , weight : 1i32 }] } , directions : vec ! [Direction :: Up] , })] , }) , id : OnceLock :: new () , } }) ; pub static FALLEN_JUNGLE_TREE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("fallen_jungle_tree") , kind : ConfiguredFeatureKind :: FallenTree (FallenTreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: JUNGLE_LOG , properties : & [("axis" , "y")] , } } , log_length : IntProvider :: Uniform { min_inclusive : 4i32 , max_inclusive : 11i32 , } , stump_decorators : vec ! [TreeDecorator :: TrunkVine] , log_decorators : vec ! [TreeDecorator :: AttachedToLogs (AttachedToLogsDecorator { probability : 0.1f32 , block_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: RED_MUSHROOM , properties : & [] , } , weight : 2i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: BROWN_MUSHROOM , properties : & [] , } , weight : 1i32 }] } , directions : vec ! [Direction :: Up] , })] , }) , id : OnceLock :: new () , } }) ; pub static FALLEN_OAK_TREE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("fallen_oak_tree") , kind : ConfiguredFeatureKind :: FallenTree (FallenTreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LOG , properties : & [("axis" , "y")] , } } , log_length : IntProvider :: Uniform { min_inclusive : 4i32 , max_inclusive : 7i32 , } , stump_decorators : vec ! [TreeDecorator :: TrunkVine] , log_decorators : vec ! [TreeDecorator :: AttachedToLogs (AttachedToLogsDecorator { probability : 0.1f32 , block_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: RED_MUSHROOM , properties : & [] , } , weight : 2i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: BROWN_MUSHROOM , properties : & [] , } , weight : 1i32 }] } , directions : vec ! [Direction :: Up] , })] , }) , id : OnceLock :: new () , } }) ; pub static FALLEN_SPRUCE_TREE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("fallen_spruce_tree") , kind : ConfiguredFeatureKind :: FallenTree (FallenTreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SPRUCE_LOG , properties : & [("axis" , "y")] , } } , log_length : IntProvider :: Uniform { min_inclusive : 6i32 , max_inclusive : 10i32 , } , stump_decorators : vec ! [] , log_decorators : vec ! [TreeDecorator :: AttachedToLogs (AttachedToLogsDecorator { probability : 0.1f32 , block_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: RED_MUSHROOM , properties : & [] , } , weight : 2i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: BROWN_MUSHROOM , properties : & [] , } , weight : 1i32 }] } , directions : vec ! [Direction :: Up] , })] , }) , id : OnceLock :: new () , } }) ; pub static FALLEN_SUPER_BIRCH_TREE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("fallen_super_birch_tree") , kind : ConfiguredFeatureKind :: FallenTree (FallenTreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIRCH_LOG , properties : & [("axis" , "y")] , } } , log_length : IntProvider :: Uniform { min_inclusive : 5i32 , max_inclusive : 15i32 , } , stump_decorators : vec ! [] , log_decorators : vec ! [TreeDecorator :: AttachedToLogs (AttachedToLogsDecorator { probability : 0.1f32 , block_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: RED_MUSHROOM , properties : & [] , } , weight : 2i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: BROWN_MUSHROOM , properties : & [] , } , weight : 1i32 }] } , directions : vec ! [Direction :: Up] , })] , }) , id : OnceLock :: new () , } }) ; pub static FANCY_OAK : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("fancy_oak") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Fancy (TrunkPlacerBase { base_height : 3i32 , height_rand_a : 11i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Fancy (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (4i32) , height : IntProvider :: Constant (4i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 0i32 , lower_size : 0i32 , upper_size : 0i32 , min_clipped_height : Some (4i32) , }) , decorators : vec ! [] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static FANCY_OAK_BEES : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("fancy_oak_bees") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Fancy (TrunkPlacerBase { base_height : 3i32 , height_rand_a : 11i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Fancy (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (4i32) , height : IntProvider :: Constant (4i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 0i32 , lower_size : 0i32 , upper_size : 0i32 , min_clipped_height : Some (4i32) , }) , decorators : vec ! [TreeDecorator :: Beehive { probability : 1f32 }] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static FANCY_OAK_BEES_0002_LEAF_LITTER : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("fancy_oak_bees_0002_leaf_litter") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Fancy (TrunkPlacerBase { base_height : 3i32 , height_rand_a : 11i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Fancy (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (4i32) , height : IntProvider :: Constant (4i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 0i32 , lower_size : 0i32 , upper_size : 0i32 , min_clipped_height : Some (4i32) , }) , decorators : vec ! [TreeDecorator :: Beehive { probability : 0.002f32 } , TreeDecorator :: PlaceOnGround (PlaceOnGroundDecorator { block_state_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "3")] , } , weight : 1i32 }] } , tries : 96i32 , radius : 4i32 , height : 2i32 , }) , TreeDecorator :: PlaceOnGround (PlaceOnGroundDecorator { block_state_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "4")] , } , weight : 1i32 }] } , tries : 150i32 , radius : 2i32 , height : 2i32 , })] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static FANCY_OAK_BEES_002 : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("fancy_oak_bees_002") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Fancy (TrunkPlacerBase { base_height : 3i32 , height_rand_a : 11i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Fancy (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (4i32) , height : IntProvider :: Constant (4i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 0i32 , lower_size : 0i32 , upper_size : 0i32 , min_clipped_height : Some (4i32) , }) , decorators : vec ! [TreeDecorator :: Beehive { probability : 0.02f32 }] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static FANCY_OAK_BEES_005 : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("fancy_oak_bees_005") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Fancy (TrunkPlacerBase { base_height : 3i32 , height_rand_a : 11i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Fancy (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (4i32) , height : IntProvider :: Constant (4i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 0i32 , lower_size : 0i32 , upper_size : 0i32 , min_clipped_height : Some (4i32) , }) , decorators : vec ! [TreeDecorator :: Beehive { probability : 0.05f32 }] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static FANCY_OAK_LEAF_LITTER : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("fancy_oak_leaf_litter") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Fancy (TrunkPlacerBase { base_height : 3i32 , height_rand_a : 11i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Fancy (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (4i32) , height : IntProvider :: Constant (4i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 0i32 , lower_size : 0i32 , upper_size : 0i32 , min_clipped_height : Some (4i32) , }) , decorators : vec ! [TreeDecorator :: PlaceOnGround (PlaceOnGroundDecorator { block_state_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "3")] , } , weight : 1i32 }] } , tries : 96i32 , radius : 4i32 , height : 2i32 , }) , TreeDecorator :: PlaceOnGround (PlaceOnGroundDecorator { block_state_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "4")] , } , weight : 1i32 }] } , tries : 150i32 , radius : 2i32 , height : 2i32 , })] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static FIREFLY_BUSH : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("firefly_bush") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: FIREFLY_BUSH , properties : & [] , } } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static FLOWER_CHERRY : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("flower_cherry") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: PINK_PETALS , properties : & [("facing" , "north") , ("flower_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: PINK_PETALS , properties : & [("facing" , "east") , ("flower_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: PINK_PETALS , properties : & [("facing" , "south") , ("flower_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: PINK_PETALS , properties : & [("facing" , "west") , ("flower_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: PINK_PETALS , properties : & [("facing" , "north") , ("flower_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: PINK_PETALS , properties : & [("facing" , "east") , ("flower_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: PINK_PETALS , properties : & [("facing" , "south") , ("flower_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: PINK_PETALS , properties : & [("facing" , "west") , ("flower_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: PINK_PETALS , properties : & [("facing" , "north") , ("flower_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: PINK_PETALS , properties : & [("facing" , "east") , ("flower_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: PINK_PETALS , properties : & [("facing" , "south") , ("flower_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: PINK_PETALS , properties : & [("facing" , "west") , ("flower_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: PINK_PETALS , properties : & [("facing" , "north") , ("flower_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: PINK_PETALS , properties : & [("facing" , "east") , ("flower_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: PINK_PETALS , properties : & [("facing" , "south") , ("flower_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: PINK_PETALS , properties : & [("facing" , "west") , ("flower_amount" , "4")] , } , weight : 1i32 }] } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static FLOWER_DEFAULT : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("flower_default") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: POPPY , properties : & [] , } , weight : 2i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: DANDELION , properties : & [] , } , weight : 1i32 }] } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static FLOWER_FLOWER_FOREST : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("flower_flower_forest") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Noise (NoiseProvider { noise : FeatureNoiseParameters { first_octave : 0i32 , amplitudes : vec ! [1f64] , } , scale : 0.020833334f32 , seed : 2345i64 , states : vec ! [BlockStateData { block : & vanilla_blocks :: DANDELION , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: POPPY , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: ALLIUM , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: AZURE_BLUET , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: RED_TULIP , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: ORANGE_TULIP , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: WHITE_TULIP , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: PINK_TULIP , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: OXEYE_DAISY , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: CORNFLOWER , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: LILY_OF_THE_VALLEY , properties : & [] , }] , }) , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static FLOWER_MEADOW : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("flower_meadow") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: DualNoise (DualNoiseProvider { noise : FeatureNoiseParameters { first_octave : - 3i32 , amplitudes : vec ! [1f64] , } , scale : 1f32 , seed : 2345i64 , slow_noise : FeatureNoiseParameters { first_octave : - 10i32 , amplitudes : vec ! [1f64] , } , slow_scale : 1f32 , states : vec ! [BlockStateData { block : & vanilla_blocks :: TALL_GRASS , properties : & [("half" , "lower")] , } , BlockStateData { block : & vanilla_blocks :: ALLIUM , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: POPPY , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: AZURE_BLUET , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: DANDELION , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: CORNFLOWER , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: OXEYE_DAISY , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: SHORT_GRASS , properties : & [] , }] , variety : [1i32 , 3i32] , }) , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static FLOWER_PALE_GARDEN : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("flower_pale_garden") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: CLOSED_EYEBLOSSOM , properties : & [] , } } , schedule_tick : true , }) , id : OnceLock :: new () , } }) ; pub static FLOWER_PLAIN : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("flower_plain") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: NoiseThreshold (NoiseThresholdProvider { noise : FeatureNoiseParameters { first_octave : 0i32 , amplitudes : vec ! [1f64] , } , scale : 0.005f32 , seed : 2345i64 , threshold : - 0.8f32 , high_chance : 0.33333334f32 , default_state : BlockStateData { block : & vanilla_blocks :: DANDELION , properties : & [] , } , low_states : vec ! [BlockStateData { block : & vanilla_blocks :: ORANGE_TULIP , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: RED_TULIP , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: PINK_TULIP , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: WHITE_TULIP , properties : & [] , }] , high_states : vec ! [BlockStateData { block : & vanilla_blocks :: POPPY , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: AZURE_BLUET , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: OXEYE_DAISY , properties : & [] , } , BlockStateData { block : & vanilla_blocks :: CORNFLOWER , properties : & [] , }] , }) , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static FLOWER_SWAMP : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("flower_swamp") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BLUE_ORCHID , properties : & [] , } } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static FOREST_FLOWERS : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("forest_flowers") , kind : ConfiguredFeatureKind :: SimpleRandomSelector (SimpleRandomSelectorConfiguration { features : vec ! [PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: LILAC , properties : & [("half" , "lower")] , } } , schedule_tick : false , }))) , placement : vec ! [PlacementModifier :: Count { count : IntProvider :: Constant (96i32) } , PlacementModifier :: RandomOffset { xz_spread : IntProvider :: Trapezoid { min : - 7i32 , max : 7i32 , plateau : 0i32 , } , y_spread : IntProvider :: Trapezoid { min : - 3i32 , max : 3i32 , plateau : 0i32 , } , } , PlacementModifier :: BlockPredicateFilter { predicate : BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("air") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } }] , })) , PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: ROSE_BUSH , properties : & [("half" , "lower")] , } } , schedule_tick : false , }))) , placement : vec ! [PlacementModifier :: Count { count : IntProvider :: Constant (96i32) } , PlacementModifier :: RandomOffset { xz_spread : IntProvider :: Trapezoid { min : - 7i32 , max : 7i32 , plateau : 0i32 , } , y_spread : IntProvider :: Trapezoid { min : - 3i32 , max : 3i32 , plateau : 0i32 , } , } , PlacementModifier :: BlockPredicateFilter { predicate : BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("air") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } }] , })) , PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: PEONY , properties : & [("half" , "lower")] , } } , schedule_tick : false , }))) , placement : vec ! [PlacementModifier :: Count { count : IntProvider :: Constant (96i32) } , PlacementModifier :: RandomOffset { xz_spread : IntProvider :: Trapezoid { min : - 7i32 , max : 7i32 , plateau : 0i32 , } , y_spread : IntProvider :: Trapezoid { min : - 3i32 , max : 3i32 , plateau : 0i32 , } , } , PlacementModifier :: BlockPredicateFilter { predicate : BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("air") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } }] , })) , PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: LILY_OF_THE_VALLEY , properties : & [] , } } , schedule_tick : false , }))) , placement : vec ! [PlacementModifier :: Count { count : IntProvider :: Constant (96i32) } , PlacementModifier :: RandomOffset { xz_spread : IntProvider :: Trapezoid { min : - 7i32 , max : 7i32 , plateau : 0i32 , } , y_spread : IntProvider :: Trapezoid { min : - 3i32 , max : 3i32 , plateau : 0i32 , } , } , PlacementModifier :: BlockPredicateFilter { predicate : BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("air") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } }] , }))] , }) , id : OnceLock :: new () , } }) ; pub static FOREST_ROCK : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("forest_rock") , kind : ConfiguredFeatureKind :: BlockBlob (BlockBlobConfiguration { state : BlockStateData { block : & vanilla_blocks :: MOSSY_COBBLESTONE , properties : & [] , } , can_place_on : BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("forest_rock_can_place_on") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , }) , id : OnceLock :: new () , } }) ; pub static FOSSIL_COAL : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("fossil_coal") , kind : ConfiguredFeatureKind :: Fossil (FossilConfiguration { fossil_structures : vec ! [Identifier :: vanilla_static ("fossil/spine_1") , Identifier :: vanilla_static ("fossil/spine_2") , Identifier :: vanilla_static ("fossil/spine_3") , Identifier :: vanilla_static ("fossil/spine_4") , Identifier :: vanilla_static ("fossil/skull_1") , Identifier :: vanilla_static ("fossil/skull_2") , Identifier :: vanilla_static ("fossil/skull_3") , Identifier :: vanilla_static ("fossil/skull_4")] , overlay_structures : vec ! [Identifier :: vanilla_static ("fossil/spine_1_coal") , Identifier :: vanilla_static ("fossil/spine_2_coal") , Identifier :: vanilla_static ("fossil/spine_3_coal") , Identifier :: vanilla_static ("fossil/spine_4_coal") , Identifier :: vanilla_static ("fossil/skull_1_coal") , Identifier :: vanilla_static ("fossil/skull_2_coal") , Identifier :: vanilla_static ("fossil/skull_3_coal") , Identifier :: vanilla_static ("fossil/skull_4_coal")] , fossil_processors : Identifier :: vanilla_static ("fossil_rot") , overlay_processors : Identifier :: vanilla_static ("fossil_coal") , max_empty_corners_allowed : 4i32 , }) , id : OnceLock :: new () , } }) ; pub static FOSSIL_DIAMONDS : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("fossil_diamonds") , kind : ConfiguredFeatureKind :: Fossil (FossilConfiguration { fossil_structures : vec ! [Identifier :: vanilla_static ("fossil/spine_1") , Identifier :: vanilla_static ("fossil/spine_2") , Identifier :: vanilla_static ("fossil/spine_3") , Identifier :: vanilla_static ("fossil/spine_4") , Identifier :: vanilla_static ("fossil/skull_1") , Identifier :: vanilla_static ("fossil/skull_2") , Identifier :: vanilla_static ("fossil/skull_3") , Identifier :: vanilla_static ("fossil/skull_4")] , overlay_structures : vec ! [Identifier :: vanilla_static ("fossil/spine_1_coal") , Identifier :: vanilla_static ("fossil/spine_2_coal") , Identifier :: vanilla_static ("fossil/spine_3_coal") , Identifier :: vanilla_static ("fossil/spine_4_coal") , Identifier :: vanilla_static ("fossil/skull_1_coal") , Identifier :: vanilla_static ("fossil/skull_2_coal") , Identifier :: vanilla_static ("fossil/skull_3_coal") , Identifier :: vanilla_static ("fossil/skull_4_coal")] , fossil_processors : Identifier :: vanilla_static ("fossil_rot") , overlay_processors : Identifier :: vanilla_static ("fossil_diamonds") , max_empty_corners_allowed : 4i32 , }) , id : OnceLock :: new () , } }) ; pub static FREEZE_TOP_LAYER : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("freeze_top_layer") , kind : ConfiguredFeatureKind :: FreezeTopLayer , id : OnceLock :: new () , } }) ; pub static GLOW_LICHEN : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("glow_lichen") , kind : ConfiguredFeatureKind :: MultifaceGrowth (MultifaceGrowthConfiguration { block : & vanilla_blocks :: GLOW_LICHEN , search_range : 20i32 , can_place_on_floor : false , can_place_on_ceiling : true , can_place_on_wall : true , chance_of_spreading : 0.5f32 , can_be_placed_on : vec ! [& vanilla_blocks :: STONE , & vanilla_blocks :: ANDESITE , & vanilla_blocks :: DIORITE , & vanilla_blocks :: GRANITE , & vanilla_blocks :: DRIPSTONE_BLOCK , & vanilla_blocks :: CALCITE , & vanilla_blocks :: TUFF , & vanilla_blocks :: DEEPSLATE , & vanilla_blocks :: SULFUR , & vanilla_blocks :: CINNABAR] , }) , id : OnceLock :: new () , } }) ; pub static GLOWSTONE_EXTRA : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("glowstone_extra") , kind : ConfiguredFeatureKind :: GlowstoneBlob , id : OnceLock :: new () , } }) ; pub static GRASS : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("grass") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SHORT_GRASS , properties : & [] , } } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static GRASS_JUNGLE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("grass_jungle") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: SHORT_GRASS , properties : & [] , } , weight : 3i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: FERN , properties : & [] , } , weight : 1i32 }] } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static HUGE_BROWN_MUSHROOM : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("huge_brown_mushroom") , kind : ConfiguredFeatureKind :: HugeBrownMushroom (HugeMushroomConfiguration { cap_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BROWN_MUSHROOM_BLOCK , properties : & [("down" , "false") , ("east" , "true") , ("north" , "true") , ("south" , "true") , ("up" , "true") , ("west" , "true")] , } } , stem_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: MUSHROOM_STEM , properties : & [("down" , "false") , ("east" , "true") , ("north" , "true") , ("south" , "true") , ("up" , "false") , ("west" , "true")] , } } , foliage_radius : 3i32 , can_place_on : BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("huge_brown_mushroom_can_place_on") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , }) , id : OnceLock :: new () , } }) ; pub static HUGE_RED_MUSHROOM : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("huge_red_mushroom") , kind : ConfiguredFeatureKind :: HugeRedMushroom (HugeMushroomConfiguration { cap_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: RED_MUSHROOM_BLOCK , properties : & [("down" , "false") , ("east" , "true") , ("north" , "true") , ("south" , "true") , ("up" , "true") , ("west" , "true")] , } } , stem_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: MUSHROOM_STEM , properties : & [("down" , "false") , ("east" , "true") , ("north" , "true") , ("south" , "true") , ("up" , "false") , ("west" , "true")] , } } , foliage_radius : 2i32 , can_place_on : BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("huge_red_mushroom_can_place_on") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , }) , id : OnceLock :: new () , } }) ; pub static ICE_PATCH : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ice_patch") , kind : ConfiguredFeatureKind :: Disk (DiskConfiguration { state_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: PACKED_ICE , properties : & [] , } } , target : BlockPredicate :: MatchingBlocks { blocks : BlockRefList (vec ! [& vanilla_blocks :: DIRT , & vanilla_blocks :: GRASS_BLOCK , & vanilla_blocks :: PODZOL , & vanilla_blocks :: COARSE_DIRT , & vanilla_blocks :: MYCELIUM , & vanilla_blocks :: SNOW_BLOCK , & vanilla_blocks :: ICE]) , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , radius : IntProvider :: Uniform { min_inclusive : 2i32 , max_inclusive : 3i32 , } , half_height : 1i32 , }) , id : OnceLock :: new () , } }) ; pub static ICE_SPIKE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ice_spike") , kind : ConfiguredFeatureKind :: Spike (SpikeConfiguration { state : BlockStateData { block : & vanilla_blocks :: PACKED_ICE , properties : & [] , } , can_place_on : BlockPredicate :: MatchingBlocks { blocks : BlockRefList (vec ! [& vanilla_blocks :: SNOW_BLOCK]) , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , can_replace : BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("ice_spike_replaceable") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , }) , id : OnceLock :: new () , } }) ; pub static ICEBERG_BLUE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("iceberg_blue") , kind : ConfiguredFeatureKind :: Iceberg (BlockStateData { block : & vanilla_blocks :: BLUE_ICE , properties : & [] , }) , id : OnceLock :: new () , } }) ; pub static ICEBERG_PACKED : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("iceberg_packed") , kind : ConfiguredFeatureKind :: Iceberg (BlockStateData { block : & vanilla_blocks :: PACKED_ICE , properties : & [] , }) , id : OnceLock :: new () , } }) ; pub static JUNGLE_BUSH : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("jungle_bush") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: JUNGLE_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Straight (TrunkPlacerBase { base_height : 1i32 , height_rand_a : 0i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Bush (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (1i32) , height : IntProvider :: Constant (2i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 0i32 , lower_size : 0i32 , upper_size : 0i32 , min_clipped_height : None , }) , decorators : vec ! [] , root_placer : None , ignore_vines : false , }) , id : OnceLock :: new () , } }) ; pub static JUNGLE_TREE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("jungle_tree") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: JUNGLE_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: JUNGLE_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Straight (TrunkPlacerBase { base_height : 4i32 , height_rand_a : 8i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Blob (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (0i32) , height : IntProvider :: Constant (3i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , upper_size : 1i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: Cocoa { probability : 0.2f32 } , TreeDecorator :: TrunkVine , TreeDecorator :: LeaveVine { probability : 0.25f32 }] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static JUNGLE_TREE_NO_VINE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("jungle_tree_no_vine") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: JUNGLE_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: JUNGLE_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Straight (TrunkPlacerBase { base_height : 4i32 , height_rand_a : 8i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Blob (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (0i32) , height : IntProvider :: Constant (3i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , upper_size : 1i32 , min_clipped_height : None , }) , decorators : vec ! [] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static KELP : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("kelp") , kind : ConfiguredFeatureKind :: Kelp , id : OnceLock :: new () , } }) ; pub static LAKE_LAVA : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("lake_lava") , kind : ConfiguredFeatureKind :: Lake (LakeConfiguration { fluid : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: LAVA , properties : & [("level" , "0")] , } } , barrier : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: STONE , properties : & [] , } } , can_place_feature : BlockPredicate :: True , can_replace_with_air_or_fluid : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("features_cannot_replace") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , can_replace_with_barrier : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("lava_pool_stone_cannot_replace") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , }) , id : OnceLock :: new () , } }) ; pub static LARGE_BASALT_COLUMNS : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("large_basalt_columns") , kind : ConfiguredFeatureKind :: BasaltColumns (BasaltColumnsConfiguration { height : IntProvider :: Uniform { min_inclusive : 5i32 , max_inclusive : 10i32 , } , reach : IntProvider :: Uniform { min_inclusive : 2i32 , max_inclusive : 3i32 , } , }) , id : OnceLock :: new () , } }) ; pub static LARGE_DRIPSTONE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("large_dripstone") , kind : ConfiguredFeatureKind :: LargeDripstone (LargeDripstoneConfiguration { replaceable_blocks : BlockHolderSet :: Tag (Identifier :: vanilla_static ("dripstone_replaceable_blocks")) , floor_to_ceiling_search_range : 30i32 , column_radius : IntProvider :: Clamped { source : Box :: new (IntProvider :: Uniform { min_inclusive : 3i32 , max_inclusive : 19i32 , }) , min_inclusive : 3i32 , max_inclusive : 16i32 , } , height_scale : FloatProvider :: Uniform { min_inclusive : 0.4f32 , max_exclusive : 2f32 , } , max_column_radius_to_cave_height_ratio : 0.33f32 , stalactite_bluntness : FloatProvider :: Uniform { min_inclusive : 0.3f32 , max_exclusive : 0.9f32 , } , stalagmite_bluntness : FloatProvider :: Uniform { min_inclusive : 0.4f32 , max_exclusive : 1f32 , } , wind_speed : FloatProvider :: Uniform { min_inclusive : 0f32 , max_exclusive : 0.3f32 , } , min_radius_for_wind : 4i32 , min_bluntness_for_wind : 0.6f32 , }) , id : OnceLock :: new () , } }) ; pub static LARGE_FERN : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("large_fern") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: LARGE_FERN , properties : & [("half" , "lower")] , } } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static LEAF_LITTER : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("leaf_litter") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "3")] , } , weight : 1i32 }] } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static LUSH_CAVES_CLAY : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("lush_caves_clay") , kind : ConfiguredFeatureKind :: RandomBooleanSelector (RandomBooleanSelectorConfiguration { feature_true : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Reference (& crate :: vanilla_configured_features :: CLAY_WITH_DRIPLEAVES) , placement : vec ! [] , })) , feature_false : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Reference (& crate :: vanilla_configured_features :: CLAY_POOL_WITH_DRIPLEAVES) , placement : vec ! [] , })) , }) , id : OnceLock :: new () , } }) ; pub static MANGROVE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("mangrove") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: MANGROVE_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: MANGROVE_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: UpwardsBranching (UpwardsBranchingTrunkPlacer { base_height : 2i32 , height_rand_a : 1i32 , height_rand_b : 4i32 , extra_branch_steps : IntProvider :: Uniform { min_inclusive : 1i32 , max_inclusive : 4i32 , } , extra_branch_length : IntProvider :: Uniform { min_inclusive : 0i32 , max_inclusive : 1i32 , } , place_branch_per_log_probability : 0.5f32 , can_grow_through : Identifier :: vanilla_static ("mangrove_logs_can_grow_through") , }) , foliage_placer : FoliagePlacer :: RandomSpread (RandomSpreadFoliagePlacer { radius : IntProvider :: Constant (3i32) , offset : IntProvider :: Constant (0i32) , foliage_height : 2i32 , leaf_placement_attempts : 70i32 , }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 2i32 , lower_size : 0i32 , upper_size : 2i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: LeaveVine { probability : 0.125f32 } , TreeDecorator :: AttachedToLeaves (AttachedToLeavesDecorator { probability : 0.14f32 , exclusion_radius_xz : 1i32 , exclusion_radius_y : 0i32 , required_empty_blocks : 2i32 , block_provider : BlockStateProvider :: RandomizedInt { property : "age" . to_string () , source : Box :: new (BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: MANGROVE_PROPAGULE , properties : & [("age" , "0") , ("hanging" , "true") , ("stage" , "0") , ("waterlogged" , "false")] , } }) , values : IntProvider :: Uniform { min_inclusive : 0i32 , max_inclusive : 4i32 , } , } , directions : vec ! [Direction :: Down] , }) , TreeDecorator :: Beehive { probability : 0.01f32 }] , root_placer : Some (RootPlacer :: Mangrove (MangroveRootPlacer { trunk_offset_y : IntProvider :: Uniform { min_inclusive : 1i32 , max_inclusive : 3i32 , } , root_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: MANGROVE_ROOTS , properties : & [("waterlogged" , "false")] , } } , above_root_placement : AboveRootPlacement { above_root_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: MOSS_CARPET , properties : & [] , } } , above_root_placement_chance : 0.5f32 , } , mangrove_root_placement : MangroveRootPlacement { can_grow_through : Identifier :: vanilla_static ("mangrove_roots_can_grow_through") , muddy_roots_in : vec ! [Identifier :: vanilla_static ("mud") , Identifier :: vanilla_static ("muddy_mangrove_roots")] , muddy_roots_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: MUDDY_MANGROVE_ROOTS , properties : & [("axis" , "y")] , } } , max_root_width : 8i32 , max_root_length : 15i32 , random_skew_chance : 0.2f32 , } , })) , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static MANGROVE_VEGETATION : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("mangrove_vegetation") , kind : ConfiguredFeatureKind :: RandomSelector (RandomSelectorConfiguration { features : vec ! [WeightedPlacedFeature { chance : 0.85f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: TALL_MANGROVE_CHECKED) }] , default : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: MANGROVE_CHECKED) , }) , id : OnceLock :: new () , } }) ; pub static MEADOW_TREES : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("meadow_trees") , kind : ConfiguredFeatureKind :: RandomSelector (RandomSelectorConfiguration { features : vec ! [WeightedPlacedFeature { chance : 0.5f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FANCY_OAK_BEES) }] , default : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: SUPER_BIRCH_BEES) , }) , id : OnceLock :: new () , } }) ; pub static MEGA_JUNGLE_TREE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("mega_jungle_tree") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: JUNGLE_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: JUNGLE_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: MegaJungle (TrunkPlacerBase { base_height : 10i32 , height_rand_a : 2i32 , height_rand_b : 19i32 , }) , foliage_placer : FoliagePlacer :: Jungle (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (0i32) , height : IntProvider :: Constant (2i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 1i32 , upper_size : 2i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: TrunkVine , TreeDecorator :: LeaveVine { probability : 0.25f32 }] , root_placer : None , ignore_vines : false , }) , id : OnceLock :: new () , } }) ; pub static MEGA_PINE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("mega_pine") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SPRUCE_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SPRUCE_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Giant (TrunkPlacerBase { base_height : 13i32 , height_rand_a : 2i32 , height_rand_b : 14i32 , }) , foliage_placer : FoliagePlacer :: MegaPine (MegaPineFoliagePlacer { radius : IntProvider :: Constant (0i32) , offset : IntProvider :: Constant (0i32) , crown_height : IntProvider :: Uniform { min_inclusive : 3i32 , max_inclusive : 7i32 , } , }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 1i32 , upper_size : 2i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: AlterGround { provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("beneath_tree_podzol_replaceable") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: PODZOL , properties : & [("snowy" , "false")] , } } , }] , } }] , root_placer : None , ignore_vines : false , }) , id : OnceLock :: new () , } }) ; pub static MEGA_SPRUCE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("mega_spruce") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SPRUCE_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SPRUCE_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Giant (TrunkPlacerBase { base_height : 13i32 , height_rand_a : 2i32 , height_rand_b : 14i32 , }) , foliage_placer : FoliagePlacer :: MegaPine (MegaPineFoliagePlacer { radius : IntProvider :: Constant (0i32) , offset : IntProvider :: Constant (0i32) , crown_height : IntProvider :: Uniform { min_inclusive : 13i32 , max_inclusive : 17i32 , } , }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 1i32 , upper_size : 2i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: AlterGround { provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("beneath_tree_podzol_replaceable") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: PODZOL , properties : & [("snowy" , "false")] , } } , }] , } }] , root_placer : None , ignore_vines : false , }) , id : OnceLock :: new () , } }) ; pub static MELON : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("melon") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: MELON , properties : & [] , } } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static MONSTER_ROOM : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("monster_room") , kind : ConfiguredFeatureKind :: MonsterRoom , id : OnceLock :: new () , } }) ; pub static MOSS_PATCH : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("moss_patch") , kind : ConfiguredFeatureKind :: VegetationPatch (VegetationPatchConfiguration { replaceable : Identifier :: vanilla_static ("moss_replaceable") , ground_state : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: MOSS_BLOCK , properties : & [] , } } , vegetation_feature : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Reference (& crate :: vanilla_configured_features :: MOSS_VEGETATION) , placement : vec ! [] , })) , surface : VerticalSurface :: Floor , depth : IntProvider :: Constant (1i32) , extra_bottom_block_chance : 0f32 , vertical_range : 5i32 , vegetation_chance : 0.8f32 , xz_radius : IntProvider :: Uniform { min_inclusive : 4i32 , max_inclusive : 7i32 , } , extra_edge_column_chance : 0.3f32 , }) , id : OnceLock :: new () , } }) ; pub static MOSS_PATCH_BONEMEAL : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("moss_patch_bonemeal") , kind : ConfiguredFeatureKind :: VegetationPatch (VegetationPatchConfiguration { replaceable : Identifier :: vanilla_static ("moss_replaceable") , ground_state : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: MOSS_BLOCK , properties : & [] , } } , vegetation_feature : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Reference (& crate :: vanilla_configured_features :: MOSS_VEGETATION) , placement : vec ! [] , })) , surface : VerticalSurface :: Floor , depth : IntProvider :: Constant (1i32) , extra_bottom_block_chance : 0f32 , vertical_range : 5i32 , vegetation_chance : 0.6f32 , xz_radius : IntProvider :: Uniform { min_inclusive : 1i32 , max_inclusive : 2i32 , } , extra_edge_column_chance : 0.75f32 , }) , id : OnceLock :: new () , } }) ; pub static MOSS_PATCH_CEILING : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("moss_patch_ceiling") , kind : ConfiguredFeatureKind :: VegetationPatch (VegetationPatchConfiguration { replaceable : Identifier :: vanilla_static ("moss_replaceable") , ground_state : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: MOSS_BLOCK , properties : & [] , } } , vegetation_feature : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Reference (& crate :: vanilla_configured_features :: CAVE_VINE_IN_MOSS) , placement : vec ! [] , })) , surface : VerticalSurface :: Ceiling , depth : IntProvider :: Uniform { min_inclusive : 1i32 , max_inclusive : 2i32 , } , extra_bottom_block_chance : 0f32 , vertical_range : 5i32 , vegetation_chance : 0.08f32 , xz_radius : IntProvider :: Uniform { min_inclusive : 4i32 , max_inclusive : 7i32 , } , extra_edge_column_chance : 0.3f32 , }) , id : OnceLock :: new () , } }) ; pub static MOSS_VEGETATION : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("moss_vegetation") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: FLOWERING_AZALEA , properties : & [] , } , weight : 4i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: AZALEA , properties : & [] , } , weight : 7i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: MOSS_CARPET , properties : & [] , } , weight : 25i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: SHORT_GRASS , properties : & [] , } , weight : 50i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: TALL_GRASS , properties : & [("half" , "lower")] , } , weight : 10i32 }] } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static MUSHROOM_ISLAND_VEGETATION : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("mushroom_island_vegetation") , kind : ConfiguredFeatureKind :: RandomBooleanSelector (RandomBooleanSelectorConfiguration { feature_true : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Reference (& crate :: vanilla_configured_features :: HUGE_RED_MUSHROOM) , placement : vec ! [] , })) , feature_false : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Reference (& crate :: vanilla_configured_features :: HUGE_BROWN_MUSHROOM) , placement : vec ! [] , })) , }) , id : OnceLock :: new () , } }) ; pub static NETHER_SPROUTS : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("nether_sprouts") , kind : ConfiguredFeatureKind :: NetherForestVegetation (NetherForestVegetationConfiguration { state_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: NETHER_SPROUTS , properties : & [] , } } , spread_width : 8i32 , spread_height : 4i32 , }) , id : OnceLock :: new () , } }) ; pub static NETHER_SPROUTS_BONEMEAL : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("nether_sprouts_bonemeal") , kind : ConfiguredFeatureKind :: NetherForestVegetation (NetherForestVegetationConfiguration { state_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: NETHER_SPROUTS , properties : & [] , } } , spread_width : 3i32 , spread_height : 1i32 , }) , id : OnceLock :: new () , } }) ; pub static OAK : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("oak") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Straight (TrunkPlacerBase { base_height : 4i32 , height_rand_a : 2i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Blob (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (0i32) , height : IntProvider :: Constant (3i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , upper_size : 1i32 , min_clipped_height : None , }) , decorators : vec ! [] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static OAK_BEES_0002_LEAF_LITTER : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("oak_bees_0002_leaf_litter") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Straight (TrunkPlacerBase { base_height : 4i32 , height_rand_a : 2i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Blob (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (0i32) , height : IntProvider :: Constant (3i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , upper_size : 1i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: Beehive { probability : 0.002f32 } , TreeDecorator :: PlaceOnGround (PlaceOnGroundDecorator { block_state_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "3")] , } , weight : 1i32 }] } , tries : 96i32 , radius : 4i32 , height : 2i32 , }) , TreeDecorator :: PlaceOnGround (PlaceOnGroundDecorator { block_state_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "4")] , } , weight : 1i32 }] } , tries : 150i32 , radius : 2i32 , height : 2i32 , })] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static OAK_BEES_002 : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("oak_bees_002") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Straight (TrunkPlacerBase { base_height : 4i32 , height_rand_a : 2i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Blob (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (0i32) , height : IntProvider :: Constant (3i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , upper_size : 1i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: Beehive { probability : 0.02f32 }] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static OAK_BEES_005 : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("oak_bees_005") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Straight (TrunkPlacerBase { base_height : 4i32 , height_rand_a : 2i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Blob (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (0i32) , height : IntProvider :: Constant (3i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , upper_size : 1i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: Beehive { probability : 0.05f32 }] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static OAK_LEAF_LITTER : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("oak_leaf_litter") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Straight (TrunkPlacerBase { base_height : 4i32 , height_rand_a : 2i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Blob (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (0i32) , height : IntProvider :: Constant (3i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , upper_size : 1i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: PlaceOnGround (PlaceOnGroundDecorator { block_state_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "3")] , } , weight : 1i32 }] } , tries : 96i32 , radius : 4i32 , height : 2i32 , }) , TreeDecorator :: PlaceOnGround (PlaceOnGroundDecorator { block_state_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "north") , ("segment_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "east") , ("segment_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "south") , ("segment_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: LEAF_LITTER , properties : & [("facing" , "west") , ("segment_amount" , "4")] , } , weight : 1i32 }] } , tries : 150i32 , radius : 2i32 , height : 2i32 , })] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static ORE_ANCIENT_DEBRIS_LARGE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_ancient_debris_large") , kind : ConfiguredFeatureKind :: ScatteredOre (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("base_stone_nether") } , state : BlockStateData { block : & vanilla_blocks :: ANCIENT_DEBRIS , properties : & [] , } }] , size : 3i32 , discard_chance_on_air_exposure : 1f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_ANCIENT_DEBRIS_SMALL : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_ancient_debris_small") , kind : ConfiguredFeatureKind :: ScatteredOre (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("base_stone_nether") } , state : BlockStateData { block : & vanilla_blocks :: ANCIENT_DEBRIS , properties : & [] , } }] , size : 2i32 , discard_chance_on_air_exposure : 1f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_ANDESITE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_andesite") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("base_stone_overworld") } , state : BlockStateData { block : & vanilla_blocks :: ANDESITE , properties : & [] , } }] , size : 64i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_BLACKSTONE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_blackstone") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: BlockMatch { block : & vanilla_blocks :: NETHERRACK } , state : BlockStateData { block : & vanilla_blocks :: BLACKSTONE , properties : & [] , } }] , size : 33i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_CLAY : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_clay") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("base_stone_overworld") } , state : BlockStateData { block : & vanilla_blocks :: CLAY , properties : & [] , } }] , size : 33i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_COAL : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_coal") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("stone_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: COAL_ORE , properties : & [] , } } , OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("deepslate_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: DEEPSLATE_COAL_ORE , properties : & [] , } }] , size : 17i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_COAL_BURIED : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_coal_buried") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("stone_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: COAL_ORE , properties : & [] , } } , OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("deepslate_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: DEEPSLATE_COAL_ORE , properties : & [] , } }] , size : 17i32 , discard_chance_on_air_exposure : 0.5f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_COPPER_LARGE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_copper_large") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("stone_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: COPPER_ORE , properties : & [] , } } , OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("deepslate_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: DEEPSLATE_COPPER_ORE , properties : & [] , } }] , size : 20i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_COPPER_SMALL : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_copper_small") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("stone_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: COPPER_ORE , properties : & [] , } } , OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("deepslate_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: DEEPSLATE_COPPER_ORE , properties : & [] , } }] , size : 10i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_DIAMOND_BURIED : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_diamond_buried") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("stone_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: DIAMOND_ORE , properties : & [] , } } , OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("deepslate_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: DEEPSLATE_DIAMOND_ORE , properties : & [] , } }] , size : 8i32 , discard_chance_on_air_exposure : 1f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_DIAMOND_LARGE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_diamond_large") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("stone_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: DIAMOND_ORE , properties : & [] , } } , OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("deepslate_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: DEEPSLATE_DIAMOND_ORE , properties : & [] , } }] , size : 12i32 , discard_chance_on_air_exposure : 0.7f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_DIAMOND_MEDIUM : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_diamond_medium") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("stone_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: DIAMOND_ORE , properties : & [] , } } , OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("deepslate_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: DEEPSLATE_DIAMOND_ORE , properties : & [] , } }] , size : 8i32 , discard_chance_on_air_exposure : 0.5f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_DIAMOND_SMALL : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_diamond_small") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("stone_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: DIAMOND_ORE , properties : & [] , } } , OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("deepslate_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: DEEPSLATE_DIAMOND_ORE , properties : & [] , } }] , size : 4i32 , discard_chance_on_air_exposure : 0.5f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_DIORITE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_diorite") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("base_stone_overworld") } , state : BlockStateData { block : & vanilla_blocks :: DIORITE , properties : & [] , } }] , size : 64i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_DIRT : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_dirt") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("base_stone_overworld") } , state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } }] , size : 33i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_EMERALD : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_emerald") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("stone_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: EMERALD_ORE , properties : & [] , } } , OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("deepslate_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: DEEPSLATE_EMERALD_ORE , properties : & [] , } }] , size : 3i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_GOLD : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_gold") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("stone_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: GOLD_ORE , properties : & [] , } } , OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("deepslate_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: DEEPSLATE_GOLD_ORE , properties : & [] , } }] , size : 9i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_GOLD_BURIED : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_gold_buried") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("stone_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: GOLD_ORE , properties : & [] , } } , OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("deepslate_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: DEEPSLATE_GOLD_ORE , properties : & [] , } }] , size : 9i32 , discard_chance_on_air_exposure : 0.5f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_GRANITE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_granite") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("base_stone_overworld") } , state : BlockStateData { block : & vanilla_blocks :: GRANITE , properties : & [] , } }] , size : 64i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_GRAVEL : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_gravel") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("base_stone_overworld") } , state : BlockStateData { block : & vanilla_blocks :: GRAVEL , properties : & [] , } }] , size : 33i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_GRAVEL_NETHER : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_gravel_nether") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: BlockMatch { block : & vanilla_blocks :: NETHERRACK } , state : BlockStateData { block : & vanilla_blocks :: GRAVEL , properties : & [] , } }] , size : 33i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_INFESTED : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_infested") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("stone_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: INFESTED_STONE , properties : & [] , } } , OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("deepslate_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: INFESTED_DEEPSLATE , properties : & [("axis" , "y")] , } }] , size : 9i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_IRON : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_iron") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("stone_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: IRON_ORE , properties : & [] , } } , OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("deepslate_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: DEEPSLATE_IRON_ORE , properties : & [] , } }] , size : 9i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_IRON_SMALL : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_iron_small") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("stone_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: IRON_ORE , properties : & [] , } } , OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("deepslate_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: DEEPSLATE_IRON_ORE , properties : & [] , } }] , size : 4i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_LAPIS : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_lapis") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("stone_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: LAPIS_ORE , properties : & [] , } } , OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("deepslate_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: DEEPSLATE_LAPIS_ORE , properties : & [] , } }] , size : 7i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_LAPIS_BURIED : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_lapis_buried") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("stone_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: LAPIS_ORE , properties : & [] , } } , OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("deepslate_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: DEEPSLATE_LAPIS_ORE , properties : & [] , } }] , size : 7i32 , discard_chance_on_air_exposure : 1f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_MAGMA : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_magma") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: BlockMatch { block : & vanilla_blocks :: NETHERRACK } , state : BlockStateData { block : & vanilla_blocks :: MAGMA_BLOCK , properties : & [] , } }] , size : 33i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_NETHER_GOLD : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_nether_gold") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: BlockMatch { block : & vanilla_blocks :: NETHERRACK } , state : BlockStateData { block : & vanilla_blocks :: NETHER_GOLD_ORE , properties : & [] , } }] , size : 10i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_QUARTZ : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_quartz") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: BlockMatch { block : & vanilla_blocks :: NETHERRACK } , state : BlockStateData { block : & vanilla_blocks :: NETHER_QUARTZ_ORE , properties : & [] , } }] , size : 14i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_REDSTONE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_redstone") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("stone_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: REDSTONE_ORE , properties : & [("lit" , "false")] , } } , OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("deepslate_ore_replaceables") } , state : BlockStateData { block : & vanilla_blocks :: DEEPSLATE_REDSTONE_ORE , properties : & [("lit" , "false")] , } }] , size : 8i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_SOUL_SAND : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_soul_sand") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: BlockMatch { block : & vanilla_blocks :: NETHERRACK } , state : BlockStateData { block : & vanilla_blocks :: SOUL_SAND , properties : & [] , } }] , size : 12i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static ORE_TUFF : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("ore_tuff") , kind : ConfiguredFeatureKind :: Ore (OreConfiguration { targets : vec ! [OreTarget { target : RuleTest :: TagMatch { tag : Identifier :: vanilla_static ("base_stone_overworld") } , state : BlockStateData { block : & vanilla_blocks :: TUFF , properties : & [] , } }] , size : 64i32 , discard_chance_on_air_exposure : 0f32 , }) , id : OnceLock :: new () , } }) ; pub static PALE_FOREST_FLOWER : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("pale_forest_flower") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: CLOSED_EYEBLOSSOM , properties : & [] , } } , schedule_tick : true , }) , id : OnceLock :: new () , } }) ; pub static PALE_GARDEN_VEGETATION : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("pale_garden_vegetation") , kind : ConfiguredFeatureKind :: RandomSelector (RandomSelectorConfiguration { features : vec ! [WeightedPlacedFeature { chance : 0.1f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: PALE_OAK_CREAKING_CHECKED) } , WeightedPlacedFeature { chance : 0.9f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: PALE_OAK_CHECKED) }] , default : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: PALE_OAK_CHECKED) , }) , id : OnceLock :: new () , } }) ; pub static PALE_MOSS_PATCH : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("pale_moss_patch") , kind : ConfiguredFeatureKind :: VegetationPatch (VegetationPatchConfiguration { replaceable : Identifier :: vanilla_static ("moss_replaceable") , ground_state : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: PALE_MOSS_BLOCK , properties : & [] , } } , vegetation_feature : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Reference (& crate :: vanilla_configured_features :: PALE_MOSS_VEGETATION) , placement : vec ! [] , })) , surface : VerticalSurface :: Floor , depth : IntProvider :: Constant (1i32) , extra_bottom_block_chance : 0f32 , vertical_range : 5i32 , vegetation_chance : 0.3f32 , xz_radius : IntProvider :: Uniform { min_inclusive : 2i32 , max_inclusive : 4i32 , } , extra_edge_column_chance : 0.75f32 , }) , id : OnceLock :: new () , } }) ; pub static PALE_MOSS_PATCH_BONEMEAL : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("pale_moss_patch_bonemeal") , kind : ConfiguredFeatureKind :: VegetationPatch (VegetationPatchConfiguration { replaceable : Identifier :: vanilla_static ("moss_replaceable") , ground_state : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: PALE_MOSS_BLOCK , properties : & [] , } } , vegetation_feature : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Reference (& crate :: vanilla_configured_features :: PALE_MOSS_VEGETATION) , placement : vec ! [] , })) , surface : VerticalSurface :: Floor , depth : IntProvider :: Constant (1i32) , extra_bottom_block_chance : 0f32 , vertical_range : 5i32 , vegetation_chance : 0.6f32 , xz_radius : IntProvider :: Uniform { min_inclusive : 1i32 , max_inclusive : 2i32 , } , extra_edge_column_chance : 0.75f32 , }) , id : OnceLock :: new () , } }) ; pub static PALE_MOSS_VEGETATION : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("pale_moss_vegetation") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: PALE_MOSS_CARPET , properties : & [("bottom" , "true") , ("east" , "none") , ("north" , "none") , ("south" , "none") , ("west" , "none")] , } , weight : 25i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: SHORT_GRASS , properties : & [] , } , weight : 25i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: TALL_GRASS , properties : & [("half" , "lower")] , } , weight : 10i32 }] } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static PALE_OAK : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("pale_oak") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: PALE_OAK_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: PALE_OAK_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: DarkOak (TrunkPlacerBase { base_height : 6i32 , height_rand_a : 2i32 , height_rand_b : 1i32 , }) , foliage_placer : FoliagePlacer :: DarkOak (FoliagePlacerBase { radius : IntProvider :: Constant (0i32) , offset : IntProvider :: Constant (0i32) }) , minimum_size : FeatureSize :: ThreeLayers (ThreeLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , middle_size : 1i32 , upper_limit : 1i32 , upper_size : 2i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: PaleMoss { leaves_probability : 0.15f32 , trunk_probability : 0.4f32 , ground_probability : 0.8f32 , }] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static PALE_OAK_BONEMEAL : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("pale_oak_bonemeal") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: PALE_OAK_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: PALE_OAK_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: DarkOak (TrunkPlacerBase { base_height : 6i32 , height_rand_a : 2i32 , height_rand_b : 1i32 , }) , foliage_placer : FoliagePlacer :: DarkOak (FoliagePlacerBase { radius : IntProvider :: Constant (0i32) , offset : IntProvider :: Constant (0i32) }) , minimum_size : FeatureSize :: ThreeLayers (ThreeLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , middle_size : 1i32 , upper_limit : 1i32 , upper_size : 2i32 , min_clipped_height : None , }) , decorators : vec ! [] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static PALE_OAK_CREAKING : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("pale_oak_creaking") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: PALE_OAK_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: PALE_OAK_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: DarkOak (TrunkPlacerBase { base_height : 6i32 , height_rand_a : 2i32 , height_rand_b : 1i32 , }) , foliage_placer : FoliagePlacer :: DarkOak (FoliagePlacerBase { radius : IntProvider :: Constant (0i32) , offset : IntProvider :: Constant (0i32) }) , minimum_size : FeatureSize :: ThreeLayers (ThreeLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , middle_size : 1i32 , upper_limit : 1i32 , upper_size : 2i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: PaleMoss { leaves_probability : 0.15f32 , trunk_probability : 0.4f32 , ground_probability : 0.8f32 , } , TreeDecorator :: CreakingHeart { probability : 1f32 }] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static PATCH_FIRE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("patch_fire") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: FIRE , properties : & [("age" , "0") , ("east" , "false") , ("north" , "false") , ("south" , "false") , ("up" , "false") , ("west" , "false")] , } } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static PATCH_SOUL_FIRE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("patch_soul_fire") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SOUL_FIRE , properties : & [] , } } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static PILE_HAY : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("pile_hay") , kind : ConfiguredFeatureKind :: BlockPile (BlockPileConfiguration { state_provider : BlockStateProvider :: RotatedBlock { state : BlockStateData { block : & vanilla_blocks :: HAY_BLOCK , properties : & [("axis" , "y")] , } } , }) , id : OnceLock :: new () , } }) ; pub static PILE_ICE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("pile_ice") , kind : ConfiguredFeatureKind :: BlockPile (BlockPileConfiguration { state_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: BLUE_ICE , properties : & [] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: PACKED_ICE , properties : & [] , } , weight : 5i32 }] } , }) , id : OnceLock :: new () , } }) ; pub static PILE_MELON : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("pile_melon") , kind : ConfiguredFeatureKind :: BlockPile (BlockPileConfiguration { state_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: MELON , properties : & [] , } } , }) , id : OnceLock :: new () , } }) ; pub static PILE_PUMPKIN : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("pile_pumpkin") , kind : ConfiguredFeatureKind :: BlockPile (BlockPileConfiguration { state_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: PUMPKIN , properties : & [] , } , weight : 19i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: JACK_O_LANTERN , properties : & [("facing" , "north")] , } , weight : 1i32 }] } , }) , id : OnceLock :: new () , } }) ; pub static PILE_SNOW : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("pile_snow") , kind : ConfiguredFeatureKind :: BlockPile (BlockPileConfiguration { state_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SNOW , properties : & [("layers" , "1")] , } } , }) , id : OnceLock :: new () , } }) ; pub static PINE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("pine") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SPRUCE_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SPRUCE_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Straight (TrunkPlacerBase { base_height : 6i32 , height_rand_a : 4i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Pine (PineFoliagePlacer { radius : IntProvider :: Constant (1i32) , offset : IntProvider :: Constant (1i32) , height : IntProvider :: Uniform { min_inclusive : 3i32 , max_inclusive : 4i32 , } , }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 2i32 , lower_size : 0i32 , upper_size : 2i32 , min_clipped_height : None , }) , decorators : vec ! [] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static POINTED_DRIPSTONE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("pointed_dripstone") , kind : ConfiguredFeatureKind :: SimpleRandomSelector (SimpleRandomSelectorConfiguration { features : vec ! [PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: Speleothem (SpeleothemConfiguration { base_block : BlockStateData { block : & vanilla_blocks :: DRIPSTONE_BLOCK , properties : & [] , } , pointed_block : BlockStateData { block : & vanilla_blocks :: POINTED_DRIPSTONE , properties : & [("thickness" , "tip") , ("vertical_direction" , "up") , ("waterlogged" , "false")] , } , replaceable_blocks : BlockHolderSet :: Tag (Identifier :: vanilla_static ("dripstone_replaceable_blocks")) , chance_of_taller_generation : 0.2f32 , chance_of_directional_spread : 0.7f32 , chance_of_spread_radius2 : 0.5f32 , chance_of_spread_radius3 : 0.5f32 , }))) , placement : vec ! [PlacementModifier :: EnvironmentScan { direction_of_search : Direction :: Down , target_condition : BlockPredicate :: Solid { offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , allowed_search_condition : Some (BlockPredicate :: AnyOf { predicates : vec ! [BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("air") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , BlockPredicate :: MatchingBlocks { blocks : BlockRefList (vec ! [& vanilla_blocks :: WATER]) , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }] }) , max_steps : 12i32 , } , PlacementModifier :: RandomOffset { xz_spread : IntProvider :: Constant (0i32) , y_spread : IntProvider :: Constant (1i32) , }] , })) , PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: Speleothem (SpeleothemConfiguration { base_block : BlockStateData { block : & vanilla_blocks :: DRIPSTONE_BLOCK , properties : & [] , } , pointed_block : BlockStateData { block : & vanilla_blocks :: POINTED_DRIPSTONE , properties : & [("thickness" , "tip") , ("vertical_direction" , "up") , ("waterlogged" , "false")] , } , replaceable_blocks : BlockHolderSet :: Tag (Identifier :: vanilla_static ("dripstone_replaceable_blocks")) , chance_of_taller_generation : 0.2f32 , chance_of_directional_spread : 0.7f32 , chance_of_spread_radius2 : 0.5f32 , chance_of_spread_radius3 : 0.5f32 , }))) , placement : vec ! [PlacementModifier :: EnvironmentScan { direction_of_search : Direction :: Up , target_condition : BlockPredicate :: Solid { offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , allowed_search_condition : Some (BlockPredicate :: AnyOf { predicates : vec ! [BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("air") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , BlockPredicate :: MatchingBlocks { blocks : BlockRefList (vec ! [& vanilla_blocks :: WATER]) , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }] }) , max_steps : 12i32 , } , PlacementModifier :: RandomOffset { xz_spread : IntProvider :: Constant (0i32) , y_spread : IntProvider :: Constant (- 1i32) , }] , }))] , }) , id : OnceLock :: new () , } }) ; pub static PUMPKIN : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("pumpkin") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: PUMPKIN , properties : & [] , } } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static RED_MUSHROOM : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("red_mushroom") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: RED_MUSHROOM , properties : & [] , } } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static ROOTED_AZALEA_TREE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("rooted_azalea_tree") , kind : ConfiguredFeatureKind :: RootSystem (RootSystemConfiguration { feature : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Reference (& crate :: vanilla_configured_features :: AZALEA_TREE) , placement : vec ! [] , })) , required_vertical_space_for_tree : 3i32 , level_test_distance : 0i32 , max_level_deviation : 0i32 , root_radius : 3i32 , root_placement_attempts : 20i32 , root_column_max_height : 100i32 , hanging_root_radius : 3i32 , hanging_roots_vertical_span : 2i32 , hanging_root_placement_attempts : 20i32 , allowed_vertical_water_for_tree : 2i32 , root_state_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: ROOTED_DIRT , properties : & [] , } } , hanging_root_state_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: HANGING_ROOTS , properties : & [("waterlogged" , "false")] , } } , root_replaceable : BlockHolderSet :: Tag (Identifier :: vanilla_static ("azalea_root_replaceable")) , allowed_tree_position : BlockPredicate :: AllOf { predicates : vec ! [BlockPredicate :: AnyOf { predicates : vec ! [BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("air") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("replaceable_by_trees") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }] } , BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("azalea_grows_on") , offset : IVec3 :: new (0i32 , - 1i32 , 0i32) }] } , }) , id : OnceLock :: new () , } }) ; pub static ROOTED_SULFUR_SPRING : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("rooted_sulfur_spring") , kind : ConfiguredFeatureKind :: RootSystem (RootSystemConfiguration { feature : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Reference (& crate :: vanilla_configured_features :: SULFUR_SPRING) , placement : vec ! [] , })) , required_vertical_space_for_tree : 5i32 , level_test_distance : 8i32 , max_level_deviation : 2i32 , root_radius : 3i32 , root_placement_attempts : 20i32 , root_column_max_height : 184i32 , hanging_root_radius : 1i32 , hanging_roots_vertical_span : 1i32 , hanging_root_placement_attempts : 1i32 , allowed_vertical_water_for_tree : 1i32 , root_state_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SULFUR , properties : & [] , } } , hanging_root_state_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SULFUR , properties : & [] , } } , root_replaceable : BlockHolderSet :: Tag (Identifier :: vanilla_static ("azalea_root_replaceable")) , allowed_tree_position : BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("air") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , }) , id : OnceLock :: new () , } }) ; pub static SCULK_PATCH_ANCIENT_CITY : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("sculk_patch_ancient_city") , kind : ConfiguredFeatureKind :: SculkPatch (SculkPatchConfiguration { charge_count : 10i32 , amount_per_charge : 32i32 , spread_attempts : 64i32 , growth_rounds : 0i32 , spread_rounds : 1i32 , extra_rare_growths : IntProvider :: Uniform { min_inclusive : 1i32 , max_inclusive : 3i32 , } , catalyst_chance : 0.5f32 , }) , id : OnceLock :: new () , } }) ; pub static SCULK_PATCH_DEEP_DARK : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("sculk_patch_deep_dark") , kind : ConfiguredFeatureKind :: SculkPatch (SculkPatchConfiguration { charge_count : 10i32 , amount_per_charge : 32i32 , spread_attempts : 64i32 , growth_rounds : 0i32 , spread_rounds : 1i32 , extra_rare_growths : IntProvider :: Constant (0i32) , catalyst_chance : 0.5f32 , }) , id : OnceLock :: new () , } }) ; pub static SCULK_VEIN : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("sculk_vein") , kind : ConfiguredFeatureKind :: MultifaceGrowth (MultifaceGrowthConfiguration { block : & vanilla_blocks :: SCULK_VEIN , search_range : 20i32 , can_place_on_floor : true , can_place_on_ceiling : true , can_place_on_wall : true , chance_of_spreading : 1f32 , can_be_placed_on : vec ! [& vanilla_blocks :: STONE , & vanilla_blocks :: ANDESITE , & vanilla_blocks :: DIORITE , & vanilla_blocks :: GRANITE , & vanilla_blocks :: DRIPSTONE_BLOCK , & vanilla_blocks :: CALCITE , & vanilla_blocks :: TUFF , & vanilla_blocks :: DEEPSLATE] , }) , id : OnceLock :: new () , } }) ; pub static SEA_PICKLE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("sea_pickle") , kind : ConfiguredFeatureKind :: SeaPickle (SeaPickleConfiguration { count : IntProvider :: Constant (20i32) , }) , id : OnceLock :: new () , } }) ; pub static SEAGRASS_MID : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("seagrass_mid") , kind : ConfiguredFeatureKind :: Seagrass (SeagrassConfiguration { probability : 0.6f32 , }) , id : OnceLock :: new () , } }) ; pub static SEAGRASS_SHORT : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("seagrass_short") , kind : ConfiguredFeatureKind :: Seagrass (SeagrassConfiguration { probability : 0.3f32 , }) , id : OnceLock :: new () , } }) ; pub static SEAGRASS_SLIGHTLY_LESS_SHORT : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("seagrass_slightly_less_short") , kind : ConfiguredFeatureKind :: Seagrass (SeagrassConfiguration { probability : 0.4f32 , }) , id : OnceLock :: new () , } }) ; pub static SEAGRASS_TALL : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("seagrass_tall") , kind : ConfiguredFeatureKind :: Seagrass (SeagrassConfiguration { probability : 0.8f32 , }) , id : OnceLock :: new () , } }) ; pub static SMALL_BASALT_COLUMNS : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("small_basalt_columns") , kind : ConfiguredFeatureKind :: BasaltColumns (BasaltColumnsConfiguration { height : IntProvider :: Uniform { min_inclusive : 1i32 , max_inclusive : 4i32 , } , reach : IntProvider :: Constant (1i32) , }) , id : OnceLock :: new () , } }) ; pub static SPORE_BLOSSOM : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("spore_blossom") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SPORE_BLOSSOM , properties : & [] , } } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static SPRING_LAVA_FROZEN : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("spring_lava_frozen") , kind : ConfiguredFeatureKind :: SpringFeature (SpringConfiguration { state : FluidStateData { fluid : & vanilla_fluids :: LAVA , properties : & [("falling" , "true")] , } , requires_block_below : true , rock_count : 4i32 , hole_count : 1i32 , valid_blocks : BlockHolderSet :: Entries (vec ! [& vanilla_blocks :: SNOW_BLOCK , & vanilla_blocks :: POWDER_SNOW , & vanilla_blocks :: PACKED_ICE]) , }) , id : OnceLock :: new () , } }) ; pub static SPRING_LAVA_NETHER : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("spring_lava_nether") , kind : ConfiguredFeatureKind :: SpringFeature (SpringConfiguration { state : FluidStateData { fluid : & vanilla_fluids :: LAVA , properties : & [("falling" , "true")] , } , requires_block_below : true , rock_count : 4i32 , hole_count : 1i32 , valid_blocks : BlockHolderSet :: Entries (vec ! [& vanilla_blocks :: NETHERRACK , & vanilla_blocks :: SOUL_SAND , & vanilla_blocks :: GRAVEL , & vanilla_blocks :: MAGMA_BLOCK , & vanilla_blocks :: BLACKSTONE]) , }) , id : OnceLock :: new () , } }) ; pub static SPRING_LAVA_OVERWORLD : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("spring_lava_overworld") , kind : ConfiguredFeatureKind :: SpringFeature (SpringConfiguration { state : FluidStateData { fluid : & vanilla_fluids :: LAVA , properties : & [("falling" , "true")] , } , requires_block_below : true , rock_count : 4i32 , hole_count : 1i32 , valid_blocks : BlockHolderSet :: Entries (vec ! [& vanilla_blocks :: STONE , & vanilla_blocks :: GRANITE , & vanilla_blocks :: DIORITE , & vanilla_blocks :: ANDESITE , & vanilla_blocks :: DEEPSLATE , & vanilla_blocks :: TUFF , & vanilla_blocks :: CALCITE , & vanilla_blocks :: DIRT]) , }) , id : OnceLock :: new () , } }) ; pub static SPRING_NETHER_CLOSED : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("spring_nether_closed") , kind : ConfiguredFeatureKind :: SpringFeature (SpringConfiguration { state : FluidStateData { fluid : & vanilla_fluids :: LAVA , properties : & [("falling" , "true")] , } , requires_block_below : false , rock_count : 5i32 , hole_count : 0i32 , valid_blocks : BlockHolderSet :: Entries (vec ! [& vanilla_blocks :: NETHERRACK]) , }) , id : OnceLock :: new () , } }) ; pub static SPRING_NETHER_OPEN : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("spring_nether_open") , kind : ConfiguredFeatureKind :: SpringFeature (SpringConfiguration { state : FluidStateData { fluid : & vanilla_fluids :: LAVA , properties : & [("falling" , "true")] , } , requires_block_below : false , rock_count : 4i32 , hole_count : 1i32 , valid_blocks : BlockHolderSet :: Entries (vec ! [& vanilla_blocks :: NETHERRACK]) , }) , id : OnceLock :: new () , } }) ; pub static SPRING_WATER : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("spring_water") , kind : ConfiguredFeatureKind :: SpringFeature (SpringConfiguration { state : FluidStateData { fluid : & vanilla_fluids :: WATER , properties : & [("falling" , "true")] , } , requires_block_below : true , rock_count : 4i32 , hole_count : 1i32 , valid_blocks : BlockHolderSet :: Entries (vec ! [& vanilla_blocks :: STONE , & vanilla_blocks :: GRANITE , & vanilla_blocks :: DIORITE , & vanilla_blocks :: ANDESITE , & vanilla_blocks :: DEEPSLATE , & vanilla_blocks :: TUFF , & vanilla_blocks :: CALCITE , & vanilla_blocks :: DIRT , & vanilla_blocks :: SNOW_BLOCK , & vanilla_blocks :: POWDER_SNOW , & vanilla_blocks :: PACKED_ICE]) , }) , id : OnceLock :: new () , } }) ; pub static SPRUCE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("spruce") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SPRUCE_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SPRUCE_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Straight (TrunkPlacerBase { base_height : 5i32 , height_rand_a : 2i32 , height_rand_b : 1i32 , }) , foliage_placer : FoliagePlacer :: Spruce (SpruceFoliagePlacer { radius : IntProvider :: Uniform { min_inclusive : 2i32 , max_inclusive : 3i32 , } , offset : IntProvider :: Uniform { min_inclusive : 0i32 , max_inclusive : 2i32 , } , trunk_height : IntProvider :: Uniform { min_inclusive : 1i32 , max_inclusive : 2i32 , } , }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 2i32 , lower_size : 0i32 , upper_size : 2i32 , min_clipped_height : None , }) , decorators : vec ! [] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static SUGAR_CANE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("sugar_cane") , kind : ConfiguredFeatureKind :: BlockColumn (BlockColumnConfiguration { direction : Direction :: Up , allowed_placement : BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("air") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , layers : vec ! [BlockColumnLayer { height : IntProvider :: BiasedToBottom { min_inclusive : 2i32 , max_inclusive : 4i32 , } , provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SUGAR_CANE , properties : & [("age" , "0")] , } } }] , prioritize_tip : false , }) , id : OnceLock :: new () , } }) ; pub static SULFUR_POOL : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("sulfur_pool") , kind : ConfiguredFeatureKind :: Sequence (CompositeFeatureConfiguration { features : vec ! [PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: Lake (LakeConfiguration { fluid : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: WATER , properties : & [("level" , "0")] , } } , barrier : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SULFUR , properties : & [] , } } , can_place_feature : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlocks { blocks : BlockRefList (vec ! [& vanilla_blocks :: SULFUR_SPIKE]) , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , can_replace_with_air_or_fluid : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("features_cannot_replace") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , can_replace_with_barrier : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("lava_pool_stone_cannot_replace") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , }))) , placement : vec ! [] , })) , PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: POTENT_SULFUR , properties : & [("potent_sulfur_state" , "wet")] , } } , schedule_tick : false , }))) , placement : vec ! [PlacementModifier :: EnvironmentScan { direction_of_search : Direction :: Down , target_condition : BlockPredicate :: AllOf { predicates : vec ! [BlockPredicate :: Solid { offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , BlockPredicate :: MatchingFluids { fluids : FluidRefList (vec ! [& vanilla_fluids :: WATER]) , offset : IVec3 :: new (0i32 , 1i32 , 0i32) }] } , allowed_search_condition : None , max_steps : 4i32 , }] , }))] , }) , id : OnceLock :: new () , } }) ; pub static SULFUR_SPIKE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("sulfur_spike") , kind : ConfiguredFeatureKind :: SimpleRandomSelector (SimpleRandomSelectorConfiguration { features : vec ! [PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: Speleothem (SpeleothemConfiguration { base_block : BlockStateData { block : & vanilla_blocks :: SULFUR , properties : & [] , } , pointed_block : BlockStateData { block : & vanilla_blocks :: SULFUR_SPIKE , properties : & [("thickness" , "tip") , ("vertical_direction" , "up") , ("waterlogged" , "false")] , } , replaceable_blocks : BlockHolderSet :: Tag (Identifier :: vanilla_static ("sulfur_spike_replaceable_blocks")) , chance_of_taller_generation : 0.2f32 , chance_of_directional_spread : 0.7f32 , chance_of_spread_radius2 : 0.5f32 , chance_of_spread_radius3 : 0.5f32 , }))) , placement : vec ! [PlacementModifier :: EnvironmentScan { direction_of_search : Direction :: Down , target_condition : BlockPredicate :: Solid { offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , allowed_search_condition : Some (BlockPredicate :: AnyOf { predicates : vec ! [BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("air") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , BlockPredicate :: MatchingBlocks { blocks : BlockRefList (vec ! [& vanilla_blocks :: WATER]) , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }] }) , max_steps : 12i32 , } , PlacementModifier :: RandomOffset { xz_spread : IntProvider :: Constant (0i32) , y_spread : IntProvider :: Constant (1i32) , }] , })) , PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: Speleothem (SpeleothemConfiguration { base_block : BlockStateData { block : & vanilla_blocks :: SULFUR , properties : & [] , } , pointed_block : BlockStateData { block : & vanilla_blocks :: SULFUR_SPIKE , properties : & [("thickness" , "tip") , ("vertical_direction" , "up") , ("waterlogged" , "false")] , } , replaceable_blocks : BlockHolderSet :: Tag (Identifier :: vanilla_static ("sulfur_spike_replaceable_blocks")) , chance_of_taller_generation : 0.2f32 , chance_of_directional_spread : 0.7f32 , chance_of_spread_radius2 : 0.5f32 , chance_of_spread_radius3 : 0.5f32 , }))) , placement : vec ! [PlacementModifier :: EnvironmentScan { direction_of_search : Direction :: Up , target_condition : BlockPredicate :: Solid { offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , allowed_search_condition : Some (BlockPredicate :: AnyOf { predicates : vec ! [BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("air") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , BlockPredicate :: MatchingBlocks { blocks : BlockRefList (vec ! [& vanilla_blocks :: WATER]) , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }] }) , max_steps : 12i32 , } , PlacementModifier :: RandomOffset { xz_spread : IntProvider :: Constant (0i32) , y_spread : IntProvider :: Constant (- 1i32) , }] , }))] , }) , id : OnceLock :: new () , } }) ; pub static SULFUR_SPIKE_CLUSTER : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("sulfur_spike_cluster") , kind : ConfiguredFeatureKind :: SpeleothemCluster (SpeleothemClusterConfiguration { base_block : BlockStateData { block : & vanilla_blocks :: SULFUR , properties : & [] , } , pointed_block : BlockStateData { block : & vanilla_blocks :: SULFUR_SPIKE , properties : & [("thickness" , "tip") , ("vertical_direction" , "up") , ("waterlogged" , "false")] , } , replaceable_blocks : BlockHolderSet :: Tag (Identifier :: vanilla_static ("sulfur_spike_replaceable_blocks")) , floor_to_ceiling_search_range : 12i32 , height : IntProvider :: Uniform { min_inclusive : 1i32 , max_inclusive : 4i32 , } , radius : IntProvider :: Uniform { min_inclusive : 2i32 , max_inclusive : 8i32 , } , max_stalagmite_stalactite_height_diff : 1i32 , height_deviation : 3i32 , speleothem_block_layer_thickness : IntProvider :: Uniform { min_inclusive : 2i32 , max_inclusive : 4i32 , } , density : FloatProvider :: Uniform { min_inclusive : 0.3f32 , max_exclusive : 0.7f32 , } , wetness : FloatProvider :: Constant (0f32) , chance_of_speleothem_at_max_distance_from_center : 0.1f32 , max_distance_from_edge_affecting_chance_of_speleothem : 3i32 , max_distance_from_center_affecting_height_bias : 8i32 , }) , id : OnceLock :: new () , } }) ; pub static SULFUR_SPRING : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("sulfur_spring") , kind : ConfiguredFeatureKind :: WeightedRandomSelector (WeightedRandomFeatureConfiguration { features : vec ! [WeightedRandomPlacedFeature { data : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: Sequence (CompositeFeatureConfiguration { features : vec ! [PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: TUFF , properties : & [] , } } , schedule_tick : false , }))) , placement : vec ! [PlacementModifier :: Count { count : IntProvider :: Constant (64i32) } , PlacementModifier :: RandomOffset { xz_spread : IntProvider :: Trapezoid { min : - 7i32 , max : 7i32 , plateau : 0i32 , } , y_spread : IntProvider :: Trapezoid { min : - 3i32 , max : 3i32 , plateau : 0i32 , } , } , PlacementModifier :: EnvironmentScan { direction_of_search : Direction :: Down , target_condition : BlockPredicate :: Solid { offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , allowed_search_condition : None , max_steps : 4i32 , } , PlacementModifier :: BlockPredicateFilter { predicate : BlockPredicate :: Solid { offset : IVec3 :: new (0i32 , 0i32 , 0i32) } }] , })) , PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: Template (TemplateFeatureConfiguration { templates : vec ! [WeightedTemplateEntry { data : TemplateEntry { id : Identifier :: vanilla_static ("spring/sulfur_spring_small_1") , rotations : vec ! [Rotation :: None , Rotation :: Clockwise90 , Rotation :: Clockwise180 , Rotation :: CounterClockwise90] } , weight : 1u32 } , WeightedTemplateEntry { data : TemplateEntry { id : Identifier :: vanilla_static ("spring/sulfur_spring_small_2") , rotations : vec ! [Rotation :: None , Rotation :: Clockwise90 , Rotation :: Clockwise180 , Rotation :: CounterClockwise90] } , weight : 1u32 } , WeightedTemplateEntry { data : TemplateEntry { id : Identifier :: vanilla_static ("spring/sulfur_spring_small_3") , rotations : vec ! [Rotation :: None , Rotation :: Clockwise90 , Rotation :: Clockwise180 , Rotation :: CounterClockwise90] } , weight : 1u32 } , WeightedTemplateEntry { data : TemplateEntry { id : Identifier :: vanilla_static ("spring/sulfur_spring_small_4") , rotations : vec ! [Rotation :: None , Rotation :: Clockwise90 , Rotation :: Clockwise180 , Rotation :: CounterClockwise90] } , weight : 1u32 }] , }))) , placement : vec ! [PlacementModifier :: RandomOffset { xz_spread : IntProvider :: Constant (0i32) , y_spread : IntProvider :: Constant (- 7i32) , }] , }))] , }))) , placement : vec ! [] , })) , weight : 200u32 } , WeightedRandomPlacedFeature { data : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: Sequence (CompositeFeatureConfiguration { features : vec ! [PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: TUFF , properties : & [] , } } , schedule_tick : false , }))) , placement : vec ! [PlacementModifier :: Count { count : IntProvider :: Constant (80i32) } , PlacementModifier :: RandomOffset { xz_spread : IntProvider :: Trapezoid { min : - 8i32 , max : 8i32 , plateau : 0i32 , } , y_spread : IntProvider :: Trapezoid { min : - 3i32 , max : 3i32 , plateau : 0i32 , } , } , PlacementModifier :: EnvironmentScan { direction_of_search : Direction :: Down , target_condition : BlockPredicate :: Solid { offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , allowed_search_condition : None , max_steps : 4i32 , } , PlacementModifier :: BlockPredicateFilter { predicate : BlockPredicate :: Solid { offset : IVec3 :: new (0i32 , 0i32 , 0i32) } }] , })) , PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: Template (TemplateFeatureConfiguration { templates : vec ! [WeightedTemplateEntry { data : TemplateEntry { id : Identifier :: vanilla_static ("spring/sulfur_spring_medium_1") , rotations : vec ! [Rotation :: None , Rotation :: Clockwise90 , Rotation :: Clockwise180 , Rotation :: CounterClockwise90] } , weight : 1u32 } , WeightedTemplateEntry { data : TemplateEntry { id : Identifier :: vanilla_static ("spring/sulfur_spring_medium_2") , rotations : vec ! [Rotation :: None , Rotation :: Clockwise90 , Rotation :: Clockwise180 , Rotation :: CounterClockwise90] } , weight : 1u32 } , WeightedTemplateEntry { data : TemplateEntry { id : Identifier :: vanilla_static ("spring/sulfur_spring_medium_3") , rotations : vec ! [Rotation :: None , Rotation :: Clockwise90 , Rotation :: Clockwise180 , Rotation :: CounterClockwise90] } , weight : 1u32 }] , }))) , placement : vec ! [PlacementModifier :: RandomOffset { xz_spread : IntProvider :: Constant (0i32) , y_spread : IntProvider :: Constant (- 7i32) , }] , }))] , }))) , placement : vec ! [] , })) , weight : 90u32 } , WeightedRandomPlacedFeature { data : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: Sequence (CompositeFeatureConfiguration { features : vec ! [PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: TUFF , properties : & [] , } } , schedule_tick : false , }))) , placement : vec ! [PlacementModifier :: Count { count : IntProvider :: Constant (96i32) } , PlacementModifier :: RandomOffset { xz_spread : IntProvider :: Trapezoid { min : - 9i32 , max : 9i32 , plateau : 0i32 , } , y_spread : IntProvider :: Trapezoid { min : - 3i32 , max : 3i32 , plateau : 0i32 , } , } , PlacementModifier :: EnvironmentScan { direction_of_search : Direction :: Down , target_condition : BlockPredicate :: Solid { offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , allowed_search_condition : None , max_steps : 4i32 , } , PlacementModifier :: BlockPredicateFilter { predicate : BlockPredicate :: Solid { offset : IVec3 :: new (0i32 , 0i32 , 0i32) } }] , })) , PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: Template (TemplateFeatureConfiguration { templates : vec ! [WeightedTemplateEntry { data : TemplateEntry { id : Identifier :: vanilla_static ("spring/sulfur_spring_large_1") , rotations : vec ! [Rotation :: None , Rotation :: Clockwise90 , Rotation :: Clockwise180 , Rotation :: CounterClockwise90] } , weight : 1u32 } , WeightedTemplateEntry { data : TemplateEntry { id : Identifier :: vanilla_static ("spring/sulfur_spring_large_2") , rotations : vec ! [Rotation :: None , Rotation :: Clockwise90 , Rotation :: Clockwise180 , Rotation :: CounterClockwise90] } , weight : 1u32 }] , }))) , placement : vec ! [PlacementModifier :: RandomOffset { xz_spread : IntProvider :: Constant (0i32) , y_spread : IntProvider :: Constant (- 7i32) , }] , }))] , }))) , placement : vec ! [] , })) , weight : 20u32 } , WeightedRandomPlacedFeature { data : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: Sequence (CompositeFeatureConfiguration { features : vec ! [PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: TUFF , properties : & [] , } } , schedule_tick : false , }))) , placement : vec ! [PlacementModifier :: Count { count : IntProvider :: Constant (128i32) } , PlacementModifier :: RandomOffset { xz_spread : IntProvider :: Trapezoid { min : - 10i32 , max : 10i32 , plateau : 0i32 , } , y_spread : IntProvider :: Trapezoid { min : - 3i32 , max : 3i32 , plateau : 0i32 , } , } , PlacementModifier :: EnvironmentScan { direction_of_search : Direction :: Down , target_condition : BlockPredicate :: Solid { offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , allowed_search_condition : None , max_steps : 4i32 , } , PlacementModifier :: BlockPredicateFilter { predicate : BlockPredicate :: Solid { offset : IVec3 :: new (0i32 , 0i32 , 0i32) } }] , })) , PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: Template (TemplateFeatureConfiguration { templates : vec ! [WeightedTemplateEntry { data : TemplateEntry { id : Identifier :: vanilla_static ("spring/sulfur_spring_extra_large_1") , rotations : vec ! [Rotation :: None , Rotation :: Clockwise90 , Rotation :: Clockwise180 , Rotation :: CounterClockwise90] } , weight : 1u32 }] , }))) , placement : vec ! [PlacementModifier :: RandomOffset { xz_spread : IntProvider :: Constant (0i32) , y_spread : IntProvider :: Constant (- 7i32) , }] , }))] , }))) , placement : vec ! [] , })) , weight : 5u32 }] , }) , id : OnceLock :: new () , } }) ; pub static SUNFLOWER : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("sunflower") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: SUNFLOWER , properties : & [("half" , "lower")] , } } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static SUPER_BIRCH_BEES : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("super_birch_bees") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIRCH_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIRCH_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Straight (TrunkPlacerBase { base_height : 5i32 , height_rand_a : 2i32 , height_rand_b : 6i32 , }) , foliage_placer : FoliagePlacer :: Blob (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (0i32) , height : IntProvider :: Constant (3i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , upper_size : 1i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: Beehive { probability : 1f32 }] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static SUPER_BIRCH_BEES_0002 : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("super_birch_bees_0002") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIRCH_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: BIRCH_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Straight (TrunkPlacerBase { base_height : 5i32 , height_rand_a : 2i32 , height_rand_b : 6i32 , }) , foliage_placer : FoliagePlacer :: Blob (BlobFoliagePlacer { radius : IntProvider :: Constant (2i32) , offset : IntProvider :: Constant (0i32) , height : IntProvider :: Constant (3i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , upper_size : 1i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: Beehive { probability : 0.002f32 }] , root_placer : None , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static SWAMP_OAK : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("swamp_oak") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: OAK_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: Straight (TrunkPlacerBase { base_height : 5i32 , height_rand_a : 3i32 , height_rand_b : 0i32 , }) , foliage_placer : FoliagePlacer :: Blob (BlobFoliagePlacer { radius : IntProvider :: Constant (3i32) , offset : IntProvider :: Constant (0i32) , height : IntProvider :: Constant (3i32) }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 1i32 , lower_size : 0i32 , upper_size : 1i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: LeaveVine { probability : 0.25f32 }] , root_placer : None , ignore_vines : false , }) , id : OnceLock :: new () , } }) ; pub static TAIGA_GRASS : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("taiga_grass") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: SHORT_GRASS , properties : & [] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: FERN , properties : & [] , } , weight : 4i32 }] } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static TALL_GRASS : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("tall_grass") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: TALL_GRASS , properties : & [("half" , "lower")] , } } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static TALL_MANGROVE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("tall_mangrove") , kind : ConfiguredFeatureKind :: Tree (TreeConfiguration { trunk_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: MANGROVE_LOG , properties : & [("axis" , "y")] , } } , below_trunk_provider : BlockStateProvider :: RuleBased { fallback : None , rules : vec ! [RuleBasedStateProviderRule { if_true : BlockPredicate :: Not { predicate : Box :: new (BlockPredicate :: MatchingBlockTag { tag : Identifier :: vanilla_static ("cannot_replace_below_tree_trunk") , offset : IVec3 :: new (0i32 , 0i32 , 0i32) }) } , then : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: DIRT , properties : & [] , } } , }] , } , foliage_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: MANGROVE_LEAVES , properties : & [("distance" , "7") , ("persistent" , "false") , ("waterlogged" , "false")] , } } , trunk_placer : TrunkPlacer :: UpwardsBranching (UpwardsBranchingTrunkPlacer { base_height : 4i32 , height_rand_a : 1i32 , height_rand_b : 9i32 , extra_branch_steps : IntProvider :: Uniform { min_inclusive : 1i32 , max_inclusive : 6i32 , } , extra_branch_length : IntProvider :: Uniform { min_inclusive : 0i32 , max_inclusive : 1i32 , } , place_branch_per_log_probability : 0.5f32 , can_grow_through : Identifier :: vanilla_static ("mangrove_logs_can_grow_through") , }) , foliage_placer : FoliagePlacer :: RandomSpread (RandomSpreadFoliagePlacer { radius : IntProvider :: Constant (3i32) , offset : IntProvider :: Constant (0i32) , foliage_height : 2i32 , leaf_placement_attempts : 70i32 , }) , minimum_size : FeatureSize :: TwoLayers (TwoLayersFeatureSize { limit : 3i32 , lower_size : 0i32 , upper_size : 2i32 , min_clipped_height : None , }) , decorators : vec ! [TreeDecorator :: LeaveVine { probability : 0.125f32 } , TreeDecorator :: AttachedToLeaves (AttachedToLeavesDecorator { probability : 0.14f32 , exclusion_radius_xz : 1i32 , exclusion_radius_y : 0i32 , required_empty_blocks : 2i32 , block_provider : BlockStateProvider :: RandomizedInt { property : "age" . to_string () , source : Box :: new (BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: MANGROVE_PROPAGULE , properties : & [("age" , "0") , ("hanging" , "true") , ("stage" , "0") , ("waterlogged" , "false")] , } }) , values : IntProvider :: Uniform { min_inclusive : 0i32 , max_inclusive : 4i32 , } , } , directions : vec ! [Direction :: Down] , }) , TreeDecorator :: Beehive { probability : 0.01f32 }] , root_placer : Some (RootPlacer :: Mangrove (MangroveRootPlacer { trunk_offset_y : IntProvider :: Uniform { min_inclusive : 3i32 , max_inclusive : 7i32 , } , root_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: MANGROVE_ROOTS , properties : & [("waterlogged" , "false")] , } } , above_root_placement : AboveRootPlacement { above_root_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: MOSS_CARPET , properties : & [] , } } , above_root_placement_chance : 0.5f32 , } , mangrove_root_placement : MangroveRootPlacement { can_grow_through : Identifier :: vanilla_static ("mangrove_roots_can_grow_through") , muddy_roots_in : vec ! [Identifier :: vanilla_static ("mud") , Identifier :: vanilla_static ("muddy_mangrove_roots")] , muddy_roots_provider : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: MUDDY_MANGROVE_ROOTS , properties : & [("axis" , "y")] , } } , max_root_width : 8i32 , max_root_length : 15i32 , random_skew_chance : 0.2f32 , } , })) , ignore_vines : true , }) , id : OnceLock :: new () , } }) ; pub static TREES_BADLANDS : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("trees_badlands") , kind : ConfiguredFeatureKind :: RandomSelector (RandomSelectorConfiguration { features : vec ! [WeightedPlacedFeature { chance : 0.0125f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FALLEN_OAK_TREE) }] , default : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: OAK_LEAF_LITTER) , }) , id : OnceLock :: new () , } }) ; pub static TREES_BIRCH : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("trees_birch") , kind : ConfiguredFeatureKind :: RandomSelector (RandomSelectorConfiguration { features : vec ! [WeightedPlacedFeature { chance : 0.0125f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FALLEN_BIRCH_TREE) }] , default : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: BIRCH_BEES_0002) , }) , id : OnceLock :: new () , } }) ; pub static TREES_BIRCH_AND_OAK_LEAF_LITTER : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("trees_birch_and_oak_leaf_litter") , kind : ConfiguredFeatureKind :: RandomSelector (RandomSelectorConfiguration { features : vec ! [WeightedPlacedFeature { chance : 0.0025f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FALLEN_BIRCH_TREE) } , WeightedPlacedFeature { chance : 0.2f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: BIRCH_BEES_0002_LEAF_LITTER) } , WeightedPlacedFeature { chance : 0.1f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FANCY_OAK_BEES_0002_LEAF_LITTER) } , WeightedPlacedFeature { chance : 0.0125f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FALLEN_OAK_TREE) }] , default : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: OAK_BEES_0002_LEAF_LITTER) , }) , id : OnceLock :: new () , } }) ; pub static TREES_FLOWER_FOREST : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("trees_flower_forest") , kind : ConfiguredFeatureKind :: RandomSelector (RandomSelectorConfiguration { features : vec ! [WeightedPlacedFeature { chance : 0.0025f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FALLEN_BIRCH_TREE) } , WeightedPlacedFeature { chance : 0.2f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: BIRCH_BEES_002) } , WeightedPlacedFeature { chance : 0.1f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FANCY_OAK_BEES_002) }] , default : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: OAK_BEES_002) , }) , id : OnceLock :: new () , } }) ; pub static TREES_GROVE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("trees_grove") , kind : ConfiguredFeatureKind :: RandomSelector (RandomSelectorConfiguration { features : vec ! [WeightedPlacedFeature { chance : 0.33333334f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: PINE_ON_SNOW) }] , default : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: SPRUCE_ON_SNOW) , }) , id : OnceLock :: new () , } }) ; pub static TREES_JUNGLE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("trees_jungle") , kind : ConfiguredFeatureKind :: RandomSelector (RandomSelectorConfiguration { features : vec ! [WeightedPlacedFeature { chance : 0.1f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FANCY_OAK_CHECKED) } , WeightedPlacedFeature { chance : 0.5f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: JUNGLE_BUSH) } , WeightedPlacedFeature { chance : 0.33333334f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: MEGA_JUNGLE_TREE_CHECKED) } , WeightedPlacedFeature { chance : 0.0125f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FALLEN_JUNGLE_TREE) }] , default : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: JUNGLE_TREE) , }) , id : OnceLock :: new () , } }) ; pub static TREES_OLD_GROWTH_PINE_TAIGA : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("trees_old_growth_pine_taiga") , kind : ConfiguredFeatureKind :: RandomSelector (RandomSelectorConfiguration { features : vec ! [WeightedPlacedFeature { chance : 0.025641026f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: MEGA_SPRUCE_CHECKED) } , WeightedPlacedFeature { chance : 0.30769232f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: MEGA_PINE_CHECKED) } , WeightedPlacedFeature { chance : 0.33333334f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: PINE_CHECKED) } , WeightedPlacedFeature { chance : 0.0125f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FALLEN_SPRUCE_TREE) }] , default : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: SPRUCE_CHECKED) , }) , id : OnceLock :: new () , } }) ; pub static TREES_OLD_GROWTH_SPRUCE_TAIGA : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("trees_old_growth_spruce_taiga") , kind : ConfiguredFeatureKind :: RandomSelector (RandomSelectorConfiguration { features : vec ! [WeightedPlacedFeature { chance : 0.33333334f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: MEGA_SPRUCE_CHECKED) } , WeightedPlacedFeature { chance : 0.33333334f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: PINE_CHECKED) } , WeightedPlacedFeature { chance : 0.0125f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FALLEN_SPRUCE_TREE) }] , default : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: SPRUCE_CHECKED) , }) , id : OnceLock :: new () , } }) ; pub static TREES_PLAINS : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("trees_plains") , kind : ConfiguredFeatureKind :: RandomSelector (RandomSelectorConfiguration { features : vec ! [WeightedPlacedFeature { chance : 0.33333334f32 , feature : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Reference (& crate :: vanilla_configured_features :: FANCY_OAK_BEES_005) , placement : vec ! [] , })) } , WeightedPlacedFeature { chance : 0.0125f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FALLEN_OAK_TREE) }] , default : PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Reference (& crate :: vanilla_configured_features :: OAK_BEES_005) , placement : vec ! [] , })) , }) , id : OnceLock :: new () , } }) ; pub static TREES_SAVANNA : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("trees_savanna") , kind : ConfiguredFeatureKind :: RandomSelector (RandomSelectorConfiguration { features : vec ! [WeightedPlacedFeature { chance : 0.8f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: ACACIA_CHECKED) } , WeightedPlacedFeature { chance : 0.0125f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FALLEN_OAK_TREE) }] , default : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: OAK_CHECKED) , }) , id : OnceLock :: new () , } }) ; pub static TREES_SNOWY : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("trees_snowy") , kind : ConfiguredFeatureKind :: RandomSelector (RandomSelectorConfiguration { features : vec ! [WeightedPlacedFeature { chance : 0.0125f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FALLEN_SPRUCE_TREE) }] , default : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: SPRUCE_CHECKED) , }) , id : OnceLock :: new () , } }) ; pub static TREES_SPARSE_JUNGLE : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("trees_sparse_jungle") , kind : ConfiguredFeatureKind :: RandomSelector (RandomSelectorConfiguration { features : vec ! [WeightedPlacedFeature { chance : 0.1f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FANCY_OAK_CHECKED) } , WeightedPlacedFeature { chance : 0.5f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: JUNGLE_BUSH) } , WeightedPlacedFeature { chance : 0.0125f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FALLEN_JUNGLE_TREE) }] , default : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: JUNGLE_TREE) , }) , id : OnceLock :: new () , } }) ; pub static TREES_TAIGA : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("trees_taiga") , kind : ConfiguredFeatureKind :: RandomSelector (RandomSelectorConfiguration { features : vec ! [WeightedPlacedFeature { chance : 0.33333334f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: PINE_CHECKED) } , WeightedPlacedFeature { chance : 0.0125f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FALLEN_SPRUCE_TREE) }] , default : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: SPRUCE_CHECKED) , }) , id : OnceLock :: new () , } }) ; pub static TREES_WATER : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("trees_water") , kind : ConfiguredFeatureKind :: RandomSelector (RandomSelectorConfiguration { features : vec ! [WeightedPlacedFeature { chance : 0.1f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FANCY_OAK_CHECKED) }] , default : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: OAK_CHECKED) , }) , id : OnceLock :: new () , } }) ; pub static TREES_WINDSWEPT_HILLS : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("trees_windswept_hills") , kind : ConfiguredFeatureKind :: RandomSelector (RandomSelectorConfiguration { features : vec ! [WeightedPlacedFeature { chance : 0.008325f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FALLEN_SPRUCE_TREE) } , WeightedPlacedFeature { chance : 0.666f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: SPRUCE_CHECKED) } , WeightedPlacedFeature { chance : 0.1f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FANCY_OAK_CHECKED) } , WeightedPlacedFeature { chance : 0.0125f32 , feature : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: FALLEN_OAK_TREE) }] , default : PlacedFeatureRef :: Reference (& crate :: vanilla_placed_features :: OAK_CHECKED) , }) , id : OnceLock :: new () , } }) ; pub static TWISTING_VINES : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("twisting_vines") , kind : ConfiguredFeatureKind :: TwistingVines (TwistingVinesConfiguration { spread_width : 8i32 , spread_height : 4i32 , max_height : 8i32 , }) , id : OnceLock :: new () , } }) ; pub static TWISTING_VINES_BONEMEAL : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("twisting_vines_bonemeal") , kind : ConfiguredFeatureKind :: TwistingVines (TwistingVinesConfiguration { spread_width : 3i32 , spread_height : 1i32 , max_height : 2i32 , }) , id : OnceLock :: new () , } }) ; pub static UNDERWATER_MAGMA : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("underwater_magma") , kind : ConfiguredFeatureKind :: UnderwaterMagma (UnderwaterMagmaConfiguration { floor_search_range : 5i32 , placement_radius_around_floor : 1i32 , placement_probability_per_valid_position : 0.5f32 , }) , id : OnceLock :: new () , } }) ; pub static VINES : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("vines") , kind : ConfiguredFeatureKind :: Vines , id : OnceLock :: new () , } }) ; pub static VOID_START_PLATFORM : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("void_start_platform") , kind : ConfiguredFeatureKind :: VoidStartPlatform , id : OnceLock :: new () , } }) ; pub static WARM_OCEAN_VEGETATION : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("warm_ocean_vegetation") , kind : ConfiguredFeatureKind :: SimpleRandomSelector (SimpleRandomSelectorConfiguration { features : vec ! [PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: CoralTree)) , placement : vec ! [] , })) , PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: CoralClaw)) , placement : vec ! [] , })) , PlacedFeatureRef :: Inline (Box :: new (PlacedFeatureData { feature : ConfiguredFeatureRef :: Inline (Box :: new (ConfiguredFeatureKind :: CoralMushroom)) , placement : vec ! [] , }))] , }) , id : OnceLock :: new () , } }) ; pub static WARPED_FOREST_VEGETATION : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("warped_forest_vegetation") , kind : ConfiguredFeatureKind :: NetherForestVegetation (NetherForestVegetationConfiguration { state_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WARPED_ROOTS , properties : & [] , } , weight : 85i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: CRIMSON_ROOTS , properties : & [] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WARPED_FUNGUS , properties : & [] , } , weight : 13i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: CRIMSON_FUNGUS , properties : & [] , } , weight : 1i32 }] } , spread_width : 8i32 , spread_height : 4i32 , }) , id : OnceLock :: new () , } }) ; pub static WARPED_FOREST_VEGETATION_BONEMEAL : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("warped_forest_vegetation_bonemeal") , kind : ConfiguredFeatureKind :: NetherForestVegetation (NetherForestVegetationConfiguration { state_provider : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WARPED_ROOTS , properties : & [] , } , weight : 85i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: CRIMSON_ROOTS , properties : & [] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WARPED_FUNGUS , properties : & [] , } , weight : 13i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: CRIMSON_FUNGUS , properties : & [] , } , weight : 1i32 }] } , spread_width : 3i32 , spread_height : 1i32 , }) , id : OnceLock :: new () , } }) ; pub static WARPED_FUNGUS : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("warped_fungus") , kind : ConfiguredFeatureKind :: HugeFungus (HugeFungusConfiguration { valid_base_block : BlockStateData { block : & vanilla_blocks :: WARPED_NYLIUM , properties : & [] , } , stem_state : BlockStateData { block : & vanilla_blocks :: WARPED_STEM , properties : & [("axis" , "y")] , } , hat_state : BlockStateData { block : & vanilla_blocks :: WARPED_WART_BLOCK , properties : & [] , } , decor_state : BlockStateData { block : & vanilla_blocks :: SHROOMLIGHT , properties : & [] , } , replaceable_blocks : BlockPredicate :: MatchingBlocks { blocks : BlockRefList (vec ! [& vanilla_blocks :: OAK_SAPLING , & vanilla_blocks :: SPRUCE_SAPLING , & vanilla_blocks :: BIRCH_SAPLING , & vanilla_blocks :: JUNGLE_SAPLING , & vanilla_blocks :: ACACIA_SAPLING , & vanilla_blocks :: CHERRY_SAPLING , & vanilla_blocks :: DARK_OAK_SAPLING , & vanilla_blocks :: PALE_OAK_SAPLING , & vanilla_blocks :: MANGROVE_PROPAGULE , & vanilla_blocks :: DANDELION , & vanilla_blocks :: TORCHFLOWER , & vanilla_blocks :: POPPY , & vanilla_blocks :: BLUE_ORCHID , & vanilla_blocks :: ALLIUM , & vanilla_blocks :: AZURE_BLUET , & vanilla_blocks :: RED_TULIP , & vanilla_blocks :: ORANGE_TULIP , & vanilla_blocks :: WHITE_TULIP , & vanilla_blocks :: PINK_TULIP , & vanilla_blocks :: OXEYE_DAISY , & vanilla_blocks :: CORNFLOWER , & vanilla_blocks :: WITHER_ROSE , & vanilla_blocks :: LILY_OF_THE_VALLEY , & vanilla_blocks :: BROWN_MUSHROOM , & vanilla_blocks :: RED_MUSHROOM , & vanilla_blocks :: WHEAT , & vanilla_blocks :: SUGAR_CANE , & vanilla_blocks :: ATTACHED_PUMPKIN_STEM , & vanilla_blocks :: ATTACHED_MELON_STEM , & vanilla_blocks :: PUMPKIN_STEM , & vanilla_blocks :: MELON_STEM , & vanilla_blocks :: LILY_PAD , & vanilla_blocks :: NETHER_WART , & vanilla_blocks :: COCOA , & vanilla_blocks :: CARROTS , & vanilla_blocks :: POTATOES , & vanilla_blocks :: CHORUS_PLANT , & vanilla_blocks :: CHORUS_FLOWER , & vanilla_blocks :: TORCHFLOWER_CROP , & vanilla_blocks :: PITCHER_CROP , & vanilla_blocks :: BEETROOTS , & vanilla_blocks :: SWEET_BERRY_BUSH , & vanilla_blocks :: WARPED_FUNGUS , & vanilla_blocks :: CRIMSON_FUNGUS , & vanilla_blocks :: WEEPING_VINES , & vanilla_blocks :: WEEPING_VINES_PLANT , & vanilla_blocks :: TWISTING_VINES , & vanilla_blocks :: TWISTING_VINES_PLANT , & vanilla_blocks :: CAVE_VINES , & vanilla_blocks :: CAVE_VINES_PLANT , & vanilla_blocks :: SPORE_BLOSSOM , & vanilla_blocks :: AZALEA , & vanilla_blocks :: FLOWERING_AZALEA , & vanilla_blocks :: MOSS_CARPET , & vanilla_blocks :: PINK_PETALS , & vanilla_blocks :: WILDFLOWERS , & vanilla_blocks :: BIG_DRIPLEAF , & vanilla_blocks :: BIG_DRIPLEAF_STEM , & vanilla_blocks :: SMALL_DRIPLEAF]) , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , planted : false , }) , id : OnceLock :: new () , } }) ; pub static WARPED_FUNGUS_PLANTED : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("warped_fungus_planted") , kind : ConfiguredFeatureKind :: HugeFungus (HugeFungusConfiguration { valid_base_block : BlockStateData { block : & vanilla_blocks :: WARPED_NYLIUM , properties : & [] , } , stem_state : BlockStateData { block : & vanilla_blocks :: WARPED_STEM , properties : & [("axis" , "y")] , } , hat_state : BlockStateData { block : & vanilla_blocks :: WARPED_WART_BLOCK , properties : & [] , } , decor_state : BlockStateData { block : & vanilla_blocks :: SHROOMLIGHT , properties : & [] , } , replaceable_blocks : BlockPredicate :: MatchingBlocks { blocks : BlockRefList (vec ! [& vanilla_blocks :: OAK_SAPLING , & vanilla_blocks :: SPRUCE_SAPLING , & vanilla_blocks :: BIRCH_SAPLING , & vanilla_blocks :: JUNGLE_SAPLING , & vanilla_blocks :: ACACIA_SAPLING , & vanilla_blocks :: CHERRY_SAPLING , & vanilla_blocks :: DARK_OAK_SAPLING , & vanilla_blocks :: PALE_OAK_SAPLING , & vanilla_blocks :: MANGROVE_PROPAGULE , & vanilla_blocks :: DANDELION , & vanilla_blocks :: TORCHFLOWER , & vanilla_blocks :: POPPY , & vanilla_blocks :: BLUE_ORCHID , & vanilla_blocks :: ALLIUM , & vanilla_blocks :: AZURE_BLUET , & vanilla_blocks :: RED_TULIP , & vanilla_blocks :: ORANGE_TULIP , & vanilla_blocks :: WHITE_TULIP , & vanilla_blocks :: PINK_TULIP , & vanilla_blocks :: OXEYE_DAISY , & vanilla_blocks :: CORNFLOWER , & vanilla_blocks :: WITHER_ROSE , & vanilla_blocks :: LILY_OF_THE_VALLEY , & vanilla_blocks :: BROWN_MUSHROOM , & vanilla_blocks :: RED_MUSHROOM , & vanilla_blocks :: WHEAT , & vanilla_blocks :: SUGAR_CANE , & vanilla_blocks :: ATTACHED_PUMPKIN_STEM , & vanilla_blocks :: ATTACHED_MELON_STEM , & vanilla_blocks :: PUMPKIN_STEM , & vanilla_blocks :: MELON_STEM , & vanilla_blocks :: LILY_PAD , & vanilla_blocks :: NETHER_WART , & vanilla_blocks :: COCOA , & vanilla_blocks :: CARROTS , & vanilla_blocks :: POTATOES , & vanilla_blocks :: CHORUS_PLANT , & vanilla_blocks :: CHORUS_FLOWER , & vanilla_blocks :: TORCHFLOWER_CROP , & vanilla_blocks :: PITCHER_CROP , & vanilla_blocks :: BEETROOTS , & vanilla_blocks :: SWEET_BERRY_BUSH , & vanilla_blocks :: WARPED_FUNGUS , & vanilla_blocks :: CRIMSON_FUNGUS , & vanilla_blocks :: WEEPING_VINES , & vanilla_blocks :: WEEPING_VINES_PLANT , & vanilla_blocks :: TWISTING_VINES , & vanilla_blocks :: TWISTING_VINES_PLANT , & vanilla_blocks :: CAVE_VINES , & vanilla_blocks :: CAVE_VINES_PLANT , & vanilla_blocks :: SPORE_BLOSSOM , & vanilla_blocks :: AZALEA , & vanilla_blocks :: FLOWERING_AZALEA , & vanilla_blocks :: MOSS_CARPET , & vanilla_blocks :: PINK_PETALS , & vanilla_blocks :: WILDFLOWERS , & vanilla_blocks :: BIG_DRIPLEAF , & vanilla_blocks :: BIG_DRIPLEAF_STEM , & vanilla_blocks :: SMALL_DRIPLEAF]) , offset : IVec3 :: new (0i32 , 0i32 , 0i32) } , planted : true , }) , id : OnceLock :: new () , } }) ; pub static WATERLILY : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("waterlily") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Simple { state : BlockStateData { block : & vanilla_blocks :: LILY_PAD , properties : & [] , } } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub static WEEPING_VINES : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("weeping_vines") , kind : ConfiguredFeatureKind :: WeepingVines , id : OnceLock :: new () , } }) ; pub static WILDFLOWER : LazyLock < ConfiguredFeature > = LazyLock :: new (|| { ConfiguredFeature { key : Identifier :: vanilla_static ("wildflower") , kind : ConfiguredFeatureKind :: SimpleBlock (SimpleBlockConfiguration { to_place : BlockStateProvider :: Weighted { entries : vec ! [WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WILDFLOWERS , properties : & [("facing" , "north") , ("flower_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WILDFLOWERS , properties : & [("facing" , "east") , ("flower_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WILDFLOWERS , properties : & [("facing" , "south") , ("flower_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WILDFLOWERS , properties : & [("facing" , "west") , ("flower_amount" , "1")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WILDFLOWERS , properties : & [("facing" , "north") , ("flower_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WILDFLOWERS , properties : & [("facing" , "east") , ("flower_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WILDFLOWERS , properties : & [("facing" , "south") , ("flower_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WILDFLOWERS , properties : & [("facing" , "west") , ("flower_amount" , "2")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WILDFLOWERS , properties : & [("facing" , "north") , ("flower_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WILDFLOWERS , properties : & [("facing" , "east") , ("flower_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WILDFLOWERS , properties : & [("facing" , "south") , ("flower_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WILDFLOWERS , properties : & [("facing" , "west") , ("flower_amount" , "3")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WILDFLOWERS , properties : & [("facing" , "north") , ("flower_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WILDFLOWERS , properties : & [("facing" , "east") , ("flower_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WILDFLOWERS , properties : & [("facing" , "south") , ("flower_amount" , "4")] , } , weight : 1i32 } , WeightedBlockState { data : BlockStateData { block : & vanilla_blocks :: WILDFLOWERS , properties : & [("facing" , "west") , ("flower_amount" , "4")] , } , weight : 1i32 }] } , schedule_tick : false , }) , id : OnceLock :: new () , } }) ; pub fn register_configured_features (registry : & mut ConfiguredFeatureRegistry) { registry . register (& ACACIA) ; registry . register (& AMETHYST_GEODE) ; registry . register (& AZALEA_TREE) ; registry . register (& BAMBOO_NO_PODZOL) ; registry . register (& BAMBOO_SOME_PODZOL) ; registry . register (& BAMBOO_VEGETATION) ; registry . register (& BASALT_BLOBS) ; registry . register (& BASALT_PILLAR) ; registry . register (& BERRY_BUSH) ; registry . register (& BIRCH) ; registry . register (& BIRCH_BEES_0002) ; registry . register (& BIRCH_BEES_0002_LEAF_LITTER) ; registry . register (& BIRCH_BEES_002) ; registry . register (& BIRCH_BEES_005) ; registry . register (& BIRCH_LEAF_LITTER) ; registry . register (& BIRCH_TALL) ; registry . register (& BLACKSTONE_BLOBS) ; registry . register (& BLUE_ICE) ; registry . register (& BONUS_CHEST) ; registry . register (& BROWN_MUSHROOM) ; registry . register (& BUSH) ; registry . register (& CACTUS) ; registry . register (& CAVE_VINE) ; registry . register (& CAVE_VINE_IN_MOSS) ; registry . register (& CHERRY) ; registry . register (& CHERRY_BEES_005) ; registry . register (& CHORUS_PLANT) ; registry . register (& CLAY_POOL_WITH_DRIPLEAVES) ; registry . register (& CLAY_WITH_DRIPLEAVES) ; registry . register (& CRIMSON_FOREST_VEGETATION) ; registry . register (& CRIMSON_FOREST_VEGETATION_BONEMEAL) ; registry . register (& CRIMSON_FUNGUS) ; registry . register (& CRIMSON_FUNGUS_PLANTED) ; registry . register (& CRIMSON_ROOTS) ; registry . register (& DARK_FOREST_VEGETATION) ; registry . register (& DARK_OAK) ; registry . register (& DARK_OAK_LEAF_LITTER) ; registry . register (& DEAD_BUSH) ; registry . register (& DELTA) ; registry . register (& DESERT_WELL) ; registry . register (& DISK_CLAY) ; registry . register (& DISK_GRASS) ; registry . register (& DISK_GRAVEL) ; registry . register (& DISK_SAND) ; registry . register (& DRIPLEAF) ; registry . register (& DRIPSTONE_CLUSTER) ; registry . register (& DRY_GRASS) ; registry . register (& END_GATEWAY_DELAYED) ; registry . register (& END_GATEWAY_RETURN) ; registry . register (& END_ISLAND) ; registry . register (& END_PLATFORM) ; registry . register (& END_SPIKE) ; registry . register (& FALLEN_BIRCH_TREE) ; registry . register (& FALLEN_JUNGLE_TREE) ; registry . register (& FALLEN_OAK_TREE) ; registry . register (& FALLEN_SPRUCE_TREE) ; registry . register (& FALLEN_SUPER_BIRCH_TREE) ; registry . register (& FANCY_OAK) ; registry . register (& FANCY_OAK_BEES) ; registry . register (& FANCY_OAK_BEES_0002_LEAF_LITTER) ; registry . register (& FANCY_OAK_BEES_002) ; registry . register (& FANCY_OAK_BEES_005) ; registry . register (& FANCY_OAK_LEAF_LITTER) ; registry . register (& FIREFLY_BUSH) ; registry . register (& FLOWER_CHERRY) ; registry . register (& FLOWER_DEFAULT) ; registry . register (& FLOWER_FLOWER_FOREST) ; registry . register (& FLOWER_MEADOW) ; registry . register (& FLOWER_PALE_GARDEN) ; registry . register (& FLOWER_PLAIN) ; registry . register (& FLOWER_SWAMP) ; registry . register (& FOREST_FLOWERS) ; registry . register (& FOREST_ROCK) ; registry . register (& FOSSIL_COAL) ; registry . register (& FOSSIL_DIAMONDS) ; registry . register (& FREEZE_TOP_LAYER) ; registry . register (& GLOW_LICHEN) ; registry . register (& GLOWSTONE_EXTRA) ; registry . register (& GRASS) ; registry . register (& GRASS_JUNGLE) ; registry . register (& HUGE_BROWN_MUSHROOM) ; registry . register (& HUGE_RED_MUSHROOM) ; registry . register (& ICE_PATCH) ; registry . register (& ICE_SPIKE) ; registry . register (& ICEBERG_BLUE) ; registry . register (& ICEBERG_PACKED) ; registry . register (& JUNGLE_BUSH) ; registry . register (& JUNGLE_TREE) ; registry . register (& JUNGLE_TREE_NO_VINE) ; registry . register (& KELP) ; registry . register (& LAKE_LAVA) ; registry . register (& LARGE_BASALT_COLUMNS) ; registry . register (& LARGE_DRIPSTONE) ; registry . register (& LARGE_FERN) ; registry . register (& LEAF_LITTER) ; registry . register (& LUSH_CAVES_CLAY) ; registry . register (& MANGROVE) ; registry . register (& MANGROVE_VEGETATION) ; registry . register (& MEADOW_TREES) ; registry . register (& MEGA_JUNGLE_TREE) ; registry . register (& MEGA_PINE) ; registry . register (& MEGA_SPRUCE) ; registry . register (& MELON) ; registry . register (& MONSTER_ROOM) ; registry . register (& MOSS_PATCH) ; registry . register (& MOSS_PATCH_BONEMEAL) ; registry . register (& MOSS_PATCH_CEILING) ; registry . register (& MOSS_VEGETATION) ; registry . register (& MUSHROOM_ISLAND_VEGETATION) ; registry . register (& NETHER_SPROUTS) ; registry . register (& NETHER_SPROUTS_BONEMEAL) ; registry . register (& OAK) ; registry . register (& OAK_BEES_0002_LEAF_LITTER) ; registry . register (& OAK_BEES_002) ; registry . register (& OAK_BEES_005) ; registry . register (& OAK_LEAF_LITTER) ; registry . register (& ORE_ANCIENT_DEBRIS_LARGE) ; registry . register (& ORE_ANCIENT_DEBRIS_SMALL) ; registry . register (& ORE_ANDESITE) ; registry . register (& ORE_BLACKSTONE) ; registry . register (& ORE_CLAY) ; registry . register (& ORE_COAL) ; registry . register (& ORE_COAL_BURIED) ; registry . register (& ORE_COPPER_LARGE) ; registry . register (& ORE_COPPER_SMALL) ; registry . register (& ORE_DIAMOND_BURIED) ; registry . register (& ORE_DIAMOND_LARGE) ; registry . register (& ORE_DIAMOND_MEDIUM) ; registry . register (& ORE_DIAMOND_SMALL) ; registry . register (& ORE_DIORITE) ; registry . register (& ORE_DIRT) ; registry . register (& ORE_EMERALD) ; registry . register (& ORE_GOLD) ; registry . register (& ORE_GOLD_BURIED) ; registry . register (& ORE_GRANITE) ; registry . register (& ORE_GRAVEL) ; registry . register (& ORE_GRAVEL_NETHER) ; registry . register (& ORE_INFESTED) ; registry . register (& ORE_IRON) ; registry . register (& ORE_IRON_SMALL) ; registry . register (& ORE_LAPIS) ; registry . register (& ORE_LAPIS_BURIED) ; registry . register (& ORE_MAGMA) ; registry . register (& ORE_NETHER_GOLD) ; registry . register (& ORE_QUARTZ) ; registry . register (& ORE_REDSTONE) ; registry . register (& ORE_SOUL_SAND) ; registry . register (& ORE_TUFF) ; registry . register (& PALE_FOREST_FLOWER) ; registry . register (& PALE_GARDEN_VEGETATION) ; registry . register (& PALE_MOSS_PATCH) ; registry . register (& PALE_MOSS_PATCH_BONEMEAL) ; registry . register (& PALE_MOSS_VEGETATION) ; registry . register (& PALE_OAK) ; registry . register (& PALE_OAK_BONEMEAL) ; registry . register (& PALE_OAK_CREAKING) ; registry . register (& PATCH_FIRE) ; registry . register (& PATCH_SOUL_FIRE) ; registry . register (& PILE_HAY) ; registry . register (& PILE_ICE) ; registry . register (& PILE_MELON) ; registry . register (& PILE_PUMPKIN) ; registry . register (& PILE_SNOW) ; registry . register (& PINE) ; registry . register (& POINTED_DRIPSTONE) ; registry . register (& PUMPKIN) ; registry . register (& RED_MUSHROOM) ; registry . register (& ROOTED_AZALEA_TREE) ; registry . register (& ROOTED_SULFUR_SPRING) ; registry . register (& SCULK_PATCH_ANCIENT_CITY) ; registry . register (& SCULK_PATCH_DEEP_DARK) ; registry . register (& SCULK_VEIN) ; registry . register (& SEA_PICKLE) ; registry . register (& SEAGRASS_MID) ; registry . register (& SEAGRASS_SHORT) ; registry . register (& SEAGRASS_SLIGHTLY_LESS_SHORT) ; registry . register (& SEAGRASS_TALL) ; registry . register (& SMALL_BASALT_COLUMNS) ; registry . register (& SPORE_BLOSSOM) ; registry . register (& SPRING_LAVA_FROZEN) ; registry . register (& SPRING_LAVA_NETHER) ; registry . register (& SPRING_LAVA_OVERWORLD) ; registry . register (& SPRING_NETHER_CLOSED) ; registry . register (& SPRING_NETHER_OPEN) ; registry . register (& SPRING_WATER) ; registry . register (& SPRUCE) ; registry . register (& SUGAR_CANE) ; registry . register (& SULFUR_POOL) ; registry . register (& SULFUR_SPIKE) ; registry . register (& SULFUR_SPIKE_CLUSTER) ; registry . register (& SULFUR_SPRING) ; registry . register (& SUNFLOWER) ; registry . register (& SUPER_BIRCH_BEES) ; registry . register (& SUPER_BIRCH_BEES_0002) ; registry . register (& SWAMP_OAK) ; registry . register (& TAIGA_GRASS) ; registry . register (& TALL_GRASS) ; registry . register (& TALL_MANGROVE) ; registry . register (& TREES_BADLANDS) ; registry . register (& TREES_BIRCH) ; registry . register (& TREES_BIRCH_AND_OAK_LEAF_LITTER) ; registry . register (& TREES_FLOWER_FOREST) ; registry . register (& TREES_GROVE) ; registry . register (& TREES_JUNGLE) ; registry . register (& TREES_OLD_GROWTH_PINE_TAIGA) ; registry . register (& TREES_OLD_GROWTH_SPRUCE_TAIGA) ; registry . register (& TREES_PLAINS) ; registry . register (& TREES_SAVANNA) ; registry . register (& TREES_SNOWY) ; registry . register (& TREES_SPARSE_JUNGLE) ; registry . register (& TREES_TAIGA) ; registry . register (& TREES_WATER) ; registry . register (& TREES_WINDSWEPT_HILLS) ; registry . register (& TWISTING_VINES) ; registry . register (& TWISTING_VINES_BONEMEAL) ; registry . register (& UNDERWATER_MAGMA) ; registry . register (& VINES) ; registry . register (& VOID_START_PLATFORM) ; registry . register (& WARM_OCEAN_VEGETATION) ; registry . register (& WARPED_FOREST_VEGETATION) ; registry . register (& WARPED_FOREST_VEGETATION_BONEMEAL) ; registry . register (& WARPED_FUNGUS) ; registry . register (& WARPED_FUNGUS_PLANTED) ; registry . register (& WATERLILY) ; registry . register (& WEEPING_VINES) ; registry . register (& WILDFLOWER) ; }