创建生成器
生成器
生成器是 BetterStructures 配置系统中最强大的部分。默认有 29 个生成器,共同管理着 BetterStructures 目前分发的建筑。你可以创建自己的生成器,也可以使用现有的生成器作为快捷方式。
生成器告诉插件东西应该在哪里生成,并定义战利品表。默认生成器的命名方式也很容易让人猜到它们的功能。
生成器配置选项
| 键 | 默认值 | 必需 | 描述 |
|---|---|---|---|
isEnabled | true | ❌ | 生成器是否启用。把它设为 false 还会让所有指向该生成器的原理图都不再被注册,因此这是一次性关掉整套结构最快的方式。 |
structureType | - | ✅ | 结构生成位置(见下表) |
lowestYLevel | -59 | ❌ | 生成的最低 Y 级别 |
highestYLevel | 320 | ❌ | 生成的最高 Y 级别 |
validWorlds | 全部允许 | ❌ | 结构可以生成的世界列表 |
validWorldEnvironments | 全部允许 | ❌ | NORMAL、NETHER、THE_END、CUSTOM |
validBiomesV2 | 所有生物群系 | ❌ | 有效生物群系列表(namespace:key 格式) |
treasureFilename | - | ❌ | 箱子战利品的宝藏文件 |
generateLootInBarrels | true | ❌ | 此生成器原理图中找到的木桶是否应填充战利品 |
barrelTreasureFilename | treasure_barrel_food.yml | ❌ | 用于填充此生成器木桶的宝藏文件 |
structureType
设置建筑的结构类型。你可以为单个生成器指定多个结构类型!
| 类型 | 主世界 / 自定义 | 下界 | 末地 | 描述 |
|---|---|---|---|---|
SURFACE | 地表 | 类似地表的点 | 地表 | 在世界地表生成 |
SKY | 最高方块上方 80-120 格 | 在 Y 45 与 Y 100 之间找到的空气空腔 | 最高方块上方 80-120 格 | 在天空生成(可在 config.yml 中配置) |
UNDERGROUND_SHALLOW | Y 0-50 | Y 60-120 | Y 0-80 | 浅层地下结构 |
UNDERGROUND_DEEP | Y -53 到 0 | Y 5-60 | Y 0-80 | 深层地下结构 |
LIQUID_SURFACE | 水(海洋) | Y 31 处的岩浆海 | 不做液体检查 | 在液体表面生成 |
DUNGEON | ✅ | ✅ | ✅ | 用于模块化地牢放置 |
天空的范围是相对于该列世界最高方块之上的偏移量,而不是绝对 Y 坐标。
多结构类型示例
structureType:
- SURFACE
- UNDERGROUND_SHALLOW
这允许同一生成器在多个位置生成结构,例如同时在地表和浅层地下区域生成。
注意:由于 Minecraft 有大量地下空间,因此有两个地下设置。两者都设置可以确保在各深度均匀分布,防止玩家错过结构。
按维度划分的 Y 级别范围
每个维度的默认高度范围(可在 config.yml 中配置):
| 维度 | 默认范围 | 配置设置 |
|---|---|---|
| 主世界/自定义 | Y=-60 到 Y=320 | lowestYNormalCustom / highestYNormalCustom |
| 下界 | Y=4 到 Y=120 | lowestYNether / highestYNether |
| 末地 | Y=0 到 Y=320 | lowestYEnd / 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:blooming_plains)中生成结构。
这些映射实际存放在哪里
自定义生物群系到原版生物群系的映射表并不存放在 BetterStructures 中。它是 MagmaCore(内置于 BetterStructures 的共享库)内部的一张硬编码表,并与其他需要它的 MagmaGuy 插件共用。
这带来两个实际影响:
- 你在随插件附带的
generator_surface_*.yml文件中看到的那些超长生物群系列表,是生成出来的输出,而不是事实来源。 加载时,BetterStructures 会读取validBiomesV2,在 MagmaCore 的表中查找每一个minecraft:条目,追加所有映射到它的自定义生物群系,然后把展开后的列表直接写回生成器文件。因此你写了两行的生成器,回头可能变成一百行。编辑那份展开后的列表只会影响这一个生成器,而你保留在其中的任何minecraft:条目,都会在下次加载时被重新展开。 - 为所有人添加对某个新自定义生物群系的支持,是一次 MagmaCore 变更,而不是配置变更。 如果某个世界生成器提供了 BetterStructures 无法识别的生物群系,把它加到某个生成器的
validBiomesV2里只是针对那一个生成器的本地权宜之计。要让它被正确映射,就需要把它加入 MagmaCore 的映射表,这属于代码变更 —— 请提交一个请求,而不要试图在 yml 文件里解决。
你仍然可以直接在 validBiomesV2 中写出某个自定义生物群系的名字(任何已经包含 : 的条目都会被原样采用,不再进一步展开),对于只应在某个特定自定义生物群系中生成的一次性生成器来说,这才是正确做法。
被 MagmaCore 映射到 nothing 的生物群系会被刻意排除 —— 它们是被认为不适合放置结构的自定义生物群系,任何原版生物群系都不会把它们带进来。
treasureFilename
设置箱子战利品的宝藏文件。除非在 Schematic 配置 中覆盖,否则这适用于使用此生成器的所有建筑。
generateLootInBarrels 和 barrelTreasureFilename
BetterStructures 现在将木桶视为与箱子并列的第二种战利品容器。
generateLootInBarrels(默认true)切换此生成器放置的结构内的木桶是否被填充。设置为false可保持木桶不变。barrelTreasureFilename(默认treasure_barrel_food.yml)选择填充这些木桶时使用的宝藏文件。默认提供一个轻量的、以食物为主的战利品表,但你可以将其指向任何宝藏文件。
这两个选项都可以通过原理图配置中匹配的 barrelTreasureFilename 字段按原理图单独覆盖。