创建生成器
生成器
生成器是 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-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=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:brushland 对应 plains。仍需通过其他放置检查。
空的或缺失的 validBiomesV2 列表会保留预设生成器内置的生物群系选择,不会清除其限制。没有内置生物群系的新自定义生成器,其实际生效列表为空,因此允许所有生物群系。要替换预设的选择,请提供明确的非空列表。可以使用不带命名空间的原版枚举名称,但 namespace:key 更清楚;带命名空间的条目会转换为小写,却不会检查该生物群系是否存在。
这些映射实际存放在哪里
自定义生物群系到原版生物群系的映射表并不存放在 BetterStructures 中。它是 MagmaCore(内置于 BetterStructures 的共享库)内部的一张硬编码表,并与其他需要它的 MagmaGuy 插件共用。
这带来两个实际影响:
- 你在随插件附带的
generator_surface_*.yml文件中看到的那些超长生物群系列表,是生成出来的输出,而不是事实来源。 加载时,BetterStructures 会读取validBiomesV2,在 MagmaCore 的表中查找每一个minecraft:条目,追加所有映射到它的自定义生物群系,然后把展开后的列表直接写回生成器文件。因此你写了两行的生成器,回头可能变成一百行。编辑那份展开后的列表只会影响这一个生成器,而你保留在其中的任何minecraft:条目,都会在下次加载时被重新展开。 - 为所有人添加对某个新自定义生物群系的支持,是一次 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 和有效的木桶宝藏配置;原理图覆盖无法绕过任一要求。无效的覆盖会产生警告,并回退到生成器的表。