Empaquetar contenido personalizado de EternalTD
EternalTD carga contenido personalizado desde las carpetas indicadas abajo. Las importaciones ZIP usan el importador compartido de MagmaCore; los metadatos del paquete controlan cómo aparece el contenido en /etd setup.
Carpeta de importación
Las importaciones manuales pasan por:
plugins/EternalTD/imports/
Tras importar manualmente, ejecuta:
/etd reload
Carpetas de contenido oficiales
El plugin actual examina estas carpetas en minúsculas:
plugins/EternalTD/levels/
plugins/EternalTD/waves/
plugins/EternalTD/npcs/
plugins/EternalTD/worlds/
Nota sobre versiones anteriores:
Levels/yNPCs/son nombres antiguos.- EternalTD los migra a
levels/ynpcs/al arrancar y recargar.
Reglas para empaquetar mundos
EternalTD trata los mundos de:
plugins/EternalTD/worlds/
como plantillas.
Cuando un jugador inicia un nivel, EternalTD clona la plantilla correspondiente en el contenedor de mundos del servidor y ejecuta la sesión en esa copia.
La raíz de la plantilla se valida antes de copiarla; su contenido se comprueba durante la copia. Si falla, se revierte el clon parcial. Se rechaza la copia si se cumple cualquiera de estas condiciones:
- No hay un
level.daten la raíz. - La carpeta es un enlace simbólico o contiene alguno en su interior.
- La plantilla contiene un archivo llamado
.eternaltd-instance.
Ese último nombre está reservado: EternalTD lo escribe en los clones de ejecución como marcador de propiedad y comprueba la identidad y la propiedad de la instancia antes de limpiarla. Nunca lo incluyas en una plantilla distribuida.
En la práctica:
- Empaqueta las plantillas en
plugins/EternalTD/worlds/. - No uses los clones de ejecución como originales del contenido distribuido.
- Las plantillas deben ser subcarpetas directas de
worlds/; los nombres que contengan cualquier.quedan excluidos de la detección. - Los nombres tampoco pueden contener separadores de ruta,
:ni caracteres de control, y deben coincidir exactamente conworldNamedel nivel.
El mundo central oficial es un caso especial y se registra directamente en el contenedor de mundos del servidor como:
etd_spawn
Qué permite habilitar y deshabilitar un paquete
El interruptor de /etd setup solo funciona para paquetes con archivos de configuración registrados.
Los campos actuales para registrar recursos son:
levelFileswaveFilesnpcFilesworldFoldersworldContainerFoldersmarkerFileName
En la práctica:
- Los paquetes de niveles, oleadas y NPC se habilitan o deshabilitan escribiendo
isEnableden esos YAML. - Los archivos se buscan recursivamente por nombre, por lo que puedes usar subcarpetas de
levels/,waves/ynpcs/; basta con que coincida el nombre. - El contenido compartido del contenedor de mundos y los recursos registrados solo mediante marcador no se pueden deshabilitar de la misma forma.
Campos de metadatos de paquetes
La configuración actual admite:
isEnablednamedescriptiondownloadLinkversionnightbreakSluglevelFileswaveFilesnpcFilesworldFoldersworldContainerFoldersmarkerFileNamecategorytoggleable
Para mostrar contenido personalizado en el menú, coloca su YAML de metadatos directamente en plugins/EternalTD/content_packages/, o inclúyelo en la carpeta content_packages/ del ZIP (consulta la estructura del ZIP). Registra los nombres reales de archivos y mundos e incluye al menos un recurso. Una lista de recursos vacía nunca cuenta como descargada. El indicador isEnabled del paquete por sí solo no deshabilita sus niveles: el interruptor cambia ese indicador en cada archivo de nivel, oleadas y NPC registrado, guarda el indicador del paquete y reinicia EternalTD.
Existe además markerFallbackFolders, una lista de carpetas dentro de plugins/ cuya presencia no vacía también cuenta como instalación. Sirve para contenido que puede llegar al servidor sin que la descarga escriba un marcador. Solo se define en el código: añadirlo al YAML no tiene efecto.
Notas para empaquetar modelos
El paquete EternalTD Custom Models se registra mediante un archivo marcador, en lugar de archivos normales de configuración de EternalTD.
Esto significa que:
- EternalTD puede registrar si se ha descargado el paquete compartido de modelos.
- Los modelos propiamente dichos se guardan en FreeMinecraftModels cuando está instalado.
- La limpieza es manual y requiere ejecutar después
/etd reload.
Estructura del ZIP
Coloca las carpetas reconocidas directamente en la raíz del archivo, sin una carpeta contenedora. Una estructura mínima es:
pack.meta
levels/my_level.yml
waves/my_waves.yml
npcs/my_npc.yml
worlds/my_world/level.dat
worlds/my_world/region/...
El texto de pack.meta es eternaltd. Un ZIP sin este archivo usa la plataforma del plugin que lo importa; una carpeta descomprimida solo se procesa si contiene pack.meta. Coloca los archivos .zip en la carpeta de importación y recarga.
| Entrada en la raíz del archivo | Destino |
|---|---|
levels, waves, npcs, worlds | Carpetas correspondientes dentro de plugins/EternalTD/ |
content_packages | plugins/EternalTD/content_packages/; metadatos del paquete que lo enumeran en /etd setup |
content_markers | plugins/EternalTD/content_markers/; marcadores de instalación llamados <markerFileName>.marker |
worldcontainer | Contenedor de mundos del servidor; para mundos compartidos como etd_spawn |
models, modelengine | Carpeta de modelos de FMM si está habilitado; si no, blueprints de ModelEngine si está habilitado; en caso contrario, la carpeta de FMM para su uso posterior |
scripts | plugins/FreeMinecraftModels/scripts/ |
freeminecraftmodels, elitemobs, betterstructures | La carpeta de datos de ese plugin (plugins/FreeMinecraftModels/, plugins/EliteMobs/, plugins/BetterStructures/); organiza el contenido igual que en esa carpeta |
El destino de modelos de FMM usa la carpeta antigua Models si existe; en caso contrario, usa models. Una carpeta freeminecraftmodels/models del archivo se combina en esa misma carpeta. Cualquier importación en las carpetas de FMM activa la recarga de contenido importado de FMM si está habilitado. El contenido colocado en la carpeta de BetterStructures activa una recarga de contenido de BetterStructures en cuanto este termina de arrancar.
El importador se ejecuta antes de que EternalTD cargue content_packages/, así que un YAML de paquete incluido en el ZIP aparece en /etd setup tras la recarga que lo importa. Un marcador incluido en content_markers/ cuenta como el recurso marcador del paquete, de modo que ese recurso figura como presente sin pasar por el flujo de descarga del menú de configuración. El paquete sigue necesitando sus demás archivos registrados para contar como descargado.
Una entrada raíz no reconocida rechaza el archivo antes de instalarlo. El importador conserva los ZIP fallidos para reintentarlo e intenta revertir los destinos que ese archivo haya modificado; revisa los errores de reversión antes de repetir. Para reemplazar un mundo compartido, primero se descarga el anterior: los jugadores que estén en él se trasladan al punto de aparición de otro mundo cargado. Si no se puede trasladar a un jugador o el mundo se niega a descargarse, el archivo se conserva para reintentarlo. Las importaciones correctas eliminan el ZIP; esto no demuestra que se pueda jugar al nivel.