Add-on Getting Started/es: Difference between revisions
Translation sync from dragonminez-wiki repository |
Translation sync from dragonminez-wiki repository |
||
| (5 intermediate revisions by the same user not shown) | |||
| Line 32: | Line 32: | ||
Usa exactamente estas versiones (o rangos de versiones compatibles) en el <code>build.gradle</code> o <code>build.gradle.kts</code>, el <code>gradle.properties</code> y el <code>mods.toml</code> de tu addon; si no, tendrás errores de carga de clases y de mixins incompatibles en tiempo de ejecución. DMZ está actualmente en la versión <code>2.2-alpha</code> del mod (<code>gradle.properties</code>). | Usa exactamente estas versiones (o rangos de versiones compatibles) en el <code>build.gradle</code> o <code>build.gradle.kts</code>, el <code>gradle.properties</code> y el <code>mods.toml</code> de tu addon; si no, tendrás errores de carga de clases y de mixins incompatibles en tiempo de ejecución. DMZ está actualmente en la versión <code>2.2-alpha</code> del mod (<code>gradle.properties</code>). | ||
GeckoLib, TerraBlender y Curios son dependencias '''obligatorias''' de DMZ, así que también deben estar en el classpath de ejecución de tu entorno de desarrollo. | |||
GeckoLib, TerraBlender | |||
< | <span id="Incompatible_mods"></span> | ||
== Mods incompatibles == | |||
</ | DMZ se niega a iniciar (lanza una <code>IllegalStateException</code> durante la carga) cuando alguno de estos mods está instalado, y los declara como <code>incompatible</code> en su <code>mods.toml</code>: | ||
DMZ | |||
* Legendary Tooltips (<code>legendarytooltips</code>) | * Legendary Tooltips (<code>legendarytooltips</code>) | ||
* Epic Fight (<code>epicfight</code>) | * Epic Fight (<code>epicfight</code>) | ||
* Better Combat (<code>bettercombat</code>) | * Better Combat (<code>bettercombat</code>) | ||
No dependas de ellos, no los incluyas ni los añadas a tus configuraciones de ejecución de desarrollo. | |||
< | <span id="Pre-release_builds"></span> | ||
== Versiones preliminares == | |||
</ | <code>2.2-alpha</code> es una versión preliminar. Las versiones alpha y beta de DMZ solo dejan entrar a un mundo o servidor a los nombres de usuario de la lista blanca. El nombre de usuario de desarrollo predeterminado de ForgeGradle, <code>Dev</code>, está en la lista blanca, así que <code>runClient</code> funciona sin configurar nada: conserva ese nombre de usuario para tus pruebas locales. | ||
<code>2.2-alpha</code> | |||
< | <span id="Package_layout"></span> | ||
== Estructura de paquetes == | |||
</ | Antes de escribir código de hooks, échale un vistazo a la estructura del código fuente (<code>AI/Context.md</code> en el repositorio de DMZ la documenta en detalle): | ||
* <code>com.dragonminez.client</code>: renderizado, GUI y animación; solo cliente. | |||
* <code>com.dragonminez.common</code>: configuración, estadísticas, red, misiones y deseos; la parte que más tocan los addons. | |||
* <code>com.dragonminez.server</code>: comandos, almacenamiento, generación de mundo y eventos de servidor. | |||
* <code>com.dragonminez.mixin</code>: mixins; evita depender de ellos desde un addon. | |||
* <code>com.dragonminez.client</code>: | Los addons deberían engancharse casi exclusivamente a <code>com.dragonminez.common</code>: es la capa compartida y la más estable. Los únicos hooks del lado del cliente pensados para addons son <code>DMZClientEvent</code> y las ranuras del menú de utilidades (consulta [[Special:MyLanguage/Implementation and Events|Implementación y eventos]]). | ||
* <code>com.dragonminez.common</code>: | |||
* <code>com.dragonminez.server</code>: | |||
* <code>com.dragonminez.mixin</code>: mixins; | |||
< | <span id="Two_integration_styles"></span> | ||
== Dos formas de integración == | |||
</ | # '''Dependencia obligatoria:''' tu addon necesita que DMZ esté presente (<code>mandatory=true</code> en <code>mods.toml</code>). Es la opción más simple, pero tu addon no cargará sin DMZ. | ||
# '''Dependencia opcional:''' tu addon funciona por sí solo y únicamente activa el comportamiento específico de DMZ cuando detecta DMZ. DMZ usa este patrón para sus propias integraciones opcionales (<code>common/compat/WeaponLevelingCompat.java</code>, <code>common/compat/ApotheosisCompat.java</code>): comprueba <code>ModList.get().isLoaded("dragonminez")</code> una sola vez y deja toda clase que importe código de DMZ detrás de esa comprobación. Se recomienda si tu addon aporta algo sin DMZ instalado. Consulta [[Special:MyLanguage/Implementation and Events#Optional dependency pattern|Patrón de dependencia opcional]]. | |||
# ''' | |||
# ''' | |||
< | <span id="What_you_can_safely_rely_on"></span> | ||
== En qué puedes confiar == | |||
</ | * '''Eventos:''' las clases anidadas de <code>com.dragonminez.common.events.DMZEvent</code> (servidor y común) y <code>com.dragonminez.client.events.DMZClientEvent</code> (cliente) son la superficie pública de hooks prevista. Consulta [[Special:MyLanguage/Implementation and Events|Implementación y eventos]] para ver la lista completa. | ||
* '''Estado del jugador de solo lectura:''' <code>StatsCapability</code>, <code>StatsProvider</code> y <code>StatsData</code>, para leer la raza, la forma, las estadísticas y los recursos. | |||
* ''' | * '''Registros de extensión:''' <code>QuestObjectiveRegistry</code> y <code>QuestRewardRegistry</code> (tipos de contenido de misión personalizados), <code>DMZTextPlaceholders</code> (<code>%placeholders%</code> personalizados en textos de misiones y diálogos) y <code>UtilityMenuScreen.addMenuSlot</code> (botones en el menú de utilidades del cliente). | ||
* ''' | * '''Registros:''' <code>MainItems</code>, <code>MainBlocks</code>, <code>MainEntities</code>, <code>MainAttributes</code>, <code>MainEffects</code>, <code>MainEnchants</code> (y las demás clases <code>Main*</code>) en <code>common/init/</code> exponen referencias <code>RegistryObject</code> y <code>DeferredRegister</code> que puedes importar directamente. | ||
* ''' | |||
* ''' | |||
< | <span id="What_to_avoid_relying_on"></span> | ||
== En qué no conviene confiar == | |||
</ | * Los valores que envía el cliente para cualquier cosa relacionada con el progreso. DMZ tampoco confía en ellos; lee la capability del lado del servidor. | ||
* Cambiar campos de <code>StatsData</code> directamente fuera de eventos o comandos. Es preferible reaccionar a los eventos o cancelarlos antes que tocar valores, y usar los comandos existentes de DMZ cuando necesites cambiar algo que pertenece a DMZ. | |||
* | * Registrar paquetes en el canal de red de DMZ. Los ids de paquete de DMZ dependen del orden de registro; usa tu propio canal. | ||
* | * Depender de las clases de <code>com.dragonminez.mixin</code> o de partes internas de DMZ no mencionadas arriba. Pueden cambiar sin aviso entre versiones. | ||
* | |||
* | |||
< | <span id="Next_step"></span> | ||
== Siguiente paso == | |||
</ | Cuando tu entorno de desarrollo compile contra DMZ y veas que lo detecta en tiempo de ejecución, pasa a [[Special:MyLanguage/Implementation and Events|Implementación y eventos]] para conectar los hooks reales y luego a [[Special:MyLanguage/Creating a DMZ Addon|Crear un addon de DMZ]] para la configuración completa de Gradle y <code>mods.toml</code>. | ||
{{Navbox Add-ons}} | {{Navbox Add-ons}} | ||
Latest revision as of 22:26, 13 October 2026
Primeros pasos con addons explica lo que necesitas tener listo antes de conectar tu propio mod de Forge con DragonMineZ: las versiones de las herramientas, los mods que debes evitar y las partes de DMZ en las que un addon puede confiar sin riesgo. Léela antes de Crear un addon de DMZ.
Para quién es
Estas páginas son para desarrolladores de addons de Forge que quieren que el jar de su mod reaccione a DMZ: dar TP extra, escuchar cambios de forma, añadir nuevos tipos de objetivos y recompensas de misiones, agregar botones al menú de utilidades, etc. Si solo quieres ajustar números o añadir razas, formas, misiones o deseos, no necesitas nada de esto; consulta Alcance y requisitos.
DMZ no tiene una API de Java para registrar razas, formas, habilidades o técnicas nuevas: las razas y formas nuevas se añaden con archivos de configuración JSON (consulta Razas personalizadas y Formas personalizadas).
Herramientas necesarias
| Requisito | Versión | Dónde se declara |
|---|---|---|
| Minecraft | 1.20.1 |
gradle.properties
|
| Forge | 47.4.10 (acepta [47,)) |
gradle.properties, mods.toml del addon
|
| ForgeGradle | 6.0.30 |
Plugins de build.gradle.kts
|
| Java | 17 |
Toolchain de build.gradle.kts
|
| Mappings | Parchment 2023.09.03-1.20.1 |
gradle.properties
|
| GeckoLib | 4.8.3+ |
gradle.properties, mods.toml del addon
|
| TerraBlender | 3.0.1.10+ |
gradle.properties, mods.toml del addon
|
| Curios API | 5.14.1+1.20.1 o posterior |
gradle.properties, mods.toml del addon
|
Usa exactamente estas versiones (o rangos de versiones compatibles) en el build.gradle o build.gradle.kts, el gradle.properties y el mods.toml de tu addon; si no, tendrás errores de carga de clases y de mixins incompatibles en tiempo de ejecución. DMZ está actualmente en la versión 2.2-alpha del mod (gradle.properties).
GeckoLib, TerraBlender y Curios son dependencias obligatorias de DMZ, así que también deben estar en el classpath de ejecución de tu entorno de desarrollo.
Mods incompatibles
DMZ se niega a iniciar (lanza una IllegalStateException durante la carga) cuando alguno de estos mods está instalado, y los declara como incompatible en su mods.toml:
- Legendary Tooltips (
legendarytooltips) - Epic Fight (
epicfight) - Better Combat (
bettercombat)
No dependas de ellos, no los incluyas ni los añadas a tus configuraciones de ejecución de desarrollo.
Versiones preliminares
2.2-alpha es una versión preliminar. Las versiones alpha y beta de DMZ solo dejan entrar a un mundo o servidor a los nombres de usuario de la lista blanca. El nombre de usuario de desarrollo predeterminado de ForgeGradle, Dev, está en la lista blanca, así que runClient funciona sin configurar nada: conserva ese nombre de usuario para tus pruebas locales.
Estructura de paquetes
Antes de escribir código de hooks, échale un vistazo a la estructura del código fuente (AI/Context.md en el repositorio de DMZ la documenta en detalle):
com.dragonminez.client: renderizado, GUI y animación; solo cliente.com.dragonminez.common: configuración, estadísticas, red, misiones y deseos; la parte que más tocan los addons.com.dragonminez.server: comandos, almacenamiento, generación de mundo y eventos de servidor.com.dragonminez.mixin: mixins; evita depender de ellos desde un addon.
Los addons deberían engancharse casi exclusivamente a com.dragonminez.common: es la capa compartida y la más estable. Los únicos hooks del lado del cliente pensados para addons son DMZClientEvent y las ranuras del menú de utilidades (consulta Implementación y eventos).
Dos formas de integración
- Dependencia obligatoria: tu addon necesita que DMZ esté presente (
mandatory=trueenmods.toml). Es la opción más simple, pero tu addon no cargará sin DMZ. - Dependencia opcional: tu addon funciona por sí solo y únicamente activa el comportamiento específico de DMZ cuando detecta DMZ. DMZ usa este patrón para sus propias integraciones opcionales (
common/compat/WeaponLevelingCompat.java,common/compat/ApotheosisCompat.java): compruebaModList.get().isLoaded("dragonminez")una sola vez y deja toda clase que importe código de DMZ detrás de esa comprobación. Se recomienda si tu addon aporta algo sin DMZ instalado. Consulta Patrón de dependencia opcional.
En qué puedes confiar
- Eventos: las clases anidadas de
com.dragonminez.common.events.DMZEvent(servidor y común) ycom.dragonminez.client.events.DMZClientEvent(cliente) son la superficie pública de hooks prevista. Consulta Implementación y eventos para ver la lista completa. - Estado del jugador de solo lectura:
StatsCapability,StatsProvideryStatsData, para leer la raza, la forma, las estadísticas y los recursos. - Registros de extensión:
QuestObjectiveRegistryyQuestRewardRegistry(tipos de contenido de misión personalizados),DMZTextPlaceholders(%placeholders%personalizados en textos de misiones y diálogos) yUtilityMenuScreen.addMenuSlot(botones en el menú de utilidades del cliente). - Registros:
MainItems,MainBlocks,MainEntities,MainAttributes,MainEffects,MainEnchants(y las demás clasesMain*) encommon/init/exponen referenciasRegistryObjectyDeferredRegisterque puedes importar directamente.
En qué no conviene confiar
- Los valores que envía el cliente para cualquier cosa relacionada con el progreso. DMZ tampoco confía en ellos; lee la capability del lado del servidor.
- Cambiar campos de
StatsDatadirectamente fuera de eventos o comandos. Es preferible reaccionar a los eventos o cancelarlos antes que tocar valores, y usar los comandos existentes de DMZ cuando necesites cambiar algo que pertenece a DMZ. - Registrar paquetes en el canal de red de DMZ. Los ids de paquete de DMZ dependen del orden de registro; usa tu propio canal.
- Depender de las clases de
com.dragonminez.mixino de partes internas de DMZ no mencionadas arriba. Pueden cambiar sin aviso entre versiones.
Siguiente paso
Cuando tu entorno de desarrollo compile contra DMZ y veas que lo detecta en tiempo de ejecución, pasa a Implementación y eventos para conectar los hooks reales y luego a Crear un addon de DMZ para la configuración completa de Gradle y mods.toml.