Files
netease-modsdk-wiki/docs/wiki/world-generation/structure-features.md
2025-03-20 11:52:46 +08:00

397 lines
7.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 生成自定义结构
category: 巧思案例
mentions:
- DerpMcaddon
- SirLich
tags:
- experimental
---
# 生成自定义结构
<!--@include: @/wiki/bedrock-wiki-mirror.md-->
结构特征是游戏世界生成的基础功能之一,用于在游戏中放置导出的`.mcstructure`文件。
本教程将教你如何生成:
- 地表结构
- 地下结构
- 浮空结构
- 水下结构
- 水面结构
:::tip
若要在安卓设备导出结构文件,可使用此[资源包](https://mcpedl.com/export-structure-button-android-addon/)
:::
请确保将`.mcstructure`文件放置在`BP/structures/`目录下!
## 地表结构
### 特征文件
::: code-group
```json [BP/features/house_feature.json]
{
"format_version": "1.13.0",
"minecraft:structure_template_feature": {
"description": {
"identifier": "wiki:house_feature"
},
"structure_name": "mystructure:house",
"adjustment_radius": 4,
"facing_direction": "random",
"constraints": {
"grounded": {},
"unburied": {},
"block_intersection": {
"block_allowlist": [
"minecraft:air" //结构只能替换空气方块
]
}
}
}
}
```
:::
### 特征规则
::: code-group
```json [BP/feature_rules/plains_house_feature.json]
{
"format_version": "1.13.0",
"minecraft:feature_rules": {
"description": {
"identifier": "wiki:plains_house_feature",
"places_feature": "wiki:house_feature"
},
"conditions": {
"placement_pass": "first_pass",
"minecraft:biome_filter": {
"test": "has_biome_tag",
"operator": "==",
"value": "plains"
}
},
"distribution": {
"iterations": 1,
"x": {
"extent": [0, 16],
"distribution": "uniform"
},
"y": "q.heightmap(v.worldx, v.worldz)", //在区块最高点生成结构
"z": {
"extent": [0, 16],
"distribution": "uniform"
},
"scatter_chance": {
"numerator": 1,
"denominator": 25
}
}
}
}
```
:::
![](/assets/images/world-generation/structure-features/house.png)
## 地下结构
### 特征文件
::: code-group
```json [BP/features/bunker_feature.json]
{
"format_version": "1.13.0",
"minecraft:structure_template_feature": {
"description": {
"identifier": "wiki:bunker_feature"
},
"structure_name": "mystructure:bunker",
"adjustment_radius": 4,
"facing_direction": "random",
"constraints": {
"block_intersection": {
"block_allowlist": [
"minecraft:air", //结构只能替换空气和石头
"minecraft:stone"
]
}
}
}
}
```
:::
### 特征规则
::: code-group
```json [BP/feature_rules/overworld_bunker_feature.json]
{
"format_version": "1.13.0",
"minecraft:feature_rules": {
"description": {
"identifier": "wiki:overworld_bunker_feature",
"places_feature": "wiki:bunker_feature"
},
"conditions": {
"placement_pass": "first_pass",
"minecraft:biome_filter": {
"test": "has_biome_tag",
"operator": "==",
"value": "overworld"
}
},
"distribution": {
"iterations": 1,
"x": {
"extent": [0, 16],
"distribution": "uniform"
},
"y": {
"extent": [
11, //结构将在y11至y50之间生成
50
],
"distribution": "uniform"
},
"z": {
"extent": [0, 16],
"distribution": "uniform"
},
"scatter_chance": {
"numerator": 1,
"denominator": 15
}
}
}
}
```
:::
![](/assets/images/world-generation/structure-features/bunker.png)
## 浮空结构
### 特征文件
::: code-group
```json [BP/features/balloon_feature.json]
{
"format_version": "1.13.0",
"minecraft:structure_template_feature": {
"description": {
"identifier": "wiki:balloon_feature"
},
"structure_name": "mystructure:balloon",
"adjustment_radius": 4,
"facing_direction": "random",
"constraints": {
"block_intersection": {
"block_allowlist": [
"minecraft:air" //结构只能替换空气
]
}
}
}
}
```
:::
### 特征规则
::: code-group
```json [BP/feature_rules/overworld_balloon_feature.json]
{
"format_version": "1.13.0",
"minecraft:feature_rules": {
"description": {
"identifier": "wiki:overworld_baloon_feature",
"places_feature": "wiki:balloon_feature"
},
"conditions": {
"placement_pass": "first_pass",
"minecraft:biome_filter": {
"test": "has_biome_tag",
"operator": "==",
"value": "overworld"
}
},
"distribution": {
"iterations": 1,
"x": {
"extent": [0, 16],
"distribution": "uniform"
},
"y": {
"extent": [
100, //结构将在y100至y200之间生成
200
],
"distribution": "uniform"
},
"z": {
"extent": [0, 16],
"distribution": "uniform"
},
"scatter_chance": {
"numerator": 1,
"denominator": 25
}
}
}
}
```
:::
![](/assets/images/world-generation/structure-features/balloon.png)
## 水下结构
:::tip
对于水下结构请确保对结构进行水淹处理因为Minecraft不会自动进行水淹操作
:::
### 特征文件
::: code-group
```json [BP/features/aqua_temple_feature.json]
{
"format_version": "1.13.0",
"minecraft:structure_template_feature": {
"description": {
"identifier": "wiki:aqua_temple_feature"
},
"structure_name": "mystructure:aqua_temple",
"adjustment_radius": 4,
"facing_direction": "random",
"constraints": {
"block_intersection": {
"block_allowlist": [
"minecraft:water" //结构只能替换水方块
]
}
}
}
}
```
:::
### 特征规则
::: code-group
```json [BP/feature_rules/ocean_aqua_temple_feature.json]
{
"format_version": "1.13.0",
"minecraft:feature_rules": {
"description": {
"identifier": "wiki:ocean_aqua_temple_feature",
"places_feature": "wiki:aqua_temple_feature"
},
"conditions": {
"placement_pass": "first_pass",
"minecraft:biome_filter": {
"test": "has_biome_tag",
"operator": "==",
"value": "ocean"
}
},
"distribution": {
"iterations": 1,
"x": {
"extent": [0, 16],
"distribution": "uniform"
},
"y": "q.above_top_solid(v.worldx, v.worldz)", //将结构放置在最高固体方块顶部,避免生成在水面
"z": {
"extent": [0, 16],
"distribution": "uniform"
},
"scatter_chance": {
"numerator": 1,
"denominator": 25
}
}
}
}
```
:::
![](/assets/images/world-generation/structure-features/aqua_temple.png)
## 水面结构
### 特征文件
::: code-group
```json [BP/features/raft_feature.json]
{
"format_version": "1.13.0",
"minecraft:structure_template_feature": {
"description": {
"identifier": "wiki:raft_feature"
},
"structure_name": "mystructure:raft",
"adjustment_radius": 4,
"facing_direction": "random",
"constraints": {
"block_intersection": {
"block_allowlist": [
"minecraft:water", //结构只能替换水和空气
"minecraft:air"
]
}
}
}
}
```
:::
### 特征规则
::: code-group
```json [BP/feature_rules/ocean_raft_feature.json]
{
"format_version": "1.13.0",
"minecraft:feature_rules": {
"description": {
"identifier": "wiki:ocean_raft_feature",
"places_feature": "wiki:raft_feature"
},
"conditions": {
"placement_pass": "first_pass",
"minecraft:biome_filter": {
"test": "has_biome_tag",
"operator": "==",
"value": "ocean"
}
},
"distribution": {
"iterations": 1,
"x": {
"extent": [0, 16],
"distribution": "uniform"
},
"y": 62, //结构将在y62默认水位高度生成
"z": {
"extent": [0, 16],
"distribution": "uniform"
},
"scatter_chance": {
"numerator": 1,
"denominator": 25
}
}
}
}
```
:::
![](/assets/images/world-generation/structure-features/raft.png)