Deseos personalizados
Los deseos personalizados cambian lo que concede un dragón al invocarlo, solo con JSON y sin Java. El JSON de los deseos está en dos lugares distintos, según lo que quieras hacer:
| Objetivo | Dónde | Formato |
|---|---|---|
| Reemplazar la lista de deseos de un dragón (Shenron, Porunga o un dragón de un addon) en un mundo. | <world save>/dragonminez/wishes/<dragon_id>.json |
Un array JSON simple de objetos de deseo. |
| Distribuir un dragón nuevo, o deseos como parte de un paquete distribuible. | Un paquete de addon (carpeta o .zip) en <game dir>/dragonballs/ |
Un objeto JSON con los campos dragon y wishes.
|
Ambos formatos usan por dentro los mismos objetos de deseo; solo cambia el contenedor exterior. Los datapacks normales no se leen para dragones ni deseos: usa un paquete de addon. Para ver cómo los jugadores invocan dragones y eligen deseos, consulta Dragones y deseos.
Cómo se combinan las listas de deseos
- Primero se cargan las listas de deseos de los paquetes de addon (una lista por dragón).
- Cada dragón conocido que no tenga lista recibe una vacía.
- Después, cada archivo de
<world save>/dragonminez/wishes/reemplaza la lista completa del dragón cuyo nombre lleva el archivo.
Campos base de todo deseo
{
"type": "attributes",
"name": "wish.shenron.attributes.name",
"description": "wish.shenron.attributes.desc",
"amount": 100
}
| Campo | Tipo | Qué hace |
|---|---|---|
type |
Texto | Uno de los tipos de deseo de abajo. |
name |
Texto | Clave de traducción del nombre que se muestra del deseo. |
description |
Texto | Clave de traducción de la descripción del deseo. |
repeatable |
Booleano | Opcional. Los dragones que conceden varios deseos (Porunga) permiten que un jugador elija el mismo deseo más de una vez por invocación. Ponlo en false para permitir el deseo una sola vez. Si no está, el deseo se puede repetir.
|
Origen: Wish.java (clase base), WishTypeAdapterFactory.java (asignación de tipo a clase).
Tipos de deseo
type |
Campos extra | Qué hace |
|---|---|---|
item_list_wish |
items: lista de objetos de ítem |
Concede uno o más objetos descritos como objetos de ítem con tipo (ver abajo). Ejemplo: { "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 una pila de objetos. Ejemplo: { "type": "item", "name": "...", "description": "...", "itemId": "dragonminez:senzu_bean", "count": 16 }
|
multi_wish |
items: lista de { "a": "<item_id>", "b": <count> } |
Concede varias pilas de objetos. Ejemplo: { "type": "multi_wish", "name": "...", "description": "...", "items": [{ "a": "dragonminez:kikono_shard", "b": 32 }, { "a": "minecraft:iron_ingot", "b": 64 }] }
|
attributes |
amount |
Concede amount Atributos, repartidos entre Puntos de Atributo y los TP que esos puntos le costarían al jugador en ese momento (consulta Estadísticas y atributos). Lo usan los deseos Aumento de Poder por defecto. Ejemplo: { "type": "attributes", "name": "...", "description": "...", "amount": 100 }
|
attributepoints |
amount |
Concede solo amount Puntos de Atributo. Ejemplo: { "type": "attributepoints", "name": "...", "description": "...", "amount": 50 }
|
tps |
amount |
Concede una cantidad fija de Puntos de Entrenamiento. Ejemplo: { "type": "tps", "name": "...", "description": "...", "amount": 5000 }
|
skill |
skill, level |
Sube una habilidad al menos hasta level, por ejemplo { "type": "skill", "name": "...", "description": "...", "skill": "kaioken", "level": 2 }. Se ignora si el jugador ya tiene ese nivel.
|
command |
commands: array de textos, donde %player% se reemplaza por el nombre del jugador |
Ejecuta comandos. Ejemplo: { "type": "command", "name": "...", "description": "...", "commands": ["effect give %player% minecraft:regeneration 60 1"] }
|
revive |
maxTargets (por defecto 1) |
Revive de verdad hasta maxTargets jugadores muertos, elegidos en la pantalla de deseos. Consulta Otro Mundo.
|
passivereset |
Ninguno | Reinicia las bonificaciones de las habilidades pasivas raciales (Zenkai, Asimilación y Absorción). |
recustomize |
Ninguno | Abre la pantalla de personalización del personaje. |
relocatestats |
Ninguno | Permite al jugador redistribuir los puntos de estadísticas que gastó. |
changedifficulty |
Ninguno | Permite al jugador volver a elegir la dificultad de la historia. |
resetstory |
Ninguno | Reinicia todo el progreso de las misiones de la historia. |
item_list_wish es el tipo que usan los deseos por defecto. Cada entrada de items es un objeto de ítem con tipo, así que un deseo también puede conceder equipo encantado, pociones o armaduras con adornos:
{
"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" }
]
}
Los campos de cada objeto de ítem (generic_item, enchanted_item, enchanted_book, potion, splash_potion, lingering_potion, tipped_arrow, trimmed_armor) están en Misiones personalizadas.
Origen: las clases de src/main/java/com/dragonminez/common/wish/wishes/ y la tabla de despacho de WishTypeAdapterFactory.java.
Reemplazar los deseos de un dragón
Coloca un archivo con el id del dragón como nombre en <world save>/dragonminez/wishes/, por ejemplo shenron.json o porunga.json. Es un array simple, sin objeto contenedor:
[
{
"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
}
]
Si shenron.json o porunga.json todavía no existen, DragonMineZ los crea con la lista de deseos por defecto la primera vez que se cargan los deseos, así siempre tienes un ejemplo funcional para empezar. Cualquier otro nombre de archivo que crees aquí define la lista de deseos de ese id de dragón; solo aparece si existe un dragón con ese id (consulta Añadir un dragón nuevo).
Cada deseo se comprueba al cargar el archivo: un type desconocido o una clave desconocida se informa en el reporte de carga de JSON. Un archivo que no se puede analizar (JSON roto, un objeto de ítem no válido) se omite entero y se informa, así que el dragón conserva los deseos de su paquete de addon hasta que lo corrijas.
Origen: WishManager.loadWishes() y loadWishConfig().
Añadir un dragón nuevo
Un archivo de reemplazo de deseos por sí solo únicamente funciona para un id de dragón que ya tenga una definición de dragón (entidad, conjunto de esferas y reglas de invocación). Un dragón, conjunto de esferas o radar nuevo viene de un paquete de addon en <game dir>/dragonballs/: una carpeta o un archivo .zip con esta estructura:
<pack_name>/
definitions/
dragon.json
ballset.json
radar.json
wishes.json
assets/
dragon.json
ballset.json
radar.json
Los paquetes se cargan en orden alfabético y se combinan por id sobre las definiciones incluidas: un paquete cuyo dragon.json usa un id de dragón existente sobrescribe la definición de ese dragón. Los dragones, conjuntos de esferas y radares registran su entidad, bloques y objetos al iniciar el juego, así que los nuevos necesitan reiniciar el juego. Consulta Encontrar carpetas para ver el mapa completo de carpetas.
Definición del dragón
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 | Qué hace |
|---|---|
id |
Id del dragón. |
entity_registry_name |
Nombre de registro de la entidad del dragón (dragonminez:<name>). Mantenlo igual a id: la invocación busca la entidad por el id del dragón.
|
entity_width, entity_height |
Tamaño de la entidad. |
dimensions |
Dimensiones en las que se puede invocar al dragón. |
ball_set |
Id del conjunto de esferas que lo invoca. |
wish_screen_id |
Id de la lista de deseos que ofrece el dragón (el valor dragon en wishes.json y el nombre de archivo de un reemplazo por mundo).
|
wish_count |
Cuántos deseos se conceden por invocación. |
asset_definition |
Id opcional de una entrada de assets/dragon.json (id, renderer_type, model, texture, animation).
|
Definición del conjunto de esferas
definitions/ballset.json acepta estas claves: id, dimensions, copies (por defecto 5), spawn_range, summon_radius (qué tan cerca deben estar las demás esferas de la que haces clic derecho), blocks (número de estrellas a nombre de registro del bloque), asset_definition, display_name y natural_spawn (opcional, por defecto true).
- Un conjunto está completo cuando todas las estrellas listadas en
blocksestán colocadas dentro desummon_radius, así que un conjunto no tiene por qué tener siete esferas. - Con
"natural_spawn": false, las esferas del conjunto nunca se reparten por el mundo (ni al crear el mundo, ni después de un deseo, ni con/dmzdragonballs): solo existen si las entregas tú, por ejemplo como recompensas de misiones o de jefes de mundo.
Definición del radar
definitions/radar.json acepta estas claves: id, item_registry_name, dimensions, ball_set, tooltip_key, ranges, recipe_definition, chip_item, cpu_item, chip_model_item, cpu_model_item, asset_definition y display_name. Un radar con chip_item y cpu_item y sin recipe_definition recibe una receta de fabricación con esos dos objetos. Consulta Radar del Dragón para ver el radar incluido.
Lista de deseos del paquete
definitions/wishes.json usa un objeto contenedor. Es el formato de paquete de addon, distinto del formato de array por mundo de arriba:
{
"dragon": "my_dragon",
"wishes": [
{ "type": "tps", "name": "wish.my_dragon.tps.name", "description": "wish.my_dragon.tps.desc", "amount": 5000 }
]
}
Cada clave de estos archivos se comprueba contra las listas de arriba, y las claves desconocidas se informan en el reporte de carga de JSON.
Origen: DragonBallPackManager.java, DragonDefinition.java, DragonBallSetDefinition.java, DragonRadarDefinition.java, DragonWishRegistry.java.
Claves de traducción
La convención es wish.<dragon_id>.<wish_key>.name / wish.<dragon_id>.<wish_key>.desc, por ejemplo wish.shenron.senzu.name. Añade estas claves a tu en_us.json o a tu propio archivo de idioma. Las traducciones personalizadas se combinan con las de Crowdin igual que en las razas personalizadas.
Recargar y validar
- Guarda tus archivos de reemplazo de deseos en
<world save>/dragonminez/wishes/, o tu paquete de addon en<game dir>/dragonballs/. - Valida la sintaxis JSON (consulta Cómo usar JSON).
- Para los reemplazos por mundo, ejecuta
/dmzreload wishes(o/dmzreload all); consulta Recargar y actualizar cambios. Las listas de deseos de los paquetes de addon se vuelven a leer con el/reloadde vanilla; después ejecuta/dmzreload wishespara que los reemplazos por mundo se vuelvan a aplicar encima. Los dragones, conjuntos de esferas y radares nuevos necesitan un reinicio completo. - Invoca al dragón en el juego y comprueba que la lista de deseos sea la que esperas.