跳到主要内容

创建内容


创建建筑​

建议先将结构控制在 100x100x100 方块以下,便于适配地形和控制资源消耗。这是建议,不是硬性大小限制。更大的结构需要更多内存和放置处理,还需要位于世界高度限制内的合适位置。


特殊方块​

BetterStructures 有两种特殊方块:屏障和基岩。WorldEdit 可以粘贴的任何其他方块都会正常粘贴,但屏障和基岩方块是例外。

方块行为用途
屏障不在该位置放置任何方块 - 保留原始地形圆滑粘贴边缘、将墙壁贴合洞穴、自然融合
基岩保留现有实心方块;否则放置基座材料在不替换现有实心地形的情况下为铁轨创建地板

生成告示牌​

BetterStructures 可以使用带有特定文本的告示牌在特定位置生成来自 EliteMobs 和 MythicMobs 的怪物和 Boss,或者把一个标记交给其他插件处理。

生成告示牌会先被粘贴,待方块粘贴完成后,在尝试生成对应实体前立即移除。粘贴期间可能看得到告示牌,移除也不代表生成成功。未知标签、无效的原版实体类型或缺少 MythicMobs ID 会留下普通告示牌。若未安装 EliteMobs 或 MythicMobs,使用其标签的原理图会被整个排除出结构注册表。

方块粘贴完成后,BetterStructures 按以下顺序完成结构:基座、清理地表结构上方残留的树木、战利品容器、[spawn] 怪物、[elitemobs] Boss、[mythicmobs] 怪物、原理图中保存的实体,最后是 [custom] 标记。如果某个怪物或 Boss 生成失败,其余步骤都会被跳过,BuildPasteCompleteEvent 不会触发,也不会发送新建筑消息。

告示牌类型第1行第2-4行需要的插件
原版怪物[spawn]第 2 行填写实体类型无
EliteMobs[elitemobs]Boss 文件名,可分散写在第 2-4 行EliteMobs
MythicMobs[mythicmobs]第 2 行填写怪物名称,第 3 行可选填写等级MythicMobs
其他插件[custom]标记 ID,可分散写在第 2-4 行监听 BuildCustomMarkerEvent 的插件

立式、墙面和悬挂式告示牌通过以 _SIGN 结尾的 Bukkit 材料名称识别,没有固定木材列表。标签要写在正面,因为现代告示牌读取的是 front_text,不是背面。在游戏内输入的行、JSON 文本以及插件写入的文本组件都会按纯文本读取。标签不区分大小写。实体 ID 和文件名必须准确,不能有多余空格。

MythicMobs 等级行可选。第 3 行为空时使用等级 1。小于 1 的数字会变为 1。等级不是数字,或者怪物 ID 不被 MythicMobs 识别时,生成会失败,并跳过该结构其余的收尾步骤。

生成告示牌示例

原版怪物​

[spawn]

ZOMBIE

在告示牌方块的水平中心生成持久性僵尸。请使用可以生成的 Spigot EntityType,例如盔甲架或末影水晶。枚举也包含世界无法直接生成的类型,因此名称被接受不保证成功。如果世界拒绝了这次生成,该结构其余的收尾步骤都会被跳过。

EliteMobs​

[elitemobs]

test_boss_with

_a_long_name

.yml

长文件名可写在第 2 至 4 行,各行会无分隔符拼接。启用 protectEliteMobsRegions 且安装 EliteMobs 和 WorldGuard 时,场地会保护方块破坏和放置。每个生成的区域 Boss 都有一个区域。只有 Boss 设置了 removeAfterDeath: true,死亡时才会移除对应区域,因此会重生的 Boss 可能让保护持续存在。EliteMobs 生成失败(例如文件名不匹配任何 Boss)会跳过该结构其余的收尾步骤。

MythicMobs​

[mythicmobs]

SkeletalKnight

10

生成 10 级的 SkeletalKnight。

自定义标记​

[custom]

Zombie_Plus

BetterStructures 本身不会对该 ID 做任何处理。在结构的方块、战利品、怪物和实体粘贴完成后,它会移除告示牌,并携带该 ID 和告示牌位置触发 BuildCustomMarkerEvent,以便其他插件在那里生成自己的怪物、放置方块或执行任何其他逻辑。第 2-4 行会像 EliteMobs 文件名一样无分隔符拼接,每一行也都可以单独获取。如果没有插件监听,标记就会直接消失。第 2-4 行均为空的 [custom] 告示牌会保留为普通告示牌,并记录一条警告。自定义标记适用于普通结构,不适用于模块化地牢。


