Desejos personalizados

From DragonMineZ Wiki
This page is a translated version of the page Custom Wishes and the translation is 100% complete.

Os desejos personalizados mudam o que um dragão concede quando é invocado, só com JSON e sem Java. O JSON dos desejos fica em dois lugares diferentes, conforme o que você quer fazer:

Objetivo Onde Formato
Substituir a lista de desejos de um dragão (Shenlong, Porunga ou um dragão de addon) em um mundo. <world save>/dragonminez/wishes/<dragon_id>.json Um array JSON simples de objetos de desejo.
Distribuir um dragão novo, ou desejos como parte de um pacote distribuível. Um pacote de addon (pasta ou .zip) em <game dir>/dragonballs/ Um objeto JSON com os campos dragon e wishes.

Os dois formatos usam por dentro os mesmos objetos de desejo; só muda o invólucro externo. Datapacks comuns não são lidos para dragões ou desejos: use um pacote de addon. Para saber como os jogadores invocam dragões e escolhem desejos, veja Dragões e desejos.

Como as listas de desejos são combinadas

  1. Primeiro são carregadas as listas de desejos dos pacotes de addon (uma lista por dragão).
  2. Todo dragão conhecido sem lista recebe uma vazia.
  3. Depois, cada arquivo em <world save>/dragonminez/wishes/ substitui a lista inteira do dragão cujo nome está no nome do arquivo.

Campos base de todo desejo

{
  "type": "attributes",
  "name": "wish.shenron.attributes.name",
  "description": "wish.shenron.attributes.desc",
  "amount": 100
}
Campo Tipo O que faz
type Texto Um dos tipos de desejo abaixo.
name Texto Chave de tradução do nome exibido do desejo.
description Texto Chave de tradução da descrição do desejo.
repeatable Booleano Opcional. Dragões que concedem vários desejos (Porunga) deixam o jogador escolher o mesmo desejo mais de uma vez por invocação. Defina como false para permitir o desejo só uma vez. Quando ausente, o desejo pode ser repetido.

Origem: Wish.java (classe base), WishTypeAdapterFactory.java (mapeamento de tipo para classe).

Tipos de desejo

type Campos extras O que faz
item_list_wish items: lista de objetos de item Concede um ou mais itens descritos como objetos de item tipados (veja abaixo). Exemplo: { "type": "item_list_wish", "name": "wish.shenron.senzu.name", "description": "wish.shenron.senzu.desc", "items": [{ "itemType": "generic_item", "itemId": "dragonminez:senzu_bean", "count": 16 }] }
item itemId, count Concede uma pilha de itens. Exemplo: { "type": "item", "name": "...", "description": "...", "itemId": "dragonminez:senzu_bean", "count": 16 }
multi_wish items: lista de { "a": "<item_id>", "b": <count> } Concede várias pilhas de itens. Exemplo: { "type": "multi_wish", "name": "...", "description": "...", "items": [{ "a": "dragonminez:kikono_shard", "b": 32 }, { "a": "minecraft:iron_ingot", "b": 64 }] }
attributes amount Concede amount Atributos, divididos entre Pontos de Atributo e os TP que esses pontos custariam ao jogador naquele momento (veja Estatísticas e atributos). Os desejos Aumento de Poder padrão usam este tipo. Exemplo: { "type": "attributes", "name": "...", "description": "...", "amount": 100 }
attributepoints amount Concede apenas amount Pontos de Atributo. Exemplo: { "type": "attributepoints", "name": "...", "description": "...", "amount": 50 }
tps amount Concede uma quantidade fixa de pontos de treino. Exemplo: { "type": "tps", "name": "...", "description": "...", "amount": 5000 }
skill skill, level Sobe uma habilidade pelo menos até level, por exemplo { "type": "skill", "name": "...", "description": "...", "skill": "kaioken", "level": 2 }. É ignorado se o jogador já estiver nesse nível.
command commands: array de textos, em que %player% é substituído pelo nome do jogador Executa comandos. Exemplo: { "type": "command", "name": "...", "description": "...", "commands": ["effect give %player% minecraft:regeneration 60 1"] }
revive maxTargets (padrão 1) Revive de verdade até maxTargets jogadores mortos, escolhidos na tela de desejos. Veja Outro Mundo.
passivereset Nenhum Redefine os bônus das habilidades passivas raciais (Zenkai, Assimilação e Absorção).
recustomize Nenhum Abre a tela de personalização do personagem.
relocatestats Nenhum Permite ao jogador redistribuir os pontos de estatísticas que gastou.
changedifficulty Nenhum Permite ao jogador escolher de novo a dificuldade da história.
resetstory Nenhum Redefine todo o progresso das missões da história.

