跳到主要内容

EternalTD 设置

当前的 EternalTD 设置流程围绕 Nightbreak 管理的内容、通过 FreeMinecraftModels 提供的可选模型支持以及资源包辅助命令构建。

要求​

  • EternalTD;本指南依据当前源码 1.7.8
  • Java 21
  • 运行当前 1.21.4 API 线的 Paper/Spigot 兼容服务器

可选集成:

  • FreeMinecraftModels 用于 EternalTD 的自定义模型
  • ResourcePackManager 如果你希望 EternalTD 将其官方资源包注册到该插件而不是写入 server.properties
  • floodgate 和 LibsDisguises 是软依赖,不是当前设置流程的必要条件

plugin.yml 只声明了四个软依赖:FreeMinecraftModels、LibsDisguises、floodgate 和 ResourcePackManager。插件中已没有任何 ModelEngine 引用。

EternalTD 创建的内容​

启动时,EternalTD 初始化或使用以下路径:

plugins/EternalTD/config.yml
plugins/EternalTD/content_packages/
plugins/EternalTD/imports/
plugins/EternalTD/levels/
plugins/EternalTD/waves/
plugins/EternalTD/npcs/
plugins/EternalTD/worlds/

旧版说明:

  • 插件现在将 levels/ 和 npcs/ 作为规范文件夹名称。
  • 在启动和重新加载时,它会自动将旧版的 Levels/ 和 NPCs/ 文件夹迁移到小写路径。
  • 迁移从不覆盖文件。如果小写文件夹中已有同名文件,移动会停止,未移动的文件会留在旧版文件夹或 levels_migration/(npcs_migration/)中,EternalTD 会记录一次初始化失败。请手动合并这些文件后重启。
  1. 安装 EternalTD 并启动服务器一次。
  2. 使用 /nightbreaklogin 关联你的 Nightbreak 账户,然后在它打印的链接处批准该服务器。
  3. 运行 /etd downloadall 将所有可访问的 EternalTD 包下载到 plugins/EternalTD/imports。
  4. 运行 /etd install 应用官方 EternalTD 资源包设置。
  5. 随时运行 /etd setup 来浏览、启用、禁用或更新单个包。

/nightbreaklogin 是共享的 Nightbreak/MagmaCore 账户流程的一部分,不是在 EternalTD 的 plugin.yml 中声明的命令。

/etd initialize 菜单​

当 setupDone 为 false 时,拥有 eternaltd.* 的玩家会在加入 10 秒后收到设置提醒,其中带有 /etd initialize 和 /etd setup 的链接。

/etd initialize 会打开首次设置菜单。它的三个选项都会设置 setupDone: true,从而停止提醒:

  • Recommended Setup(推荐设置)输出引导式设置步骤,并在服务器尚未关联时,为你发起一次 /nightbreaklogin 关联。
  • Manual Setup(手动设置)把包管理交给你,并提醒你运行 /etd install。
  • Use Current Content(使用当前内容)保留你现有的 EternalTD 内容文件夹不变。

/etd setup 菜单​

/etd setup 会打开共享的 MagmaCore 设置菜单。除了 EternalTD 内容包(按 Free Content、Premium Packs 和 Resources 筛选)之外,该菜单还提供以下标准的 MagmaCore 控制项:

  • Plugin Update(插件更新)条目,显示已安装的 EternalTD 版本与最新版本的对比,并在有可用更新时下载插件更新(在重启时应用;如果 nightbreak.applyPluginUpdatesWithoutRestart 允许,则更早应用),
  • Recommended Plugins(推荐插件)条目,打开配套插件推荐视图(也可通过 /etd recommendedplugins 访问),
  • Automatic Updates(自动更新)切换按钮,用于开启或关闭 nightbreak.autoDownloadPluginUpdates 配置值,
  • Download All(全部下载)条目,运行 /etd downloadall(插件更新加上所有可用内容)。

出生点和大厅行为​

