Aller au contenu principal

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/ et NPCs/ sont des noms de dossiers hérités.
  • EternalTD les migre désormais vers levels/ et npcs/ 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 au worldName du 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 :

  • levelFiles
  • waveFiles
  • npcFiles
  • worldFolders
  • worldContainerFolders
  • markerFileName

En pratique :

  • les paquets de niveaux, de vagues et de NPC peuvent être activés ou désactivés en écrivant isEnabled dans ces fichiers YAML
  • les noms de fichiers suivis sont recherchés récursivement, les sous-dossiers de levels/, waves/ et npcs/ 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 :

  • isEnabled
  • name
  • description
  • downloadLink
  • version
  • nightbreakSlug
  • levelFiles
  • waveFiles
  • npcFiles
  • worldFolders
  • worldContainerFolders
  • markerFileName
  • category
  • toggleable

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'archiveDestination
levels, waves, npcs, worldsDossiers correspondants sous plugins/EternalTD/
content_packagesplugins/EternalTD/content_packages/ ; métadonnées de pack qui font apparaître le pack dans /etd setup
content_markersplugins/EternalTD/content_markers/ ; marqueurs d'installation nommés <markerFileName>.marker
worldcontainerConteneur de mondes du serveur ; utilisé pour les mondes partagés comme etd_spawn
models, modelengineDossier 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
scriptsplugins/FreeMinecraftModels/scripts/
freeminecraftmodels, elitemobs, betterstructuresDossier 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.