Saltar para o conteúdo principal

Empacotar conteúdo personalizado para o EternalTD

O EternalTD carrega conteúdo personalizado das pastas abaixo. As importações ZIP usam o importador partilhado do MagmaCore; os metadados do pacote controlam a apresentação em /etd setup.

Pasta de importação​

As importações manuais passam por:

plugins/EternalTD/imports/

Após importar conteúdo manualmente, execute:

/etd reload

Pastas de conteúdo oficiais​

O plugin atual procura conteúdo nestas pastas em minúsculas:

plugins/EternalTD/levels/
plugins/EternalTD/waves/
plugins/EternalTD/npcs/
plugins/EternalTD/worlds/

Sobre nomes antigos:

  • Levels/ e NPCs/ são nomes de versões anteriores.
  • O EternalTD migra-os para levels/ e npcs/ no arranque e recarregamento.

Regras de empacotamento de mundos​

O EternalTD trata os mundos em:

plugins/EternalTD/worlds/

como mundos de origem para as instâncias.

Quando um jogador inicia um nível, o EternalTD copia o mundo correspondente para a pasta de mundos do servidor e executa a sessão nessa cópia.

A raiz do mundo de origem é validada antes da cópia; os ficheiros e subpastas são verificados durante a cópia. Uma falha elimina a cópia parcial. A cópia é recusada se:

  • não existir level.dat na raiz
  • a pasta de origem for uma ligação simbólica ou contiver qualquer ligação simbólica
  • existir um ficheiro chamado .eternaltd-instance

Este último nome está reservado. O EternalTD escreve-o nas cópias usadas em execução como marcador de propriedade e verifica a identidade e a propriedade da instância antes da limpeza. Nunca o inclua num mundo empacotado.

Na prática:

  • coloque os mundos de origem em plugins/EternalTD/worlds/
  • não use as cópias criadas durante as sessões como originais do conteúdo distribuído
  • os mundos de origem devem estar em subpastas diretas de worlds/; nomes que contenham qualquer . são excluídos da deteção
  • os nomes também não podem conter separadores de caminho, : ou caracteres de controlo e devem corresponder exatamente ao worldName do nível

O hub oficial é uma exceção e é acompanhado diretamente na pasta de mundos do servidor como:

etd_spawn

O que permite ativar e desativar um pacote​

Só é possível ativar e desativar um pacote em /etd setup se este disponibilizar ficheiros de configuração acompanhados.

Os campos de recursos acompanhados são:

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

Na prática:

  • pacotes de níveis, vagas e NPCs podem ser ativados ou desativados alterando isEnabled nos respetivos ficheiros YAML
  • os ficheiros são procurados recursivamente pelo nome, pelo que podem estar em subpastas de levels/, waves/ e npcs/
  • conteúdo partilhado da pasta de mundos e pacotes de recursos apenas com marcador não podem ser ativados e desativados da mesma forma

Campos de metadados dos pacotes​

O modelo atual de configuração aceita:

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

Para mostrar conteúdo personalizado no menu, coloque o YAML de metadados diretamente em plugins/EternalTD/content_packages/ ou inclua-o na pasta content_packages/ do ZIP (consulte a Estrutura do ZIP). Indique os nomes reais dos ficheiros e mundos e pelo menos um recurso acompanhado. Uma lista de recursos vazia nunca conta como transferida. O campo isEnabled do pacote por si só não desativa os seus níveis: o controlo do menu escreve esse campo em cada ficheiro acompanhado de nível, vagas e NPC, guarda o campo do pacote e reinicia o EternalTD.

Existe ainda markerFallbackFolders, que lista pastas em plugins/ cuja presença não vazia também conta como instalação. Serve para conteúdo que pode chegar ao servidor sem o processo de transferência escrever um marcador. Este campo só é definido no código; escrevê-lo no YAML do pacote não tem efeito.

Empacotamento de modelos​

O pacote atual EternalTD Custom Models é acompanhado por um ficheiro marcador, em vez de ficheiros de configuração EternalTD normais.

Assim:

  • o EternalTD consegue acompanhar a transferência do pacote de modelos partilhado
  • os modelos propriamente ditos ficam no FreeMinecraftModels quando o FMM está instalado
  • a remoção é manual, seguida de /etd reload

Estrutura do ZIP​

Coloque as pastas reconhecidas diretamente na raiz do arquivo, sem uma pasta exterior. Uma estrutura mínima é:

pack.meta
levels/my_level.yml
waves/my_waves.yml
npcs/my_npc.yml
worlds/my_world/level.dat
worlds/my_world/region/...

O texto simples em pack.meta é eternaltd. Um ZIP sem esse ficheiro usa a plataforma do plugin que o importa; uma pasta extraída só é processada se contiver pack.meta. Coloque os ficheiros .zip na pasta de importação e recarregue.

Entrada na raiz do arquivoDestino
levels, waves, npcs, worldsPastas correspondentes em plugins/EternalTD/
content_packagesplugins/EternalTD/content_packages/; metadados do pacote que o listam em /etd setup
content_markersplugins/EternalTD/content_markers/; marcadores de instalação com o nome <markerFileName>.marker
worldcontainerPasta de mundos do servidor, para mundos partilhados como etd_spawn
models, modelenginePasta de modelos do FMM se estiver ativo; caso contrário, blueprints do ModelEngine se estiver ativo; caso contrário, pasta do FMM para utilização posterior
scriptsplugins/FreeMinecraftModels/scripts/
freeminecraftmodels, elitemobs, betterstructuresPasta de dados desse plugin (plugins/FreeMinecraftModels/, plugins/EliteMobs/, plugins/BetterStructures/); organize o conteúdo como nessa pasta

O destino de modelos do FMM usa a pasta antiga Models se existir; caso contrário, usa models; uma pasta freeminecraftmodels/models no arquivo é fundida na mesma pasta. Qualquer importação para as pastas do FMM desencadeia o recarregamento do conteúdo importado do FMM, se este estiver ativo. O conteúdo colocado na pasta do BetterStructures desencadeia um recarregamento de conteúdo do BetterStructures quando este terminar o arranque.

O importador corre antes de o EternalTD carregar content_packages/, por isso o YAML de um pacote incluído no ZIP aparece em /etd setup depois do recarregamento que o importa. Um marcador incluído em content_markers/ conta como o recurso de marcador do pacote, pelo que esse recurso aparece como presente sem passar pelo processo de transferência do menu de configuração. O pacote continua a precisar dos restantes ficheiros acompanhados para contar como transferido.

Uma entrada de raiz desconhecida faz rejeitar o arquivo antes da instalação. O importador conserva os ZIPs com falhas para nova tentativa e tenta restaurar os destinos alterados por esse arquivo; consulte os erros de restauro nos registos antes de repetir. Substituir um mundo partilhado descarrega primeiro o mundo anterior da memória: os jogadores que lá estejam são movidos para o spawn de outro mundo carregado. Se um jogador não puder ser movido ou o mundo se recusar a descarregar, o arquivo é conservado para nova tentativa. As importações bem-sucedidas eliminam o ZIP; isso não confirma que o nível seja jogável.