Added more features
This commit is contained in:
@@ -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)"
|
||||
}
|
||||
}
|
||||
}
|
||||
14
test/bp/feature_rules/cave_carver_feature_placement.json
Normal file
14
test/bp/feature_rules/cave_carver_feature_placement.json
Normal file
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
22
test/bp/feature_rules/geode_feature_placement.json
Normal file
22
test/bp/feature_rules/geode_feature_placement.json
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
22
test/bp/feature_rules/growing_plant_feature_placement.json
Normal file
22
test/bp/feature_rules/growing_plant_feature_placement.json
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
22
test/bp/feature_rules/multiface_feature_placement.json
Normal file
22
test/bp/feature_rules/multiface_feature_placement.json
Normal file
@@ -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)"
|
||||
}
|
||||
}
|
||||
}
|
||||
22
test/bp/feature_rules/rect_layout_feature_placement.json
Normal file
22
test/bp/feature_rules/rect_layout_feature_placement.json
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
22
test/bp/feature_rules/scan_surface_feature_placement.json
Normal file
22
test/bp/feature_rules/scan_surface_feature_placement.json
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)"
|
||||
}
|
||||
}
|
||||
}
|
||||
20
test/bp/features/beards_and_shavers_feature.json
Normal file
20
test/bp/features/beards_and_shavers_feature.json
Normal file
@@ -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"
|
||||
}
|
||||
}
|
||||
14
test/bp/features/beards_and_shavers_feature_obsidian.json
Normal file
14
test/bp/features/beards_and_shavers_feature_obsidian.json
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
11
test/bp/features/cave_carver_feature.json
Normal file
11
test/bp/features/cave_carver_feature.json
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
17
test/bp/features/conditional_list_feature.json
Normal file
17
test/bp/features/conditional_list_feature.json
Normal file
@@ -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"
|
||||
}
|
||||
}
|
||||
14
test/bp/features/conditional_list_feature_obsidian.json
Normal file
14
test/bp/features/conditional_list_feature_obsidian.json
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
37
test/bp/features/geode_feature.json
Normal file
37
test/bp/features/geode_feature.json
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
26
test/bp/features/growing_plant_feature.json
Normal file
26
test/bp/features/growing_plant_feature.json
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
11
test/bp/features/hell_cave_carver_feature.json
Normal file
11
test/bp/features/hell_cave_carver_feature.json
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
24
test/bp/features/multiface_feature.json
Normal file
24
test/bp/features/multiface_feature.json
Normal file
@@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
14
test/bp/features/multiface_feature_obsidian.json
Normal file
14
test/bp/features/multiface_feature_obsidian.json
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
# ore
|
||||
|
||||
All references are just block descriptors.
|
||||
21
test/bp/features/rect_layout_feature.json
Normal file
21
test/bp/features/rect_layout_feature.json
Normal file
@@ -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]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
14
test/bp/features/rect_layout_feature_obsidian.json
Normal file
14
test/bp/features/rect_layout_feature_obsidian.json
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
14
test/bp/features/rect_layout_feature_planks.json
Normal file
14
test/bp/features/rect_layout_feature_planks.json
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
11
test/bp/features/scan_surface_feature.json
Normal file
11
test/bp/features/scan_surface_feature.json
Normal file
@@ -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"
|
||||
}
|
||||
}
|
||||
14
test/bp/features/scan_surface_feature_obsidian.json
Normal file
14
test/bp/features/scan_surface_feature_obsidian.json
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
12
test/bp/features/underwater_cave_carver_feature.json
Normal file
12
test/bp/features/underwater_cave_carver_feature.json
Normal file
@@ -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"
|
||||
}
|
||||
}
|
||||
29
test/bp/features/vegetation_patch_feature.json
Normal file
29
test/bp/features/vegetation_patch_feature.json
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
14
test/bp/features/vegetation_patch_feature_obsidian.json
Normal file
14
test/bp/features/vegetation_patch_feature_obsidian.json
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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]
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user