Paquetes de contenido de EternalTD
EternalTD registra el contenido oficial mediante el conjunto de configuraciones content_packages y muestra esos paquetes en /etd setup.
Categorías de paquetes
El código actual usa tres categorías:
FREEPREMIUMRESOURCES
El menú las presenta como:
- Contenido gratuito
- Paquetes prémium
- Recursos
Paquetes prediseñados verificados
Estos son los paquetes definidos actualmente en el repositorio:
| Paquete | Categoría | Se puede habilitar y deshabilitar en /etd setup | Recursos comprobados |
|---|---|---|---|
EternalTD Hub World | Gratuito | No | Carpeta etd_spawn en el contenedor de mundos del servidor |
EternalTD Tutorial | Gratuito | Sí | tutorial.yml, tutorial_waves.yml, tutorial_npc.yml, etd_tutorial |
Towers of the Grassy Lands | Gratuito | Sí | 5 archivos de niveles, 1 de oleadas, 1 de NPC y 5 mundos |
Towers from the Depths | Prémium | Sí | 5 archivos de niveles, 1 de oleadas, 1 de NPC y 5 mundos |
Towers of the Rising Sun | Prémium | Sí | 5 archivos de niveles, 1 de oleadas, 1 de NPC y 5 mundos |
EternalTD Custom Models | Recursos | No | Archivo marcador y contenido importado de FreeMinecraftModels cuando esté presente |
Ciclo de vida de los paquetes
El explorador distingue entre:
- Sin descargar.
- Sin instalar.
- Instalado.
- Parcialmente instalado.
- Desactualizado y actualizable.
- Desactualizado sin acceso.
- Requiere acceso.
El estado se calcula a partir de los recursos comprobados en disco, los indicadores isEnabled de sus configuraciones y las consultas de acceso y actualizaciones de Nightbreak.
Hay dos reglas relevantes si un paquete parece quedarse parcialmente instalado:
- Las carpetas del contenedor de mundos se buscan en ambas estructuras. Paper 26.1 y posteriores migran los mundos de plugins a
<level-name>/dimensions/minecraft/<world>. EternalTD considera presente una carpeta si existe en la raíz antigua o en la ubicación migrada. Comprueba deliberadamente la carpeta, nolevel.dat: exigir ese archivo marcaría el paquete como sin instalar durante una migración parcial y provocaría una reinstalación que Paper después rechazaría combinar. - El paquete de modelos también puede detectarse por su contenido. Basta con que exista una carpeta no vacía
FreeMinecraftModels/models/EternalTD default towerso la antiguaFreeMinecraftModels/Models/EternalTD default towersdentro deplugins/. EternalTD intenta entonces escribir el marcador; si falla, lo registra. Esta lista de carpetas está definida en el código, no en el YAML del paquete.
Estas comprobaciones verifican presencia y habilitación, no que el contenido se pueda jugar. El marcador puede permanecer después de eliminar los modelos, y detectar una carpeta de mundo no valida su contenido. Si faltan recursos registrados, el estado pasa a parcialmente instalado; si están todos, pero unas configuraciones están habilitadas y otras no, también aparece ese estado.
Paquetes con interruptor y paquetes compartidos
Los paquetes que se pueden habilitar y deshabilitar cambian isEnabled en sus archivos de configuración dentro de:
plugins/EternalTD/levels/
plugins/EternalTD/waves/
plugins/EternalTD/npcs/
También se guarda el indicador isEnabled del propio paquete y se reinicia EternalTD. Deshabilitarlo conserva los archivos en disco. El estado instalado depende de los archivos registrados, no solo del indicador del paquete. El interruptor lee todos los archivos registrados antes de escribir en ninguno; si no puede leer uno, no se modifica ningún archivo. Del mismo modo, si /etd setup no puede leer un archivo registrado al actualizar el estado de los paquetes, el menú no se abre y se te pide que revises la consola.
Los paquetes compartidos no tienen ese comportamiento:
- El mundo central se trata como contenido instalado compartido.
- El paquete de modelos se trata como recursos compartidos.
Para estos, el menú indica que elimines los archivos manualmente y ejecutes /etd reload.
Operaciones en bloque
Las operaciones de contenido implementadas son:
/etd downloadall: descarga la actualización de EternalTD y todo el contenido disponible./etd downloadallcontent: descarga todo el contenido disponible sin actualizar el plugin./etd updatecontent, alias/etd updateallcontent: descarga únicamente contenido desactualizado.
Los comandos de descarga y actualización de contenido:
- Requieren un token de Nightbreak vinculado.
- Descargan en
plugins/EternalTD/imports. - Para descargar, seleccionan paquetes ausentes o desactualizados; para actualizar, seleccionan los desactualizados y omiten las denegaciones de acceso guardadas en caché.
- Recargan EternalTD automáticamente tras las descargas correctas.
En las descargas normales, la caché de acceso es orientativa: la solicitud autenticada determina el acceso actual. Se omiten los paquetes ya descargados y actualizados, aunque sus configuraciones estén deshabilitadas. Usa su interruptor en el menú para habilitarlos. /etd forcereinstallcontent <package|all> repara archivos ausentes o dañados incluso en la versión actual; all selecciona las descargas detectadas, mientras que un slug de Nightbreak permite seleccionar un paquete que falte por completo.
/etd downloadall primero comprueba y descarga una actualización del plugin; si no hay token vinculado o falla la autenticación, se detiene antes de procesar el contenido.
Notas prácticas
- Las comprobaciones eliminan duplicados por slug de Nightbreak antes de descargar o actualizar en bloque.
- La interfaz solicita actualizaciones de contenido y acceso con un intervalo mínimo de cinco minutos, en lugar de consultar Nightbreak cada vez que se abre.
- El paquete de modelos escribe un marcador en
plugins/EternalTD/content_markers/para registrar la descarga de los recursos compartidos. - Los archivos de niveles, oleadas y NPC se buscan por nombre en cualquier subcarpeta de
levels/,waves/ynpcs/, por lo que también se detectan los paquetes organizados en subcarpetas. - Antes,
Towers of the Rising Suncomprobabatowers_of_the_rising_sun.yml, aunque el paquete incluyetowers_of_the_rising_sun_waves.yml, lo que lo dejaba permanentemente incompleto. Ahora el nombre se corrige automáticamente y se guarda en la configuración al cargarla; no hace falta corregirlo a mano.