diff --git a/test/bp/feature_rules/beards_and_shavers_feature_placement.json b/test/bp/feature_rules/beards_and_shavers_feature_placement.json new file mode 100644 index 00000000..e53194fc --- /dev/null +++ b/test/bp/feature_rules/beards_and_shavers_feature_placement.json @@ -0,0 +1,22 @@ +{ + "format_version": "1.13.0", + + "minecraft:feature_rules": { + "description": { + "identifier": "beards_and_shavers_features:beards_and_shavers_feature_placement", + "places_feature": "beards_and_shavers_features:beards_and_shavers_feature" + }, + + "conditions": { + "placement_pass": "final_pass" + }, + + "distribution": { + "iterations": 1, + + "x": 0, + "z": 0, + "y": "query.heightmap(v.worldx, v.worldz)" + } + } +} \ No newline at end of file diff --git a/test/bp/feature_rules/cave_carver_feature_placement.json b/test/bp/feature_rules/cave_carver_feature_placement.json new file mode 100644 index 00000000..8bf838ce --- /dev/null +++ b/test/bp/feature_rules/cave_carver_feature_placement.json @@ -0,0 +1,14 @@ +{ + "format_version": "1.13.0", + + "minecraft:feature_rules": { + "description": { + "identifier": "cave_carver_features:cave_carver_feature_placement", + "places_feature": "cave_carver_features:cave_carver_feature" + }, + + "conditions": { + "placement_pass": "pregeneration_pass" + } + } +} \ No newline at end of file diff --git a/test/bp/feature_rules/conditional_list_feature_placement.json b/test/bp/feature_rules/conditional_list_feature_placement.json new file mode 100644 index 00000000..81bc3d37 --- /dev/null +++ b/test/bp/feature_rules/conditional_list_feature_placement.json @@ -0,0 +1,22 @@ +{ + "format_version": "1.13.0", + + "minecraft:feature_rules": { + "description": { + "identifier": "conditional_list_features:conditional_list_feature_placement", + "places_feature": "conditional_list_features:conditional_list_feature" + }, + + "conditions": { + "placement_pass": "final_pass" + }, + + "distribution": { + "iterations": 1, + + "x": 0, + "z": 0, + "y": 90 + } + } +} \ No newline at end of file diff --git a/test/bp/feature_rules/geode_feature_placement.json b/test/bp/feature_rules/geode_feature_placement.json new file mode 100644 index 00000000..f21cf8e6 --- /dev/null +++ b/test/bp/feature_rules/geode_feature_placement.json @@ -0,0 +1,22 @@ +{ + "format_version": "1.13.0", + + "minecraft:feature_rules": { + "description": { + "identifier": "geode_features:geode_feature_placement", + "places_feature": "geode_features:geode_feature" + }, + + "conditions": { + "placement_pass": "final_pass" + }, + + "distribution": { + "iterations": "math.mod(math.floor(v.originx / 16), 4) == 0 && math.mod(math.floor(v.originz / 16), 4) == 0", + + "x": 0, + "z": 0, + "y": 90 + } + } +} \ No newline at end of file diff --git a/test/bp/feature_rules/growing_plant_feature_placement.json b/test/bp/feature_rules/growing_plant_feature_placement.json new file mode 100644 index 00000000..4e19dfee --- /dev/null +++ b/test/bp/feature_rules/growing_plant_feature_placement.json @@ -0,0 +1,22 @@ +{ + "format_version": "1.13.0", + + "minecraft:feature_rules": { + "description": { + "identifier": "growing_plant_features:growing_plant_feature_placement", + "places_feature": "growing_plant_features:growing_plant_feature" + }, + + "conditions": { + "placement_pass": "final_pass" + }, + + "distribution": { + "iterations": 1, + + "x": 0, + "z": 0, + "y": 61 + } + } +} \ No newline at end of file diff --git a/test/bp/feature_rules/hell_cave_carver_feature_placement.json b/test/bp/feature_rules/hell_cave_carver_feature_placement.json new file mode 100644 index 00000000..537a0c49 --- /dev/null +++ b/test/bp/feature_rules/hell_cave_carver_feature_placement.json @@ -0,0 +1,14 @@ +{ + "format_version": "1.13.0", + + "minecraft:feature_rules": { + "description": { + "identifier": "hell_cave_carver_features:hell_cave_carver_feature_placement", + "places_feature": "hell_cave_carver_features:hell_cave_carver_feature" + }, + + "conditions": { + "placement_pass": "pregeneration_pass" + } + } +} \ No newline at end of file diff --git a/test/bp/feature_rules/multiface_feature_placement.json b/test/bp/feature_rules/multiface_feature_placement.json new file mode 100644 index 00000000..a387fa1f --- /dev/null +++ b/test/bp/feature_rules/multiface_feature_placement.json @@ -0,0 +1,22 @@ +{ + "format_version": "1.13.0", + + "minecraft:feature_rules": { + "description": { + "identifier": "multiface_features:multiface_feature_placement", + "places_feature": "multiface_features:multiface_feature" + }, + + "conditions": { + "placement_pass": "final_pass" + }, + + "distribution": { + "iterations": 1, + + "x": 0, + "z": 0, + "y": "query.heightmap(v.worldx, v.worldz)" + } + } +} \ No newline at end of file diff --git a/test/bp/feature_rules/rect_layout_feature_placement.json b/test/bp/feature_rules/rect_layout_feature_placement.json new file mode 100644 index 00000000..a91cfe96 --- /dev/null +++ b/test/bp/feature_rules/rect_layout_feature_placement.json @@ -0,0 +1,22 @@ +{ + "format_version": "1.13.0", + + "minecraft:feature_rules": { + "description": { + "identifier": "rect_layout_features:rect_layout_feature_placement", + "places_feature": "rect_layout_features:rect_layout_feature" + }, + + "conditions": { + "placement_pass": "final_pass" + }, + + "distribution": { + "iterations": 1, + + "x": 0, + "z": 0, + "y": 90 + } + } +} \ No newline at end of file diff --git a/test/bp/feature_rules/scan_surface_feature_placement.json b/test/bp/feature_rules/scan_surface_feature_placement.json new file mode 100644 index 00000000..140faf8b --- /dev/null +++ b/test/bp/feature_rules/scan_surface_feature_placement.json @@ -0,0 +1,22 @@ +{ + "format_version": "1.13.0", + + "minecraft:feature_rules": { + "description": { + "identifier": "scan_surface_features:scan_surface_feature_placement", + "places_feature": "scan_surface_features:scan_surface_feature" + }, + + "conditions": { + "placement_pass": "final_pass" + }, + + "distribution": { + "iterations": 1, + + "x": 0, + "z": 0, + "y": 0 + } + } +} \ No newline at end of file diff --git a/test/bp/feature_rules/underwater_cave_carver_feature_placement.json b/test/bp/feature_rules/underwater_cave_carver_feature_placement.json new file mode 100644 index 00000000..17ba36f8 --- /dev/null +++ b/test/bp/feature_rules/underwater_cave_carver_feature_placement.json @@ -0,0 +1,14 @@ +{ + "format_version": "1.13.0", + + "minecraft:feature_rules": { + "description": { + "identifier": "underwater_cave_carver_features:underwater_cave_carver_feature_placement", + "places_feature": "underwater_cave_carver_features:underwater_cave_carver_feature" + }, + + "conditions": { + "placement_pass": "pregeneration_pass" + } + } +} \ No newline at end of file diff --git a/test/bp/feature_rules/vegetation_patch_feature_placement.json b/test/bp/feature_rules/vegetation_patch_feature_placement.json new file mode 100644 index 00000000..bf0a28eb --- /dev/null +++ b/test/bp/feature_rules/vegetation_patch_feature_placement.json @@ -0,0 +1,22 @@ +{ + "format_version": "1.13.0", + + "minecraft:feature_rules": { + "description": { + "identifier": "vegetation_patch_features:vegetation_patch_feature_placement", + "places_feature": "vegetation_patch_features:vegetation_patch_feature" + }, + + "conditions": { + "placement_pass": "final_pass" + }, + + "distribution": { + "iterations": 1, + + "x": 0, + "z": 0, + "y": "query.heightmap(v.worldx, v.worldz)" + } + } +} \ No newline at end of file diff --git a/test/bp/features/beards_and_shavers_feature.json b/test/bp/features/beards_and_shavers_feature.json new file mode 100644 index 00000000..392a0f5e --- /dev/null +++ b/test/bp/features/beards_and_shavers_feature.json @@ -0,0 +1,20 @@ +{ + "format_version": "1.13.0", + + "minecraft:beards_and_shavers": { + "description": { + "identifier": "beards_and_shavers_features:beards_and_shavers_feature" + }, + + "places_feature": "beards_and_shavers_features:beards_and_shavers_feature_obsidian", + "y_delta": 0, + + "bounding_box_min": [-4, 0, -4], + "bounding_box_max": [5, 12, 5], + "beard_raggedness_min": 0.25, + "beard_raggedness_max": 0.5, + + "surface_block_type": "minecraft:grass", + "subsurface_block_type": "minecraft:dirt" + } +} \ No newline at end of file diff --git a/test/bp/features/beards_and_shavers_feature_obsidian.json b/test/bp/features/beards_and_shavers_feature_obsidian.json new file mode 100644 index 00000000..c6c65473 --- /dev/null +++ b/test/bp/features/beards_and_shavers_feature_obsidian.json @@ -0,0 +1,14 @@ +{ + "format_version": "1.13.0", + + "minecraft:single_block_feature": { + "description": { + "identifier": "beards_and_shavers_features:beards_and_shavers_feature_obsidian" + }, + + "places_block": "minecraft:obsidian", + + "enforce_placement_rules": false, + "enforce_survivability_rules": false + } +} \ No newline at end of file diff --git a/test/bp/features/cave_carver_feature.json b/test/bp/features/cave_carver_feature.json new file mode 100644 index 00000000..97c11d8e --- /dev/null +++ b/test/bp/features/cave_carver_feature.json @@ -0,0 +1,11 @@ +{ + "format_version": "1.13.0", + "minecraft:cave_carver_feature": { + "description": { + "identifier": "cave_carver_features:cave_carver_feature" + }, + + "fill_with": "minecraft:cobblestone", + "width_modifier": 1 + } +} \ No newline at end of file diff --git a/test/bp/features/conditional_list_feature.json b/test/bp/features/conditional_list_feature.json new file mode 100644 index 00000000..e8bc8442 --- /dev/null +++ b/test/bp/features/conditional_list_feature.json @@ -0,0 +1,17 @@ +{ + "format_version": "1.13.0", + + "minecraft:conditional_list": { + "description": { + "identifier": "conditional_list_features:conditional_list_feature" + }, + + "conditional_features": [ + { + "places_feature": "conditional_list_features:conditional_list_feature_obsidian", + "condition": "query.noise(v.originx, v.originz) < 0" + } + ], + "early_out_scheme": "placement_success" + } +} \ No newline at end of file diff --git a/test/bp/features/conditional_list_feature_obsidian.json b/test/bp/features/conditional_list_feature_obsidian.json new file mode 100644 index 00000000..ca6911e7 --- /dev/null +++ b/test/bp/features/conditional_list_feature_obsidian.json @@ -0,0 +1,14 @@ +{ + "format_version": "1.13.0", + + "minecraft:single_block_feature": { + "description": { + "identifier": "conditional_list_features:conditional_list_feature_obsidian" + }, + + "places_block": "minecraft:obsidian", + + "enforce_placement_rules": false, + "enforce_survivability_rules": false + } +} \ No newline at end of file diff --git a/test/bp/features/geode_feature.json b/test/bp/features/geode_feature.json new file mode 100644 index 00000000..a4990f03 --- /dev/null +++ b/test/bp/features/geode_feature.json @@ -0,0 +1,37 @@ +{ + "format_version": "1.13.0", + "minecraft:geode_feature": { + "description": { + "identifier": "geode_features:geode_feature" + }, + + "max_radius": 80, + + "filler": "minecraft:air", + + "inner_layer": "minecraft:stone", + "alternate_inner_layer": "minecraft:cobblestone", + "use_alternate_layer0_chance": 0.5, + + "middle_layer": "minecraft:planks", + + "outer_layer": "minecraft:obsidian", + + "inner_placements": ["mincraft:glass"], + "placements_require_layer0_alternate": true, + "use_potential_placements_chance": 0.125, + + "min_distribution_points": 3, + "max_distribution_points": 3, + "min_outer_wall_distance": 3, + "max_outer_wall_distance": 3, + "min_point_offset": 0, + "max_point_offset": 0, + "noise_multiplier": 0.025, + "invalid_blocks_threshold": 10000, + + "crack_point_offset": 0, + "generate_crack_chance": 0, + "base_crack_size": 0 + } +} \ No newline at end of file diff --git a/test/bp/features/growing_plant_feature.json b/test/bp/features/growing_plant_feature.json new file mode 100644 index 00000000..bc68f373 --- /dev/null +++ b/test/bp/features/growing_plant_feature.json @@ -0,0 +1,26 @@ +{ + "format_version": "1.13.0", + "minecraft:growing_plant_feature": { + "description": { + "identifier": "growing_plant_features:growing_plant_feature" + }, + + "growth_direction": "up", + "height_distribution": [ + [{"range_min": 8, "range_max": 9}, 1], + [6, 1] + ], + "age" : {"range_min": 3, "range_max": 4}, + + "body_blocks" : [ + ["minecraft:planks", 4], + ["minecraft:obsidian", 1] + ], + "head_blocks" : [ + ["minecraft:glass", 4], + ["minecraft:sand", 1 ] + ], + + "allow_water": true + } +} \ No newline at end of file diff --git a/test/bp/features/hell_cave_carver_feature.json b/test/bp/features/hell_cave_carver_feature.json new file mode 100644 index 00000000..e15114ee --- /dev/null +++ b/test/bp/features/hell_cave_carver_feature.json @@ -0,0 +1,11 @@ +{ + "format_version": "1.13.0", + "minecraft:hell_cave_carver_feature": { + "description": { + "identifier": "hell_cave_carver_features:hell_cave_carver_feature" + }, + + "fill_with": "minecraft:planks", + "width_modifier": 1 + } +} \ No newline at end of file diff --git a/test/bp/features/multiface_feature.json b/test/bp/features/multiface_feature.json new file mode 100644 index 00000000..8ea88908 --- /dev/null +++ b/test/bp/features/multiface_feature.json @@ -0,0 +1,24 @@ +{ + "format_version": "1.13.0", + "minecraft:multiface_feature": { + "description": { + "identifier": "multiface_features:multiface_feature" + }, + + "places_block": "minecraft:glow_lichen", + + "search_range": 8, + "chance_of_spreading": 1, + + "can_place_on_floor": true, + "can_place_on_ceiling": true, + "can_place_on_wall": true, + "can_place_on": [ + "minecraft:grass", + "minecraft:sand", + "minecraft:log", + "minecraft:log2", + "minecraft:leaves" + ] + } +} \ No newline at end of file diff --git a/test/bp/features/multiface_feature_obsidian.json b/test/bp/features/multiface_feature_obsidian.json new file mode 100644 index 00000000..066bd53b --- /dev/null +++ b/test/bp/features/multiface_feature_obsidian.json @@ -0,0 +1,14 @@ +{ + "format_version": "1.13.0", + + "minecraft:single_block_feature": { + "description": { + "identifier": "multiface_features:multiface_feature_obsidian" + }, + + "places_block": "minecraft:obsidian", + + "enforce_placement_rules": false, + "enforce_survivability_rules": false + } +} \ No newline at end of file diff --git a/test/bp/features/ore.md b/test/bp/features/ore.md deleted file mode 100644 index 31b1d2e5..00000000 --- a/test/bp/features/ore.md +++ /dev/null @@ -1,3 +0,0 @@ -# ore - -All references are just block descriptors. diff --git a/test/bp/features/rect_layout_feature.json b/test/bp/features/rect_layout_feature.json new file mode 100644 index 00000000..bbdd6bec --- /dev/null +++ b/test/bp/features/rect_layout_feature.json @@ -0,0 +1,21 @@ +{ + "format_version": "1.13.0", + + "minecraft:rect_layout": { + "description": { + "identifier": "rect_layout_features:rect_layout_feature" + }, + + "ratio_of_empty_space": 0.5, + "feature_areas":[ + { + "feature": "rect_layout_features:rect_layout_feature_obsidian", + "area_dimensions": [1, 1] + }, + { + "feature": "rect_layout_features:rect_layout_feature_planks", + "area_dimensions": [1, 1] + } + ] + } +} \ No newline at end of file diff --git a/test/bp/features/rect_layout_feature_obsidian.json b/test/bp/features/rect_layout_feature_obsidian.json new file mode 100644 index 00000000..7d7bfc49 --- /dev/null +++ b/test/bp/features/rect_layout_feature_obsidian.json @@ -0,0 +1,14 @@ +{ + "format_version": "1.13.0", + + "minecraft:single_block_feature": { + "description": { + "identifier": "rect_layout_features:rect_layout_feature_obsidian" + }, + + "places_block": "minecraft:obsidian", + + "enforce_placement_rules": false, + "enforce_survivability_rules": false + } +} \ No newline at end of file diff --git a/test/bp/features/rect_layout_feature_planks.json b/test/bp/features/rect_layout_feature_planks.json new file mode 100644 index 00000000..530f4d53 --- /dev/null +++ b/test/bp/features/rect_layout_feature_planks.json @@ -0,0 +1,14 @@ +{ + "format_version": "1.13.0", + + "minecraft:single_block_feature": { + "description": { + "identifier": "rect_layout_features:rect_layout_feature_planks" + }, + + "places_block": "minecraft:planks", + + "enforce_placement_rules": false, + "enforce_survivability_rules": false + } +} \ No newline at end of file diff --git a/test/bp/features/scan_surface_feature.json b/test/bp/features/scan_surface_feature.json new file mode 100644 index 00000000..86fcff16 --- /dev/null +++ b/test/bp/features/scan_surface_feature.json @@ -0,0 +1,11 @@ +{ + "format_version": "1.13.0", + + "minecraft:scan_surface": { + "description": { + "identifier": "scan_surface_features:scan_surface_feature" + }, + + "scan_surface_feature": "scan_surface_features:scan_surface_feature_obsidian" + } +} \ No newline at end of file diff --git a/test/bp/features/scan_surface_feature_obsidian.json b/test/bp/features/scan_surface_feature_obsidian.json new file mode 100644 index 00000000..fabdb3bb --- /dev/null +++ b/test/bp/features/scan_surface_feature_obsidian.json @@ -0,0 +1,14 @@ +{ + "format_version": "1.13.0", + + "minecraft:single_block_feature": { + "description": { + "identifier": "scan_surface_features:scan_surface_feature_obsidian" + }, + + "places_block": "minecraft:obsidian", + + "enforce_placement_rules": false, + "enforce_survivability_rules": false + } +} \ No newline at end of file diff --git a/test/bp/features/scatter.md b/test/bp/features/scatter.md deleted file mode 100644 index 446b3ff3..00000000 --- a/test/bp/features/scatter.md +++ /dev/null @@ -1,5 +0,0 @@ -# Scatter features note - -The Mojang schema for these features is perfectly valid with a caveat: In scatter features, "x", "y", "z", "scatter_chance", and "iterations" can also -be numbers, as can the "extents" of any of the coordinates. Well, the extents are arrays, but their bounds can be numbers. Finally, note that anywhere -a block can be placed in features, a stateful notation can be used, as I describe here: https://wiki.bedrock.dev/concepts/biomes#block-types diff --git a/test/bp/features/underwater_cave_carver_feature.json b/test/bp/features/underwater_cave_carver_feature.json new file mode 100644 index 00000000..1f12cac4 --- /dev/null +++ b/test/bp/features/underwater_cave_carver_feature.json @@ -0,0 +1,12 @@ +{ + "format_version": "1.13.0", + "minecraft:underwater_cave_carver_feature": { + "description": { + "identifier": "underwater_cave_carver_features:underwater_cave_carver_feature" + }, + + "fill_with": "minecraft:obsidian", + "width_modifier": 1, + "replace_air_with": "minecraft:leaves" + } +} \ No newline at end of file diff --git a/test/bp/features/vegetation_patch_feature.json b/test/bp/features/vegetation_patch_feature.json new file mode 100644 index 00000000..bb095ee0 --- /dev/null +++ b/test/bp/features/vegetation_patch_feature.json @@ -0,0 +1,29 @@ +{ + "format_version": "1.13.0", + + "minecraft:vegetation_patch_feature": { + "description": { + "identifier": "vegetation_patch_features:vegetation_patch_feature" + }, + + "replaceable_blocks": [ + "minecraft:air", + "minecraft:dirt", + "minecraft:grass", + "minecraft:sand", + "minecraft:stone" + ], + "ground_block": "minecraft:planks", + "waterlogged": true, + + "surface": "floor", + "horizontal_radius": 4, + "vertical_range": 5, + "depth": 4, + "extra_deep_block_chance": 0.5, + "extra_edge_column_chance": 0.5, + + "vegetation_feature": "vegetation_patch_features:vegetation_patch_feature_obsidian", + "vegetation_chance": 0.125 + } +} \ No newline at end of file diff --git a/test/bp/features/vegetation_patch_feature_obsidian.json b/test/bp/features/vegetation_patch_feature_obsidian.json new file mode 100644 index 00000000..bfe775ef --- /dev/null +++ b/test/bp/features/vegetation_patch_feature_obsidian.json @@ -0,0 +1,14 @@ +{ + "format_version": "1.13.0", + + "minecraft:single_block_feature": { + "description": { + "identifier": "vegetation_patch_features:vegetation_patch_feature_obsidian" + }, + + "places_block": "minecraft:fence", + + "enforce_placement_rules": false, + "enforce_survivability_rules": false + } +} \ No newline at end of file diff --git a/test/bp/manifest.json b/test/bp/manifest.json index 9aea1b47..87acbc7a 100644 --- a/test/bp/manifest.json +++ b/test/bp/manifest.json @@ -1,23 +1,25 @@ { - "format_version": 2, + "format_version": 2, - "metadata": { - "authors": ["Christopher Cook"] - }, + "metadata": { + "authors": [ + "Christopher Cook" + ] + }, - "header": { - "name": "Aggregate Features", - "uuid": "9f562163-9835-4d63-90a5-558f198088f9", - "description": "Tests aggregate features", - "version": [1, 0, 0], - "min_engine_version": [1, 17, 0] - }, - "modules": [ - { - "type": "data", - "description": "Behavior pack for Aggregate Features", - "uuid": "82df4a01-6431-4d4c-9d20-d62409481ad4", - "version": [1, 0, 0] - } - ] -} + "header": { + "name": "Hell Cave Carver Features", + "uuid": "459909b9-fdb8-4eb3-9b8d-55d09545b89d", + "description": "Tests hell cave carver features", + "version": [1, 0, 0], + "min_engine_version": [1, 17, 0] + }, + "modules": [ + { + "type": "data", + "description": "Behavior pack for Hell Cave Carver Features", + "uuid": "1016f5a1-5eaf-4ccd-8e0c-a4231d7bb308", + "version": [1, 0, 0] + } + ] +} \ No newline at end of file