从零编写地物
本教程将会讲述地形包有关创建地物的步骤。
如果你还没有准备好,请在开始阅读前浏览“配置开发介绍”章节。
更多创建地物的深入教程,请参阅这个非官方开发教程,地物配置。
如果你遇到问题或需要示例,你可以在 Github 仓库中找到本教程的参考用配置包。
设置新地物
步骤
1. 添加地物阶段
地物生成分为多个阶段。你的包需要至少设置一个阶段才可以生成地物。
通过你选择的编辑器打开包验证文件。
将 generation-stage-feature 作为依赖引入,版本为 1.+。
这个附属将会允许我们在包验证文件内创建新的生成阶段,借此生成地物。
id: YOUR_PACK_ID
version: 0.4.0
addons:
...
generation-stage-feature: "1.+"将如下高亮内容加入你的包验证文件,创建生成阶段。
id: YOUR_PACK_ID
...
stages:
- id: flora
type: FEATURE警告
生成阶段 ID 可以自行填写,地物的生成会按配置中的顺序从上往下依次生成。
2. 创建地物配置
将 config-feature 作为依赖引入,版本为 1.+。
这个附属允许我们创建地物配置文件。
id: YOUR_PACK_ID
version: 0.4.0
addons:
...
config-feature: "1.+"创建一个空配置文件,名为 grass_feature.yml。
通过 type 参数设置配置类型,并按如下所示填写 id 中的内容。
id: GRASS_FEATURE
type: FEATURE3. 设置地物分布
分布器决定了地物在世界中的 X 与 Z 轴放置位置。
将 config-feature 作为依赖引入,版本为 1.+。
这个附属提供了一系列可在地物配置文件内使用的分布器。
id: YOUR_PACK_ID
version: 0.4.0
addons:
...
config-distributors: "1.+"配置 grass_feature.yml 文件,按如下所示将分布器类型设置为 POSITIVE_WHITE_NOISE。
id: GRASS_FEATURE
type: FEATURE
distributor:
type: SAMPLER
sampler:
type: POSITIVE_WHITE_NOISE
threshold: 0.254. 添加地物定位器
定位器决定了地物在世界上的 Y 轴位置。
将 config-locators 作为依赖引入,版本为 1.+。
这个附属提供了一系列可在地物配置文件内使用的定位器。
id: YOUR_PACK_ID
version: 0.4.0
addons:
...
config-locators: "1.+"配置 grass_feature.yml,按如下配置添加 SURFACE 定位器。
id: GRASS_FEATURE
type: FEATURE
distributor:
...
locator:
type: SURFACE
range:
min: 0
max: 319SURFACE 定位器类型会将地物放置在上方有空气接触的方块上。
每个定位器通常都需要定义一个检查范围 range。
range 有 min(最小值)与 max(最大值)两个参数。
信息
其他几种定位器类型的相关文档可以在这里找到。
5. 改进地物定位器
SURFACE 定位在方块顶端生成方块时非常实用,但它不会检查它放置的下方是什么方块。
通过使用 AND 定位器,我们可以使用多个定位器,使得地物生成的条件更加精确。
通过 type 为 MATCH_SET 的 PATTERN 定位器,我们可以指定地物生成时下方的方块满足的条件。
将如下高亮内容添加至配置,以实现额外的定位器。
id: GRASS_FEATURE
type: FEATURE
distributor:
...
locator:
type: AND
locators:
- type: SURFACE
range: &range # 用于其他定位器值的锚点
min: 0
max: 319
- type: PATTERN
range: *range # 引用先前锚点的范围值
pattern:
type: MATCH_SET
blocks:
- minecraft:grass_block
- minecraft:dirt
offset: -1AND 定位器列表中包含了 SURFACE 和 PATTERN 定位器,SURFACE 定义的范围通过锚点在 PATTERN 复用了一次。
type 为 MATCH_SET 的 PATTERN 定位器包含了两个参数,即 blocks 与 offset。
blocks- 生成地物匹配的方块列表。offset- 检查方块的 Y 轴偏移量。
方块 minecraft:grass_block 和偏移量为 -1 的 minecraft:dirt 满足了生成地物下方的条件要求。
6. 添加结构
structure-block-shortcut 附属使得结构分布可以通过快捷方式放置,无需为了单个方块创建一整个结构文件。
将 structure-block-shortcut 作为依赖引入,版本为 1.+。
id: YOUR_PACK_ID
version: 0.4.0
addons:
...
structure-block-shortcut: "1.+"现在,我们可以利用之前添加的 structure-block-shortcut 作为,将单个方块当做结构使用。
信息
低于 1.20.3 的版本需要使用 minecraft_grass。
id: GRASS_FEATURE
type: FEATURE
distributor:
...
locator:
...
structures:
distribution:
type: CONSTANT
structures: BLOCK:minecraft:short_grassstructures 父键包含了两个参数,即 structures.structures 和 structures.distribution。
structures.structures 决定了生成在世界上的结构或结构权重列表。
structure.distribution 影响了结构选择结果的噪声采样器。
提示
在如下带有噪声采样器的示例中,地物可以从地物或方块的权重列表中选取,以引导结构选择,如下所示。
structures:
distribution:
type: WHITE_NOISE
salt: 4357
structures:
- BLOCK:minecraft:poppy: 1
- BLOCK:minecraft:blue_orchid: 1
- BLOCK:minecraft:dandelion: 1权重列表的详细介绍可以在这里浏览。
6. 将地物应用至群系
现在我们要将草地物添加至 FIRST_BIOME。
将高亮内容添加至 FIRST_BIOME 配置。
id: FIRST_BIOME
type: BIOME
vanilla: minecraft:plains
...
features:
flora:
- GRASS_FEATURE之后,GRASS_FEATURE 就会在 FIRST_BIOME 里生成草。
提示
群系配置的多生成阶段配置如下所示:
id: FIRST_BIOME
type: BIOME
...
features:
flora:
- GRASS_FEATURE
trees:
- OAK_TREES7. 载入地形包
到了这一步,你的包就可以正常在世界中生成草了!你可以通过开发客户端/服务器载入你刚刚编写的包。你可以通过 /packs 命令确认插件是否显示了(验证文件中指定的)包 ID,或者在服务器/客户端启动时从日志中确认。
如果你的包出于某种原因没有载入,控制台中会出现其无法载入的报错,请仔细解读并尝试自行排除问题所在,并重新尝试之前的步骤。
如果你还是没有办法载入地形包,随时欢迎带着相关报错联系我们。
总结
在你的包成功载入之后,你就可以使用你的新地形包生成一片带着草的世界了!
本章节的参考配置可以在 Github 的这个地方找到。

SnowCutieOwO