从零创建地物结构
本教程将会讲述地形包中,以树木为例创建地物结构的步骤。
如果你还没有准备好,请在开始阅读前浏览“配置开发介绍”章节。
更多创建地物的深入教程,请参阅这个非官方开发教程,地物配置。
如果你遇到问题或需要示例,你可以在 Github 仓库中找到本教程的参考用配置包。
设置新结构
步骤
1. 创建结构文件
结构文件可以为动态的 TerraScript,即 .tesf
文件,也可以为静态的 .schem
结构文件。
危险
如果你决定同时使用两种类型的结构文件,在命名时两个结构文件的名称不可以相同。
2. 创建新生成阶段
最好将地物分类至不同的生成阶段,这样不仅可以让文件结构保持整洁,也可以更好地安排其他地物的生成。
例如,你可能需要让树木先于草丛生成,这样树木就不会因草的生成而被阻止。
我们将会利用“设置地物”中引入的 generation-stage-feature
附属,创建一个新的生成阶段。
id: YOUR_PACK_ID
...
stages:
- id: trees
type: FEATURE
# 配置中的顺序为先树木后植被, 即树木将会先于植被生成.
- id: flora
type: FEATURE
警告
生成阶段 ID 可自行编辑,地物的生成按配置中从上到下的顺序进行。
3. 创建地物配置
我们将会利用“设置地物”中引入的 config-feature
附属,创建一个新的地物配置文件。
创建一个空配置文件,名称为 oak_tree_feature.yml
。
通过 type
参数设置配置类型,并按如下所示的内容配置 id
。
id: OAK_TREE_FEATURE
type: FEATURE
4. 添加地物分布器
我们将会利用“设置地物”中引入的 config-distributors
附属,创建一个地物分布器。
如下所示,在 oak_tree_feature.yml
中使用 PADDED_GRID
分布器。
id: OAK_TREE_FEATURE
type: FEATURE
distributor:
type: PADDED_GRID
width: 12
padding: 4
salt: 5864
PADDED_GRID
分布器类型将一片区域划分为带间隔的网格,确保地物生成时不会挨得太近。
PADDED_GRID
有三个参数,width
、padding
与 salt
。
width
- 决定了每个包含地物的网格区域边长。padding
- 决定区域之间的间隔大小。salt
- 通常是一个用于偏移分布器结果的随机数,防止同一分布器下地形重叠生成。盐值功能的详细讲述可以在这里浏览。

信息
PADDED_GRID
和其他分布器类型的相关文档可以在这里找到。
5. 添加地物定位器
现在,我们将利用“设置地物”中引入的 config-locators
附属,创建一个定位器。
如下所示,在 oak_tree_feature.yml
中使用 TOP
定位器。
id: OAK_TREE_FEATURE
type: FEATURE
distributor:
...
locator:
type: TOP
range:
min: 0
max: 319
TOP
定位器与 SURFACE
定位器搭配使用,将不止搜索上方有空间的方块,而是会选择其中 Y 轴最高的位置生成。
信息
可用的各种定位器相关文档可以在这里找到。
6. 改进地物定位器
与 SURFACE
定位器在添加矮草丛的行为类似,TOP
适合将地物放置在方块最高点,但它不会检查地物所放置的方块。
利用 AND
定位器,我们可以结合多个定位器,使得地物生成的条件更加精确。
通过 type
设置为 MATCH_SET
的 PATTERN
定位器,我们可以指定地物生成的位置附近的方块组合。
将如下高亮内容添加至配置,以应用这些定位器。
id: OAK_TREE_FEATURE
type: FEATURE
distributor:
...
locator:
type: AND
locators:
- type: TOP
range: &range # 为其他定位器备用的锚点
min: 0
max: 319
- type: PATTERN
range: *range # 引用先前锚定的值
pattern:
type: MATCH_SET
blocks:
- minecraft:grass_block
- minecraft:dirt
offset: -1
7. 添加结构
如下高亮部分所示,现在可以将结构添加至 oak_trss_feature
配置中。
id: OAK_TREE_FEATURE
type: FEATURE
distributor:
...
locator:
...
structures:
distribution:
type: CONSTANT
structures: oak_tree
提示
地物配置可以通过噪声采样器,从权重列表中选择结构,如下所示。
structures:
distribution:
type: WHITE_NOISE
salt: 4357
structures:
- oak_tree_1: 1
- oak_tree_2: 1
- oak_tree_3: 1
权重列表的详细讲述可以在这里找到。
8. 将地物应用于群系
现在,我们就要将树木地物添加至 FIRST_BIOME
。
将如下高亮配置加入 FIRST_BIOME
配置中。
id: FIRST_BIOME
type: BIOME
vanilla: minecraft:plains
...
features:
trees:
- OAK_TREE_FEATURE
flora:
- GRASS_FEATURE
OAK_TREE_FEATURE
地物将会在 FIRST_BIOME
生物群系中生成。
9. 载入地形包
到了这一步,你的包就可以正常在世界中生成树木了!你可以通过开发客户端/服务器载入你刚刚编写的包。你可以通过 /packs
命令确认插件是否显示了(验证文件中指定的)包 ID,或者在服务器/客户端启动时从日志中确认。
如果你的包出于某种原因没有载入,控制台中会出现其无法载入的报错,请仔细解读并尝试自行排除问题所在,并重新尝试之前的步骤。
如果你还是没有办法载入地形包,随时欢迎带着相关报错联系我们。
总结
在你的包成功载入之后,你就可以使用你的新地形包生成一片带着草和树木的世界了!
本章节的参考配置可以在 Github 的这个地方找到。

