Empaquetage de contenu personnalisé EternalTD
EternalTD charge le contenu personnalisé depuis les dossiers ci-dessous. Les imports ZIP utilisent l'importateur partagé de MagmaCore ; les métadonnées du pack contrôlent son affichage dans /etd setup.
Racine d'importation
Les importations manuelles passent toujours par :
plugins/EternalTD/imports/
Après avoir importé du contenu manuellement, exécutez :
/etd reload
Dossiers de contenu canoniques
Le plugin actuel analyse ces dossiers en minuscules :
plugins/EternalTD/levels/
plugins/EternalTD/waves/
plugins/EternalTD/npcs/
plugins/EternalTD/worlds/
Note sur les versions antérieures :
Levels/etNPCs/sont des noms de dossiers hérités.- EternalTD les migre désormais vers
levels/etnpcs/lors du démarrage et du rechargement.
Règles d'empaquetage des mondes
EternalTD traite les mondes sous :
plugins/EternalTD/worlds/
comme des modèles de monde.
Lorsqu'un joueur démarre un niveau, EternalTD clone le monde modèle correspondant dans le conteneur de mondes du serveur et exécute la session dans cette copie clonée.
La racine du modèle est validée avant la copie ; ses descendants sont vérifiés pendant celle-ci. Un échec entraîne la suppression du clone partiel. La copie est refusée dans les cas suivants :
- le modèle n'a pas de
level.datà sa racine - le dossier du modèle est un lien symbolique, ou contient un lien symbolique quelque part à l'intérieur
- le modèle contient un fichier nommé
.eternaltd-instance
Ce dernier nom est réservé : EternalTD l'écrit dans les clones d'exécution comme marqueur de propriété et vérifie l'identité et la propriété de l'instance avant son nettoyage. N'en incluez jamais dans un modèle distribué.
Implication pratique :
- empaquetez les mondes modèles sous
plugins/EternalTD/worlds/ - ne traitez pas les mondes clonés à l'exécution comme la source de vérité pour le contenu empaqueté
- les modèles doivent être des sous-dossiers directs de
worlds/; tout nom contenant un.est exclu de la détection - les noms doivent aussi exclure les séparateurs de chemin,
:et les caractères de contrôle, et correspondre exactement auworldNamedu niveau
Le monde hub officiel est un cas spécial et est suivi directement dans le conteneur de mondes du serveur comme :
etd_spawn
Conditions d'activation d'un pack
L'activation de paquets dans /etd setup ne fonctionne que pour les paquets qui exposent des fichiers de configuration suivis.
Les champs de ressources suivies sont :
levelFileswaveFilesnpcFilesworldFoldersworldContainerFoldersmarkerFileName
En pratique :
- les paquets de niveaux, de vagues et de NPC peuvent être activés ou désactivés en écrivant
isEnableddans ces fichiers YAML - les noms de fichiers suivis sont recherchés récursivement, les sous-dossiers de
levels/,waves/etnpcs/conviennent donc — seul le nom de fichier doit correspondre - le contenu partagé du conteneur de mondes et les paquets de ressources à marqueur seul ne sont pas activables de la même manière
Champs de métadonnées de pack
Le modèle de champs de configuration de paquet actuel supporte :
isEnablednamedescriptiondownloadLinkversionnightbreakSluglevelFileswaveFilesnpcFilesworldFoldersworldContainerFoldersmarkerFileNamecategorytoggleable
Pour afficher du contenu personnalisé dans le menu, placez son YAML de métadonnées directement dans plugins/EternalTD/content_packages/, ou fournissez-le dans le dossier content_packages/ du ZIP (voir Structure du ZIP). Référencez les vrais noms de fichiers et de mondes, avec au moins une ressource suivie. Une liste de ressources vide n'est jamais considérée comme téléchargée. L'indicateur isEnabled du pack seul ne désactive pas ses niveaux : le menu écrit cet indicateur dans chaque fichier suivi de niveau, de vagues et de PNJ, enregistre celui du pack, puis redémarre EternalTD.
Il existe un champ suivi supplémentaire, markerFallbackFolders, qui liste des dossiers sous plugins/ dont la présence non vide compte également comme paquet installé. Il existe pour du contenu susceptible d'atteindre le serveur sans que le flux de téléchargement n'écrive un marqueur. Il n'est défini que dans le code — l'écrire dans un YAML de paquet n'a aucun effet.
Notes sur l'empaquetage des modèles
Le paquet actuel EternalTD Custom Models est suivi avec un fichier marqueur plutôt que des fichiers de configuration EternalTD normaux.
Cela signifie :
- EternalTD peut suivre si le paquet de modèles partagé a été téléchargé
- les ressources des modèles résident dans l'installation de FreeMinecraftModels lorsque FMM est installé
- le nettoyage est manuel et suivi de
/etd reload
Structure du ZIP
Placez les dossiers reconnus directement à la racine de l'archive, sans dossier intermédiaire. Voici une structure minimale :
pack.meta
levels/my_level.yml
waves/my_waves.yml
npcs/my_npc.yml
worlds/my_world/level.dat
worlds/my_world/region/...
Le texte brut de pack.meta est eternaltd. Un ZIP sans ce fichier utilise la plateforme du plugin qui l'importe ; un dossier extrait n'est traité que s'il contient pack.meta. Placez les fichiers .zip dans le dossier d'importation, puis rechargez.
| Entrée à la racine de l'archive | Destination |
|---|---|
levels, waves, npcs, worlds | Dossiers correspondants sous plugins/EternalTD/ |
content_packages | plugins/EternalTD/content_packages/ ; métadonnées de pack qui font apparaître le pack dans /etd setup |
content_markers | plugins/EternalTD/content_markers/ ; marqueurs d'installation nommés <markerFileName>.marker |
worldcontainer | Conteneur de mondes du serveur ; utilisé pour les mondes partagés comme etd_spawn |
models, modelengine | Dossier des modèles de FMM s'il est activé ; sinon blueprints de ModelEngine s'il est activé ; sinon dossier de FMM pour un usage ultérieur |
scripts | plugins/FreeMinecraftModels/scripts/ |
freeminecraftmodels, elitemobs, betterstructures | Dossier de données du plugin concerné (plugins/FreeMinecraftModels/, plugins/EliteMobs/, plugins/BetterStructures/) ; organisez le contenu comme dans ce dossier |
La destination des modèles FMM utilise l'ancien dossier Models s'il existe, sinon models ; un dossier freeminecraftmodels/models de l'archive est fusionné dans ce même dossier. Tout import dans les dossiers de FMM déclenche le rechargement du contenu importé de FMM lorsque celui-ci est activé. Le contenu placé dans le dossier de BetterStructures déclenche un rechargement du contenu de BetterStructures une fois que ce dernier a fini de démarrer.
L'importateur s'exécute avant qu'EternalTD ne charge content_packages/ : un YAML de pack fourni dans le ZIP apparaît donc dans /etd setup après le rechargement qui l'importe. Un marqueur fourni dans content_markers/ compte comme la ressource marqueur du pack, de sorte que cette ressource est considérée comme présente sans passer par le flux de téléchargement du menu de configuration. Le pack a tout de même besoin de ses autres fichiers suivis pour être considéré comme téléchargé.
Une entrée racine inconnue fait rejeter l'archive avant installation. L'importateur conserve les ZIP ayant échoué pour une nouvelle tentative et essaie de restaurer les destinations modifiées par cette archive ; vérifiez les erreurs de restauration dans les journaux avant de réessayer. Le remplacement d'un monde partagé décharge d'abord l'ancien : les joueurs qui s'y trouvent sont déplacés au point d'apparition d'un autre monde chargé. Si un joueur ne peut pas être déplacé ou si le monde refuse de se décharger, l'archive est conservée pour une nouvelle tentative. Un import réussi supprime le ZIP ; cela ne prouve pas que le niveau est jouable.