Skip to content

Latest commit

 

History

History
146 lines (108 loc) · 5.34 KB

File metadata and controls

146 lines (108 loc) · 5.34 KB

Первый мод за 10 минут

К концу руководства — рабочий мод, который:

  • подключается к платформе по BOM;
  • реализует VidaMod с подпиской на LatidoPulso;
  • регистрирует пример блока через RegistroBloques;
  • читает настройку из Ajustes типизированно.

Нужно: dev-окружение (JDK 21, Gradle).

1. Проект

Опора — templates/starter-mod: скопируйте каталог, задайте vida.platform.version / vida.plugin.version в gradle.properties (как в шаблоне) и при необходимости переименуйте id мода, пакет и класс entrypoint.

Альтернатива: свой Gradle-проект с плагином id("dev.vida.mod") — см. dev-environment, вариант B и modder-toolkit.

2. Точка входа

src/main/java/com/ejemplo/miaventura/MiAventura.java:

package com.ejemplo.miaventura;

import dev.vida.base.ModContext;
import dev.vida.base.VidaMod;
import dev.vida.base.latidos.Prioridad;
import dev.vida.base.latidos.eventos.LatidoPulso;

public final class MiAventura implements VidaMod {

    @Override
    public void iniciar(ModContext ctx) {
        ctx.log().info("¡Hola, {} v{}!", ctx.metadata().nombre(), ctx.version());

        ctx.latidos().suscribir(LatidoPulso.TIPO, Prioridad.NORMAL, pulso -> {
            if (pulso.tickActual() % 20L == 0L) {
                ctx.log().debug("tick de un segundo: {}", pulso.tickActual());
            }
        });
    }
}

VidaMod.iniciar вызывается один раз после загрузки классов мода. Подписки на Latidos и регистрация в Catalogo — обычно здесь. См. VidaMod.

3. Манифест

Плагин dev.vida.mod генерирует vida.mod.json в ресурсы; при injectDefaultVidaDependency в зависимости подставляется vida (диапазон — см. modder-toolkit). Пример vida { mod { ... } } (идентично идее шаблона):

vida {
    injectDefaultVidaDependency.set(true)
    mod {
        id.set("miaventura")
        displayName.set("Mi Aventura")
        description.set("Ejemplo")
        authors.add("Ana")
        license.set("Apache-2.0")
        entrypoint.set("com.ejemplo.miaventura.MiAventura")
    }
}
./gradlew vidaGenerateManifest vidaValidateManifest build

Итоговый фрагмент (точные поля зависят от версии плагина — детали в схеме vida.mod.json):

{
  "schema": 1,
  "id": "miaventura",
  "version": "0.1.0",
  "name": "Mi Aventura",
  "authors": [{ "name": "Ana" }],
  "entrypoints": { "main": "com.ejemplo.miaventura.MiAventura" },
  "dependencies": {
    "required": { "vida": "^1.0.0" }
  },
  "vifada": { "morphs": [] }
}

4. Блок (vida-bloque)

Реестр блоков — RegistroBloques поверх Catalogo, не сырой Catalogo без обёртки.

import dev.vida.bloque.Bloque;
import dev.vida.bloque.MaterialBloque;
import dev.vida.bloque.PropiedadesBloque;
import dev.vida.bloque.registro.RegistroBloques;
import dev.vida.core.Identifier;

// dentro de iniciar:
RegistroBloques registro = RegistroBloques.conectar(ctx.catalogos(), "miaventura");
Bloque roca = new Bloque(
    Identifier.of("miaventura", "piedra_santa"),
    PropiedadesBloque.con(MaterialBloque.PIEDRA).dureza(2.0f).construir());
registro.registrarOExigir(roca);

В build.gradle.kts к зависимостям добавьте (через тот же BOM, что и base):

compileOnly("dev.vida:bloque")

5. Настройка (Ajustes)

import dev.vida.base.ajustes.Ajuste;

int distancia = ctx.ajustes().valor(
    Ajuste.entero("render.distance", 32).min(2).max(64)
);

run/config/miaventura.toml (путь к профилю может отличаться в зависимости от лаунчера):

[render]
distance = 48

Подробнее: guides/ajustes.md.

6. Запуск

./gradlew vidaRun

vidaRun — задача плагина: клиент/агент и mods настраиваются в DSL (см. gradle-plugin). В логе должна появиться строка инициализации мода.

7. Дальше

  • Latidos — приоритеты, Ejecutor, аннотации.
  • CatalogoCatalogoClave, freeze.
  • Ajustes — профили, синхронизация.
  • Vifada — Vifada-морфы.
  • API stability@Stable / @Preview / @Internal.

Шаблон с исходниками: templates/starter-mod.