跳到主要内容

EternalTD 内容包

EternalTD 现在通过 content_packages 配置集跟踪官方内容,并通过 /etd setup 公开这些包。

包类别​

当前代码使用三种包类别:

  • FREE
  • PREMIUM
  • RESOURCES

设置菜单当前将它们显示为:

  • Free Content
  • Premium Packs
  • Resources

已验证的预制包​

以下是当前在仓库中定义的预制包:

包类别在 /etd setup 中可切换跟踪的资产
EternalTD Hub World免费否服务器世界容器文件夹 etd_spawn
EternalTD Tutorial免费是tutorial.yml、tutorial_waves.yml、tutorial_npc.yml、etd_tutorial
Towers of the Grassy Lands免费是5 个关卡文件、1 个波次文件、1 个 NPC 文件、5 个世界
Towers from the Depths付费是5 个关卡文件、1 个波次文件、1 个 NPC 文件、5 个世界
Towers of the Rising Sun付费是5 个关卡文件、1 个波次文件、1 个 NPC 文件、5 个世界
EternalTD Custom Models资源否标记文件及已存在的导入后 FreeMinecraftModels 内容

包生命周期​

包浏览器当前区分以下状态:

  • 未下载
  • 未安装
  • 已安装
  • 部分安装
  • 已过时且可更新
  • 已过时但不可访问
  • 需要访问权限

该状态根据磁盘上跟踪的资产、跟踪配置文件中的 isEnabled 标志以及 Nightbreak 访问/更新检查计算得出。

当某个包看起来卡在"部分安装"状态时,有两条检测规则很重要:

  • 世界容器文件夹会在两种布局下匹配。 Paper 26.1 及更新版本会把插件世界迁移到 <level-name>/dimensions/minecraft/<world>。只要世界容器文件夹存在于旧版根目录或迁移后的位置之一,EternalTD 就会将其计为存在;而且它刻意只检查文件夹,而不检查 level.dat —— 若要求 level.dat,则在迁移进行到一半时该包会被翻转为"未安装",进而触发一次 Paper 随后会拒绝合并的重新安装。
  • 模型包也能通过内容检测。 plugins/ 下的 FreeMinecraftModels/models/EternalTD default towers 或旧版 FreeMinecraftModels/Models/EternalTD default towers 文件夹非空时,即计为存在。EternalTD 随后尝试写入标记;写入失败会记录日志。这份文件夹列表在代码中定义,不从包的 YAML 读取。

这些检查只确认内容是否存在、是否启用,不验证内容能否游玩。删除模型后标记可能仍在,检测到世界文件夹也不代表其内容有效。缺少跟踪的资产时,优先显示部分安装;所有资产都存在但配置有的启用、有的禁用时,也显示此状态。

可切换包与共享包​

可切换包通过在以下位置的跟踪配置文件中切换 isEnabled 来工作:

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

包自身的 isEnabled 标志也会保存,然后重启 EternalTD。禁用会保留磁盘上的文件。安装状态由跟踪的文件决定,不只看包自身的标志。切换操作会先读取所有跟踪文件,再写入其中任何一个;只要有一个文件无法读取,就不会修改任何文件。同样,如果 /etd setup 在刷新包状态时无法读取某个跟踪文件,菜单不会打开,并提示你检查控制台。

共享包的行为与普通切换不同:

  • 大厅世界被视为共享已安装内容。
  • 自定义模型包被视为共享资源内容。

对于这些包,设置菜单会告诉你手动删除文件,然后运行 /etd reload。

批量操作​

当前实现的批量内容操作有:

  • /etd downloadall —— 下载 EternalTD 插件更新以及所有可用内容
  • /etd downloadallcontent —— 下载所有可用内容(不含插件更新)
  • /etd updatecontent(别名 /etd updateallcontent)—— 仅下载过时内容

内容下载/更新命令:

  • 需要已链接的 Nightbreak 令牌
  • 下载到 plugins/EternalTD/imports
  • 下载时选择缺失或过时的包;更新时选择过时的包,并跳过缓存中已拒绝访问的包
  • 成功下载后自动重新加载 EternalTD

正常下载时,缓存的访问状态仅供参考,当前访问权限由经过身份验证的下载请求决定。已下载且最新的包会被跳过,即使其配置已禁用;请通过设置菜单中的开关启用。/etd forcereinstallcontent <package|all> 即使在当前版本也能修复缺失或损坏的文件;all 选择检测为已下载的包,指定 Nightbreak slug 则可以选择完全缺失的包。

/etd downloadall 还会先检查并下载插件更新;如果未链接令牌或身份验证失败,它会在内容步骤之前停止。

实用说明​

  • 包检查在批量下载/更新前按 Nightbreak slug 去重。
  • 设置界面以至少五分钟的间隔请求刷新内容和访问信息,而不是每次打开都查询 Nightbreak。
  • 自定义模型包在 plugins/EternalTD/content_markers/ 下写入标记,以便 EternalTD 可以跟踪共享资源包是否已下载。
  • 跟踪的关卡、波次和 NPC 文件是按文件名在 levels/、waves/ 和 npcs/ 下的任意位置匹配的,因此把文件放在子文件夹中发布的包仍然能被检测到。
  • Towers of the Rising Sun 此前把它的波次文件跟踪为 towers_of_the_rising_sun.yml,而该包实际发布的是 towers_of_the_rising_sun_waves.yml,这导致它始终显示为未完全安装。现在跟踪名称会被自动纠正,并在加载时写回包配置 —— 无需手动修复。