item_list_wish é o tipo usado pelos desejos padrão. Cada entrada de items é um objeto de item tipado, então um desejo também pode conceder equipamento encantado, poções ou armaduras com acabamento:

{
  "type": "item_list_wish",
  "name": "wish.shenron.strongest.name",
  "description": "wish.shenron.strongest.desc",
  "items": [
    { "itemType": "enchanted_item", "itemId": "minecraft:diamond_sword", "count": 1, "enchantments": { "minecraft:sharpness": 5 } },
    { "itemType": "potion", "itemId": "minecraft:potion", "count": 1, "potion": "minecraft:strong_healing" }
  ]
}

Os campos de cada objeto de item (generic_item, enchanted_item, enchanted_book, potion, splash_potion, lingering_potion, tipped_arrow, trimmed_armor) estão em Missões personalizadas.

Origem: as classes em src/main/java/com/dragonminez/common/wish/wishes/ e a tabela de despacho em WishTypeAdapterFactory.java.

Substituir os desejos de um dragão

Coloque um arquivo com o id do dragão como nome em <world save>/dragonminez/wishes/, por exemplo shenron.json ou porunga.json. É um array simples, sem objeto invólucro:

[
  {
    "type": "item_list_wish",
    "name": "wish.shenron.senzu.name",
    "description": "wish.shenron.senzu.desc",
    "items": [ { "itemType": "generic_item", "itemId": "dragonminez:senzu_bean", "count": 16 } ]
  },
  {
    "type": "attributes",
    "name": "wish.shenron.attributes.name",
    "description": "wish.shenron.attributes.desc",
    "amount": 100
  },
  {
    "type": "revive",
    "name": "wish.shenron.revive.name",
    "description": "wish.shenron.revive.desc",
    "maxTargets": 3
  }
]
O arquivo substitui a lista inteira Este arquivo substitui completamente a lista de desejos desse dragão; ele não é somado aos desejos dos pacotes de addon. Se você só quer adicionar um desejo e manter o resto, copie primeiro a lista de desejos completa atual do dragão e depois adicione o seu.

Se shenron.json ou porunga.json ainda não existirem, o DragonMineZ os cria com a lista de desejos padrão na primeira vez que os desejos são carregados, então você sempre tem um exemplo funcional para começar. Qualquer outro nome de arquivo que você criar aqui define a lista de desejos desse id de dragão; ela só aparece se existir um dragão com esse id (veja Adicionar um dragão novo).

Cada desejo é verificado quando o arquivo carrega: um type desconhecido ou uma chave desconhecida é reportado no relatório de carregamento de JSON. Um arquivo que não pode ser lido (JSON quebrado, um objeto de item inválido) é ignorado por inteiro e reportado, então o dragão mantém os desejos do pacote de addon até você corrigi-lo.

Origem: WishManager.loadWishes() e loadWishConfig().

Adicionar um dragão novo

Um arquivo de substituição de desejos sozinho só funciona para um id de dragão que já tenha uma definição de dragão (entidade, conjunto de esferas e regras de invocação). Um dragão, conjunto de esferas ou radar novo vem de um pacote de addon em <game dir>/dragonballs/: uma pasta ou um arquivo .zip com esta estrutura:

<pack_name>/
  definitions/
    dragon.json
    ballset.json
    radar.json
    wishes.json
  assets/
    dragon.json
    ballset.json
    radar.json

Os pacotes são carregados em ordem alfabética e combinados por id sobre as definições incluídas: um pacote cujo dragon.json usa um id de dragão existente sobrescreve a definição desse dragão. Dragões, conjuntos de esferas e radares registram sua entidade, blocos e itens quando o jogo inicia, então os novos precisam reiniciar o jogo. Veja Encontrar pastas para o mapa completo de pastas.

