Desejos personalizados
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
- Primeiro são carregadas as listas de desejos dos pacotes de addon (uma lista por dragão).
- Todo dragão conhecido sem lista recebe uma vazia.
- 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
}
]
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
blocksestão colocadas dentro desummon_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
- Salve seus arquivos de substituição de desejos em
<world save>/dragonminez/wishes/, ou seu pacote de addon em<game dir>/dragonballs/. - Valide a sintaxe JSON (veja Como usar JSON).
- 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/reloadvanilla; execute/dmzreload wishesdepois 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. - Invoque o dragão no jogo e confira se a lista de desejos é a que você espera.