Пакеты контента 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 затем отказывается объединить. - Пакет моделей определяется также по содержимому. Непустая папка
FreeMinecraftModels/models/EternalTD default towersили стараяFreeMinecraftModels/Models/EternalTD default towersвнутриplugins/считается присутствующим содержимым. Затем 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 выбирает обнаруженные загрузки, а конкретный slug Nightbreak позволяет выбрать полностью отсутствующий пакет.
/etd downloadall дополнительно сначала проверяет и загружает обновление плагина; если токен не привязан или аутентификация не удалась, выполнение останавливается до этапа загрузки контента.
Практические замечания
- Проверки пакетов выполняют дедупликацию по 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, и потому постоянно отображался как неполностью установленный. Теперь имя автоматически исправляется и сохраняется в конфигурации пакета при загрузке; ручное исправление не требуется.