config.yml 当前包含:

  • setupDone —— 跟踪首次设置引导是否已完成的标志(默认 false)。
  • spawnLocations —— 默认为 etd_spawn,0,65,0,0,0,始终写入配置。EternalTD 只在 etd_spawn 世界存在时解析并使用它。
  • manageSpawn —— 默认为 true。在 EternalTD 大厅世界可用时,将加入的玩家传送到那里。
  • playerGuide —— 游戏内指南书的文本。
  • nightbreak.autoDownloadPluginUpdates —— 默认为 false。共享的 MagmaCore 设置;当为 true 时,插件会在启动时自动下载可用的插件和内容更新(在下次重启后生效,除非 nightbreak.applyPluginUpdatesWithoutRestart 让插件更新更早应用)。也可在游戏内通过 /etd setup 菜单的 "Automatic Updates" 按钮切换。
  • nightbreak.applyPluginUpdatesWithoutRestart(默认 never)—— 共享的 MagmaCore 设置,控制已下载的插件更新何时在不重启的情况下应用:never 等待下次重启,when-empty 在下一次没有玩家在线时应用,immediately 在下载完成后立即应用。其他任何值都按 never 处理。应用更新会禁用并重新启用 EternalTD,因此正在进行的关卡会结束。/etd applypluginupdate 可按需应用已下载的更新。

当 manageSpawn: true 且 etd_spawn 世界存在时,加入的玩家会被传送到配置的 EternalTD 出生点位置。

官方大厅包与游戏地图分开跟踪,作为 etd_spawn 世界安装在服务器的世界容器中。

在 Paper 26.1 及更新版本中,世界会从世界容器根目录迁移到 <level-name>/dimensions/minecraft/<world>。EternalTD 会同时在旧版根目录和迁移后的位置查找 etd_spawn,因此迁移过的大厅仍会被识别为已安装并被加载。迁移不完整的残留会在世界创建之前被隔离,因为 Paper 的迁移流程拒绝把旧版副本与迁移后的副本合并。

导入后重新加载​

在手动导入或手动文件清理后使用 /etd reload。

/etd reload 是对插件的一次完整的原地重启 —— 它会走完 EternalTD 的禁用、加载和启用流程 —— 因此启动时发生的一切都会再次发生:

  • 旧版的 Levels/ 和 NPCs/ 文件夹被迁移为小写
  • 重新运行导入器
  • 重新加载内容包、波次、关卡、世界模板和 NPC
  • 刷新包更新/访问状态
  • 重新初始化资源包辅助工具

有两个后果值得注意:

  • 任何进行中的关卡会话都会被拆除,因为重新加载走的是插件的正常关闭流程。
  • 如果此次重新加载向 FreeMinecraftModels 的文件夹导入了模型或其他文件(例如 scripts),且 FreeMinecraftModels 已启用,共享导入器会触发 FMM 的内容重新加载。如果你直接编辑 FMM 文件夹中的文件或将文件复制到其中,请使用 FMM 自己的重新加载命令。

已经在线的玩家​

manageSpawn 通常会在玩家加入时将其传送到大厅,但在 EternalTD 仍在初始化期间连接的玩家不会被传送(大厅世界和加入监听器只有在初始化完成后才存在)。初始化完成时,EternalTD 会扫描所有已经在线的玩家,并将尚未处于大厅世界中的玩家传送到配置的出生点。

故障排查​

  • 无法加入某个关卡。 检查控制台中关于该关卡文件、其波次文件或其世界模板的错误,并在 /etd setup 中确认该包已安装并启用。加入和开始时的消息列在世界生命周期和会话启动校验下。
  • 防御塔显示为原版生物,或模型没有材质。 分别检查这两部分。模型需要 FreeMinecraftModels 和 EternalTD Custom Models 包。材质需要资源包送达玩家;参见模型与资源包。
  • 更新内容之前, 请备份你编辑过的任何已打包的关卡、波次或 NPC 文件。内容更新会用包中的文件覆盖你编辑过的副本。

寻求帮助时,请附上 EternalTD 和服务端的版本、受影响的关卡、相关的配置文件以及完整的服务器日志。/logify 会上传日志并返回一个链接。