EternalTD 内容包
EternalTD 现在通过 content_packages 配置集跟踪官方内容,并通过 /etd setup 公开这些包。
包类别
当前代码使用三种包类别:
FREEPREMIUMRESOURCES
设置菜单当前将它们显示为:
Free ContentPremium PacksResources
已验证的预制包
以下是当前在仓库中定义的预制包:
| 包 | 类别 | 在 /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,这导致它始终显示为未完全安装。现在跟踪名称会被自动纠正,并在加载时写回包配置 —— 无需手动修复。