原理图​

原理图是由 WorldEdit 或 FastAsyncWorldEdit 生成的文件,包含 BetterStructures 将使用的建筑方块。 BetterStructures 使用 .schem 文件格式(现代 WorldEdit 标准)。请确保使用 .schem 格式保存你的原理图,而不是旧版 .schematic 格式。

复制和保存可参阅 WorldEdit 剪贴板指南。基本步骤如下:

  1. 选择建筑的一个角并使用命令 //pos1
  2. 选择对角线对面的角并使用命令 //pos2
  3. 使用 //copy 命令
  4. 使用 //schem save <schematicname>,填写所需文件名。
  5. 将生成的 .schem 从编辑器的原理图文件夹复制到 plugins/BetterStructures/schematics,然后重载 BetterStructures。WorldEdit 的默认文件夹是 plugins/WorldEdit/schematics。
worldedit documentation image from their docs

确保你在点 1 运行命令 //pos1,在点 2 运行 //pos2!


锚点​

锚点是你为原理图运行 //copy 命令的位置。它们决定了结构在世界中放置时的原点。

建筑类型推荐锚点位置原因
地表地板的最低点确保正确的地面对齐
地下建筑顶部允许正确确定埋深
液体水面之上正确的水面放置
空中/天空建筑顶部正确的高度定位

请有意识地选择复制位置。偏移会保存在原理图中,影响放置和旋转。靠近建筑便于检查这种关系;距离本身不会增加保存选区中的方块数。


原理图配置

每个原理图文件都有一个原理图配置。如果一个原理图文件刚被添加到服务器,配置将在重启或执行 /betterstructures reload 后生成。

.yml 生成在与 .schem 相同的文件夹中。plugins/BetterStructures/schematics 会递归扫描,因此子文件夹中的原理图配置也写在原处。整个 schematics 目录树应使用唯一文件名。结构文件名重复时,BetterStructures 按稳定的绝对路径顺序加载第一个文件,并记录所选和跳过的路径。字节完全相同的副本无论选哪个都会加载同一个结构,因此会被直接跳过,不产生警告。它不会删除文件,也不会在所选文件损坏时改用被跳过的副本。模块文件名重复仍会阻止初始化。

没有对应 .schem 的 .yml 不会创建结构。加载器从找到的原理图文件开始处理。只要任一选定原理图无法读取,初始化就会失败,不接受部分结构注册表。即使其配置本来会禁用该结构,也一样。

这些配置允许你为原理图粘贴设置以下选项:

键默认值必需描述
isEnabledtrue❌原理图是否启用。如果禁用,它将不会被放置在任何地方。
weight1.0❌合格原理图之间的相对选择权重。使用有限正值。2.0 是 1.0 的两倍权重。负值或非有限值会记录一条警告并变为 0,权重为 0 的结构永远不会被选中。禁用结构请用 isEnabled: false。
pedestalMaterial环境备用材料❌基座的备用材料,使用 Spigot Material 名称。存在地形采样材料时优先使用采样。
generatorConfigFilename-✅生成器配置文件名,包含 .yml 扩展名。没有此项的原理图不会生成。
treasureFile生成器默认值❌覆盖此结构箱子的宝藏文件。通常最好修改生成器。
barrelTreasureFilename生成器默认值❌覆盖此结构木桶的宝藏文件。默认使用生成器提供的值(或其后备值 treasure_barrel_food.yml)。

战利品容器: BetterStructures 自动检测放置在原理图中的箱子、陷阱箱和普通(未染色)潜影盒,并使用箱子宝藏文件填充它们。木桶使用单独的木桶宝藏文件填充(默认 treasure_barrel_food.yml),可以按生成器使用 generateLootInBarrels: false 禁用。无需特殊告示牌或配置即可标记这些容器。

原理图的宝藏覆盖项仍要求生成器为该容器类型提供有效宝藏表。木桶还要求生成器启用木桶战利品。无效覆盖项会警告并退回生成器设置;已有容器内容会保留,新战利品使用空槽位。

