Перейти к основному содержимому

Упаковка пользовательского контента 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 могут быть включены или отключены путём записи isEnabled в эти YAML-файлы
  • общий контент контейнера миров и ресурсные пакеты только с маркером не переключаются таким же образом
  • имена папок миров должны быть простыми именами — без разделителей пути, без :, без управляющих символов и не . и не ..
  • имена отслеживаемых файлов сопоставляются рекурсивно, поэтому подпапки 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 может отслеживать, был ли загружен общий пакет моделей
  • фактические ресурсы моделей находятся на стороне FreeMinecraftModels при установке FMM
  • очистка выполняется вручную с последующим выполнением /etd reload

Что эта страница не утверждает

Эта страница документирует текущие целевые папки на диске и модель отслеживания, которые проверены в репозитории.

Она не определяет собственную схему ZIP для архивов пакетов Nightbreak, поскольку этот формат упаковки не описан в данном репозитории как самостоятельная публичная спецификация для авторов.