Skip to content

从零编写地物

本教程将会讲述地形包有关创建地物的步骤。

如果你还没有准备好,请在开始阅读前浏览“配置开发介绍”章节。

更多创建地物的深入教程,请参阅这个非官方开发教程,地物配置

如果你遇到问题或需要示例,你可以在 Github 仓库中找到本教程的参考用配置包。

设置新地物

步骤

1. 添加地物阶段

地物生成分为多个阶段。你的包需要至少设置一个阶段才可以生成地物。

通过你选择的编辑器打开包验证文件。

generation-stage-feature 作为依赖引入,版本为 1.+

这个附属将会允许我们在包验证文件内创建新的生成阶段,借此生成地物。

pack.yml
YAML
id: YOUR_PACK_ID
version: 0.4.0

addons:
  ...
  generation-stage-feature: "1.+"

将如下高亮内容加入你的包验证文件,创建生成阶段。

pack.yml
YAML
id: YOUR_PACK_ID

...

stages:
  - id: flora
    type: FEATURE

警告

生成阶段 ID 可以自行填写,地物的生成会按配置中的顺序从上往下依次生成。

2. 创建地物配置

config-feature 作为依赖引入,版本为 1.+

这个附属允许我们创建地物配置文件。

pack.yml
YAML
id: YOUR_PACK_ID
version: 0.4.0

addons:
  ...
  config-feature: "1.+"

创建一个空配置文件,名为 grass_feature.yml

通过 type 参数设置配置类型,并按如下所示填写 id 中的内容。

grass_feature.yml
YAML
id: GRASS_FEATURE
type: FEATURE

3. 设置地物分布

分布器决定了地物在世界中的 X 与 Z 轴放置位置。

config-feature 作为依赖引入,版本为 1.+

这个附属提供了一系列可在地物配置文件内使用的分布器

pack.yml
YAML
id: YOUR_PACK_ID
version: 0.4.0

addons:
  ...
  config-distributors: "1.+"

配置 grass_feature.yml 文件,按如下所示将分布器类型设置为 POSITIVE_WHITE_NOISE

grass_feature.yml
YAML
id: GRASS_FEATURE
type: FEATURE

distributor:
  type: SAMPLER
  sampler:
    type: POSITIVE_WHITE_NOISE
  threshold: 0.25

信息

分布器类型的相关文档可以在这里找到。

POSITIVE_WHITE_NOISE 及其他噪声采样器的相关文档可以在这里找到。

4. 添加地物定位器

定位器决定了地物在世界上的 Y 轴位置。

config-locators 作为依赖引入,版本为 1.+

这个附属提供了一系列可在地物配置文件内使用的定位器

pack.yml
YAML
id: YOUR_PACK_ID
version: 0.4.0

addons:
  ...
  config-locators: "1.+"

配置 grass_feature.yml,按如下配置添加 SURFACE 定位器。

grass_feature.yml
YAML
id: GRASS_FEATURE
type: FEATURE

distributor:
  ...

locator:
  type: SURFACE
  range:
    min: 0
    max: 319

SURFACE 定位器类型会将地物放置在上方有空气接触的方块上。

每个定位器通常都需要定义一个检查范围 range

rangemin(最小值)与 max(最大值)两个参数

信息

其他几种定位器类型的相关文档可以在这里找到。

5. 改进地物定位器

SURFACE 定位在方块顶端生成方块时非常实用,但它不会检查它放置的下方是什么方块。

通过使用 AND 定位器,我们可以使用多个定位器,使得地物生成的条件更加精确。

通过 typeMATCH_SETPATTERN 定位器,我们可以指定地物生成时下方的方块满足的条件。

将如下高亮内容添加至配置,以实现额外的定位器。

feature.yml
YAML
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: -1

AND 定位器列表中包含了 SURFACEPATTERN 定位器,SURFACE 定义的范围通过锚点在 PATTERN 复用了一次。

typeMATCH_SETPATTERN 定位器包含了两个参数,即 blocksoffset

  • blocks - 生成地物匹配的方块列表。
  • offset - 检查方块的 Y 轴偏移量。

方块 minecraft:grass_block 和偏移量为 -1 的 minecraft:dirt 满足了生成地物下方的条件要求。

6. 添加结构

structure-block-shortcut 附属使得结构分布可以通过快捷方式放置,无需为了单个方块创建一整个结构文件。

structure-block-shortcut 作为依赖引入,版本为 1.+

pack.yml
YAML
id: YOUR_PACK_ID
version: 0.4.0

addons:
  ...
  structure-block-shortcut: "1.+"

现在,我们可以利用之前添加的 structure-block-shortcut 作为,将单个方块当做结构使用。

信息

低于 1.20.3 的版本需要使用 minecraft_grass

grass_feature.yml
YAML
id: GRASS_FEATURE
type: FEATURE

distributor:
  ...

locator:
  ...

structures:
  distribution:
    type: CONSTANT
  structures: BLOCK:minecraft:short_grass

structures 父键包含了两个参数,即 structures.structuresstructures.distribution

structures.structures 决定了生成在世界上的结构或结构权重列表

structure.distribution 影响了结构选择结果的噪声采样器

提示

在如下带有噪声采样器的示例中,地物可以从地物或方块的权重列表中选取,以引导结构选择,如下所示。

feature.yml
YAML
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 配置。

first_biome.yml
YAML
id: FIRST_BIOME
type: BIOME

vanilla: minecraft:plains

...

features:
  flora:
    - GRASS_FEATURE

之后,GRASS_FEATURE 就会在 FIRST_BIOME 里生成草。

提示

群系配置的多生成阶段配置如下所示:

first_biome.yml
YAML
id: FIRST_BIOME
type: BIOME

...

features:
  flora:
    - GRASS_FEATURE
  trees:
    - OAK_TREES

7. 载入地形包

到了这一步,你的包就可以正常在世界中生成草了!你可以通过开发客户端/服务器载入你刚刚编写的包。你可以通过 /packs 命令确认插件是否显示了(验证文件中指定的)包 ID,或者在服务器/客户端启动时从日志中确认。

如果你的包出于某种原因没有载入,控制台中会出现其无法载入的报错,请仔细解读并尝试自行排除问题所在,并重新尝试之前的步骤。

如果你还是没有办法载入地形包,随时欢迎带着相关报错联系我们

总结

在你的包成功载入之后,你就可以使用你的新地形包生成一片带着草的世界了!

本章节的参考配置可以在 Github 的这个地方找到。

贡献者

页面历史