新生成配置的 generatorConfigFilename 为空。选择已加载的文件,例如 generator_surface_global.yml,然后执行 /bs reload。该字段有效前,结构不会生成,也不会出现在 /bs place 补全中。控制台会报告受影响的配置路径和可用生成器示例。

被禁用的生成器: 如果 generatorConfigFilename 指向的生成器设置了 isEnabled: false,那么即使原理图自身的 isEnabled 为 true,该原理图也会被完全跳过。

配置详情

pedestalMaterial​

对于地表和地下建筑,基座在底部方块非空气的每一列下方最多填充十个方块,遇到不被视为可替换地形的方块就停止。空中和液体结构不进行这种向下填充。原理图内部的基岩标记也使用同样的材料选择。

插件在放置体积周围采样地表和地下材料,按出现频率加权,从对应组中随机选择,不总是选择最常见的材料。配置的 pedestalMaterial 仅在对应采样组为空时使用,不会覆盖已有采样组。请选择实心方块材料。未配置备用材料时,下界使用下界岩,末地使用末地石,其他环境使用石头。空中结构跳过采样和配置的备用材料,其基岩标记使用环境默认材料。

generatorConfigFilename​

示例:generatorConfigFilename: generator_surface_global.yml

生成器文件位于 generators 配置文件夹中。

treasureFile​

有关更多详细信息,请参阅宝藏文件文档和生成器文档。

自定义内容

BetterStructures 中分发的所有内容都是可编辑的。你可以根据自己的喜好修改任何原理图文件和生成器设置。

上面的内容创建指南也可以帮助你编辑现有内容。


故障排除

如果你的结构没有生成,请检查:

  • 原理图文件是 .schem 格式
  • 指定了有效的生成器配置
  • isEnabled 选项在原理图配置以及它所指向的生成器上都设置为 true
  • 如果原理图位于某个内容包的文件夹内,该包已安装(其 content_packages 文件中为 isEnabled: true)。被禁用的包的整个文件夹都会被跳过。
  • 你的 WorldEdit/FastAsyncWorldEdit 版本兼容
  • .yml 位于 .schem 旁边,而不是多余的 plugins/BetterStructures/plugins/BetterStructures/... 目录树中。旧版本曾误写到那里。删除多余副本前,先比较并保留有用设置,再在重载后检查相邻配置和生成器。

控制台报告结构文件名重复时,请检查所选和跳过的路径,为需要的结构及其配置使用唯一文件名。modules 下的重名仍会阻止初始化,必须在重启前解决。

.schematic_cache 文件夹​

BetterStructures 将结构原理图的转换副本保存在 plugins/BetterStructures/.schematic_cache,模块和组件加载器分别使用 modules 和 components 子文件夹。旧 .schem 可能需要 Minecraft 数据转换,因此会保存并复用结果。内容重载时,未变更的结构和模块剪贴板也可从内存复用。

你无需管理这个文件夹:

  • 磁盘条目以原理图内容、Minecraft 数据版本和 WorldEdit 版本为键,改变任一项都会重建受影响条目
  • 加载器读取文件或检测到删除时,只要能计算至少一个当前缓存键,就会清理过期磁盘条目;移除全部内容不会自动清空整个缓存
  • 它始终只是一项优化 —— 如果某个条目缺失、不可读或校验失败,就会转而读取原始的 .schem

删除它是安全的;下次启动只会重建它,只是耗时更长。

"Skipped N unsupported legacy block entries"​

转换旧原理图时,Mojang 的 DataFixerUpper 可能反复输出 Unsupported key: 消息,包括 minecraft:bed。BetterStructures 统计匹配的消息,并用一条信息日志报告涉及的键。这是转换输出的摘要,不是结构加载器的独立故障。

如果摘要处理无法连接服务器的日志后端,会通知一次并保留原始消息。其他加载错误或可见结构问题需要单独检查。摘要本身既不能证明安装损坏,也不能验证粘贴结果正确。

如果生成告示牌不起作用:

  • 验证告示牌格式与示例完全匹配
  • 对于 EliteMobs/MythicMobs,确保已安装相应插件
  • 检查实体类型/怪物名称拼写正确
  • 查看服务器日志以获取具体错误信息