跳到主要内容

创建生成器

生成器​

生成器是 BetterStructures 配置系统中最强大的部分。默认有 29 个生成器,共同管理着 BetterStructures 目前分发的建筑。你可以创建自己的生成器,也可以使用现有的生成器作为快捷方式。

生成器告诉插件东西应该在哪里生成,并定义战利品表。默认生成器的命名方式也很容易让人猜到它们的功能。

生成器配置选项​

键默认值必需描述
isEnabledtrue❌生成器是否启用。把它设为 false 还会让所有指向该生成器的原理图都不再被注册,因此这是一次性关掉整套结构最快的方式。
structureType-✅结构生成位置(见下表)
lowestYLevel-59❌生成的最低 Y 级别
highestYLevel320❌生成的最高 Y 级别
validWorlds全部允许❌结构可以生成的世界列表
validWorldEnvironments全部允许❌NORMAL、NETHER、THE_END、CUSTOM
validBiomesV2取决于预设❌有效生物群系列表(namespace:key 格式);实际生效的列表为空时允许所有生物群系
treasureFilename-❌箱子战利品的宝藏文件
generateLootInBarrelstrue❌此生成器原理图中找到的木桶是否应填充战利品
barrelTreasureFilenametreasure_barrel_food.yml❌用于填充此生成器木桶的宝藏文件

structureType​

设置建筑的结构类型。你可以为单个生成器指定多个结构类型!

类型主世界 / 自定义下界末地描述
SURFACE地表类似地表的点地表在世界地表生成
SKY最高方块上方 80-120 格在 Y 45 与 Y 100 之间找到的空气空腔最高方块上方 80-120 格在天空生成(可在 config.yml 中配置)
UNDERGROUND_SHALLOW初始 Y 0-49在 Y 60-119 扫描固体区域在 Y 0-79 扫描固体区域浅层地下结构
UNDERGROUND_DEEP初始 Y -53 到 -1沿 Y 60-6 向下扫描固体区域在偏移和边界调整前从 Y 0 开始深层地下结构
LIQUID_SURFACE最高方块处的液体Y 31 的岩浆,上方需为空气无初始液体检查,仍会检查地形适配在液体表面生成
DUNGEON✅✅✅为独立的模块生成器系统保留;单独设置此类型不会将原理图变成模块化地牢

天空范围是该列最高方块上方的偏移量,不是绝对 Y 坐标。地下范围描述原理图偏移和维度边界调整之前的初始选择或扫描。下界天空扫描访问 Y 45-99。

多结构类型示例
structureType:
- SURFACE
- UNDERGROUND_SHALLOW

这允许同一生成器在多个位置生成结构,例如同时在地表和浅层地下区域生成。

注意:由于 Minecraft 有大量地下空间,因此有两个地下设置。两者都设置可以确保在各深度均匀分布,防止玩家错过结构。


按维度划分的 Y 级别范围​

每个维度的默认高度范围(可在 config.yml 中配置):

维度默认范围配置设置
主世界/自定义Y=-60 到 Y=320lowestYNormalCustom / highestYNormalCustom
下界Y=4 到 Y=120lowestYNether / highestYNether
末地Y=0 到 Y=320lowestYEnd / highestYEnd
天空(主世界/自定义)最高方块上方 80 到 120 格normalCustomAirBuildingMinAltitude / normalCustomAirBuildingMaxAltitude
天空(末地)最高方块上方 80 到 120 格endAirBuildMinAltitude / endAirBuildMaxAltitude

生成器的 lowestYLevel 和 highestYLevel 用于筛选候选锚点,不会替代维度级地下边界,也不会重新定义天空偏移范围。

天空的两行是叠加在该列最高方块之上的偏移量,而不是绝对 Y 坐标。主世界/自定义和末地的天空偏移都会在每次放置时于各自的最小值和最大值之间随机取值。

