跳到主要内容

EternalTD 自定义内容打包

EternalTD 仍然支持基于文件系统的自定义内容,但当前代码期望特定的文件夹布局和包跟踪模型。

导入根目录

手动导入仍然通过以下路径进行:

plugins/EternalTD/imports/

手动导入内容后,运行:

/etd reload

规范内容文件夹

当前插件扫描这些小写文件夹:

plugins/EternalTD/levels/
plugins/EternalTD/waves/
plugins/EternalTD/npcs/
plugins/EternalTD/worlds/

旧版说明:

  • Levels/NPCs/ 是旧版文件夹名称。
  • EternalTD 现在在启动和重新加载期间将它们迁移到 levels/npcs/

世界打包规则

EternalTD 将以下位置的世界:

plugins/EternalTD/worlds/

视为世界模板。

当玩家开始一个关卡时,EternalTD 将匹配的模板世界克隆到服务器世界容器中,并在该克隆副本中运行会话。

模板在被复制之前会先经过校验,出现以下任一情况时复制会被拒绝:

  • 模板根目录下没有 level.dat
  • 模板文件夹是符号链接,或其内部任何位置包含符号链接
  • 模板包含名为 .eternaltd-instance 的文件

最后这个名称是保留的:EternalTD 会把它写入每一个运行时克隆作为归属标记,并拒绝删除任何不携带匹配标记的世界文件夹。切勿在打包的模板中附带该文件。

实际含义:

  • 将模板世界打包在 plugins/EternalTD/worlds/
  • 不要将运行时克隆的世界视为打包内容的真实来源
  • 世界文件夹名必须是普通名称 —— 不含路径分隔符、不含 :、不含控制字符,也不能是 ...

官方大厅世界是一个特殊情况,直接在服务器世界容器中作为以下内容进行跟踪:

etd_spawn

什么使包可切换

/etd setup 中的包切换仅适用于公开跟踪配置文件的包。

当前跟踪的资产字段为:

  • levelFiles
  • waveFiles
  • npcFiles
  • worldFolders
  • worldContainerFolders
  • markerFileName

实际上:

  • 关卡、波次和 NPC 包可以通过在这些 YAML 文件中写入 isEnabled 来启用或禁用
  • 跟踪的文件名是递归匹配的,因此 levels/waves/npcs/ 的子文件夹没有问题 —— 只需要文件名匹配
  • 共享世界容器内容和仅标记的资源包不能以相同方式切换

包元数据字段

当前的包配置字段模型支持:

  • isEnabled
  • name
  • description
  • downloadLink
  • version
  • nightbreakSlug
  • levelFiles
  • waveFiles
  • npcFiles
  • worldFolders
  • worldContainerFolders
  • markerFileName
  • category
  • toggleable

如果你希望自定义内容在设置界面中表现为跟踪包,你需要匹配这些字段的包元数据。

还有一个跟踪字段 markerFallbackFolders,它列出 plugins/ 下的一些文件夹,只要这些文件夹非空,也会被计为该包已安装。它的存在是为了应对那些无需下载流程写入标记就能到达服务器的内容。该字段仅在代码中定义 —— 把它写进包的 YAML 不会有任何效果。

模型打包说明

当前的 EternalTD Custom Models 包使用标记文件而不是普通的 EternalTD 配置文件进行跟踪。

这意味着:

  • EternalTD 可以跟踪共享模型包是否已下载
  • 当 FMM 安装时,实际的模型资产位于 FreeMinecraftModels 侧的设置中
  • 清理是手动的,之后需要运行 /etd reload

此页面未声明的内容

此页面记录了在仓库中验证的当前磁盘目标位置和跟踪模型。

它不定义 Nightbreak 包存档的第一方 ZIP 模式,因为该打包格式在此仓库中未作为独立的公共创作规范描述。