Definição do dragão

definitions/dragon.json:

{
  "id": "my_dragon",
  "entity_registry_name": "my_dragon",
  "entity_width": 3.0,
  "entity_height": 17.0,
  "dimensions": ["minecraft:overworld"],
  "ball_set": "my_ball_set",
  "wish_screen_id": "my_dragon",
  "wish_count": 1,
  "asset_definition": "my_dragon"
}
Campo O que faz
id Id do dragão.
entity_registry_name Nome de registro da entidade do dragão (dragonminez:<name>). Mantenha igual ao id: a invocação procura a entidade pelo id do dragão.
entity_width, entity_height Tamanho da entidade.
dimensions Dimensões em que o dragão pode ser invocado.
ball_set Id do conjunto de esferas que o invoca.
wish_screen_id Id da lista de desejos que o dragão oferece (o valor dragon em wishes.json e o nome do arquivo de uma substituição por mundo).
wish_count Quantos desejos são concedidos por invocação.
asset_definition Id opcional de uma entrada de assets/dragon.json (id, renderer_type, model, texture, animation).

Definição do conjunto de esferas

definitions/ballset.json aceita estas chaves: id, dimensions, copies (padrão 5), spawn_range, summon_radius (quão perto as outras esferas precisam estar daquela em que você clica com o botão direito), blocks (número de estrelas para o nome de registro do bloco), asset_definition, display_name e natural_spawn (opcional, padrão true).

  • Um conjunto está completo quando todas as estrelas listadas em blocks estão colocadas dentro de summon_radius, então um conjunto não precisa ter sete esferas.
  • Com "natural_spawn": false, as esferas do conjunto nunca são espalhadas pelo mundo (nem na criação do mundo, nem depois de um desejo, nem com /dmzdragonballs): elas só existem se você mesmo as entregar, por exemplo como recompensas de missões ou de chefes de mundo.

Definição do radar

definitions/radar.json aceita estas chaves: id, item_registry_name, dimensions, ball_set, tooltip_key, ranges, recipe_definition, chip_item, cpu_item, chip_model_item, cpu_model_item, asset_definition e display_name. Um radar com chip_item e cpu_item e sem recipe_definition recebe uma receita de fabricação com esses dois itens. Veja Radar do Dragão para o radar incluído.

Lista de desejos do pacote

definitions/wishes.json usa um objeto invólucro. Este é o formato de pacote de addon, diferente do formato de array por mundo acima:

{
  "dragon": "my_dragon",
  "wishes": [
    { "type": "tps", "name": "wish.my_dragon.tps.name", "description": "wish.my_dragon.tps.desc", "amount": 5000 }
  ]
}

Cada chave destes arquivos é verificada contra as listas acima, e as chaves desconhecidas são reportadas no relatório de carregamento de JSON.

Origem: DragonBallPackManager.java, DragonDefinition.java, DragonBallSetDefinition.java, DragonRadarDefinition.java, DragonWishRegistry.java.

Chaves de tradução

A convenção é wish.<dragon_id>.<wish_key>.name / wish.<dragon_id>.<wish_key>.desc, por exemplo wish.shenron.senzu.name. Adicione estas chaves ao seu en_us.json ou ao seu próprio arquivo de idioma. As traduções personalizadas se combinam com as do Crowdin do mesmo jeito que nas raças personalizadas.

Recarregar e validar

  1. Salve seus arquivos de substituição de desejos em <world save>/dragonminez/wishes/, ou seu pacote de addon em <game dir>/dragonballs/.
  2. Valide a sintaxe JSON (veja Como usar JSON).
  3. Para as substituições por mundo, execute /dmzreload wishes (ou /dmzreload all); veja Recarregar e atualizar mudanças. As listas de desejos dentro dos pacotes de addon são lidas de novo pelo /reload vanilla; execute /dmzreload wishes depois para que as substituições por mundo sejam aplicadas por cima de novo. Dragões, conjuntos de esferas e radares novos precisam de uma reinicialização completa.
  4. Invoque o dragão no jogo e confira se a lista de desejos é a que você espera.