下界会完全忽略这些偏移:BetterStructures 不会在最高方块之上建造,而是扫描 Y 45 到 Y 100 之间的这一列,寻找至少 20 格高的空气腔并把结构放进去。如果不存在这样的空腔,该区块内就不会生成任何东西。


自定义生物群系支持​

BetterStructures 自动支持来自 Terralith、Iris、Terra 和 TerraformGenerator 等世界生成器的自定义生物群系。

当你在 validBiomesV2 中指定原版生物群系时,插件会自动包含兼容的自定义生物群系:

validBiomesV2:
- minecraft:plains
- minecraft:forest

这会允许结构在原版生物群系及其对应的自定义生物群系中生成,例如 terralith:brushland 对应 plains。仍需通过其他放置检查。

空的或缺失的 validBiomesV2 列表会保留预设生成器内置的生物群系选择,不会清除其限制。没有内置生物群系的新自定义生成器,其实际生效列表为空,因此允许所有生物群系。要替换预设的选择,请提供明确的非空列表。可以使用不带命名空间的原版枚举名称,但 namespace:key 更清楚;带命名空间的条目会转换为小写,却不会检查该生物群系是否存在。

这些映射实际存放在哪里​

自定义生物群系到原版生物群系的映射表并不存放在 BetterStructures 中。它是 MagmaCore(内置于 BetterStructures 的共享库)内部的一张硬编码表,并与其他需要它的 MagmaGuy 插件共用。

这带来两个实际影响:

  1. 你在随插件附带的 generator_surface_*.yml 文件中看到的那些超长生物群系列表,是生成出来的输出,而不是事实来源。 加载时,BetterStructures 会读取 validBiomesV2,在 MagmaCore 的表中查找每一个 minecraft: 条目,追加所有映射到它的自定义生物群系,然后把展开后的列表直接写回生成器文件。因此你写了两行的生成器,回头可能变成一百行。编辑那份展开后的列表只会影响这一个生成器,而你保留在其中的任何 minecraft: 条目,都会在下次加载时被重新展开。
  2. 为所有人添加对某个新自定义生物群系的支持,是一次 MagmaCore 变更,而不是配置变更。 如果某个世界生成器提供了 BetterStructures 无法识别的生物群系,把它加到某个生成器的 validBiomesV2 里只是针对那一个生成器的本地权宜之计。要让它被正确映射,就需要把它加入 MagmaCore 的映射表,这属于代码变更 —— 请提交一个请求,而不要试图在 yml 文件里解决。

你也可以在 validBiomesV2 中直接指定自定义生物群系。非 minecraft: 命名空间会直接使用,不会继续扩展,适合只在某个特定自定义生物群系中生成结构的生成器。

被 MagmaCore 映射到 nothing 的生物群系会被刻意排除 —— 它们是被认为不适合放置结构的自定义生物群系,任何原版生物群系都不会把它们带进来。


treasureFilename​

设置箱子战利品的宝藏文件。除非在 Schematic 配置 中覆盖,否则这适用于使用此生成器的所有建筑。

填充箱子前,生成器仍必须解析到有效的箱子宝藏配置。原理图覆盖无法弥补生成器宝藏文件缺失或无效的问题。无效的覆盖会产生警告,并回退到生成器的表。


generateLootInBarrels 和 barrelTreasureFilename​

BetterStructures 现在将木桶视为与箱子并列的第二种战利品容器。

  • generateLootInBarrels(默认 true)切换此生成器放置的结构内的木桶是否被填充。设置为 false 可保持木桶不变。
  • barrelTreasureFilename(默认 treasure_barrel_food.yml)选择填充这些木桶时使用的宝藏文件。默认提供一个轻量的、以食物为主的战利品表,但你可以将其指向任何宝藏文件。

原理图的 barrelTreasureFilename 可以覆盖战利品表。生成器必须同时具有 generateLootInBarrels: true 和有效的木桶宝藏配置;原理图覆盖无法绕过任一要求。无效的覆盖会产生警告,并回退到生成器的表。