Croparia IF Docs

|

General

Section
Desarrolladores
9 TOP-LEVEL ITEMS
    Desarrolladores
    Módulos centrales

      Transmutador de cultivos

    Generación de datos en tiempo de ejecución

Añadir entradas del generador

Una entrada del generador (DgEntry) proporciona valores de datos de plantilla mediante un resolvedor de placeholders (Placeholder), y el script del generador la selecciona a través de un conjunto de entradas (DgRegistry).

Si quieres añadir tu propio tipo de entrada, normalmente necesitas:

  • una clase de entrada personalizada
  • un registro correspondiente
  • un resolvedor de placeholders
  • y, por último, registrar el conjunto para que el sistema del generador pueda descubrirlo

Si todavía no has visto la estructura general, empieza por Generación de datos en tiempo de ejecución (desarrollador). Si prefieres diseñar primero el acceso a campos y conectar las entradas después, también puedes comenzar por Crear resolvedores de placeholders.

Crear la clase de entrada

public class MyEntry implements DgEntry {
    private final Identifier id;
 
    @Override
    public Identifier getKey() {
        return this.id;
    }
 
    @Override
    public boolean shouldLoad() {
        return true;
    }
    
    // ...
}

Conectar un resolvedor de placeholders

El resolvedor de placeholders convierte los datos en tiempo de ejecución de la entrada en valores que pueden rellenar una plantilla. Consulta Crear resolvedores de placeholders para el diseño completo. Aquí el objetivo es solo mostrar cómo conectarlo a una entrada.

public class MyEntry implements DgEntry {
    public static final Placeholder<MyEntry> PLACEHOLDER = Placeholder.build(node -> node.then(
        PatternKey.literal("example"), TypeMapper.of(MyEntry::getExample), Placeholder.STRING
    ).concat(DgEntry.PLACEHOLDER, TypeMapper.of(myEntry -> myEntry)));
    
    private final String example;
    
    public String getExample() {
        return this.example;
    }
    
    public Placeholder<? extends MyEntry> placeholder() {
        return PLACEHOLDER;
    }
    
    // ...
}

Nota: si tu clase de entrada extiende otra entrada, no olvides fusionar también el resolvedor del tipo padre. Como mínimo, eso suele significar incluir DgEntry.PLACEHOLDER.

Crear el registro de entradas

Puedes crear tu propia subclase de DgRegistry<MyEntry>, o usar utilidades como DgRegistry.ofEnum(...) y DgRegistry.ofMap(...).

Una vez creado, regístralo en la API:

static DgRegistry MY_REGISTRY = DgRegistry.ofMap(Map.of(
    Identifier.of("modid:my_entry_1"), new MyEntry(...),
    Identifier.of("modid:my_entry_2"), new MyEntry(...),
    Identifier.of("modid:my_entry_3"), new MyEntry(...)
    // ...
));
static {
    DgRegistry.register(Identifier.of("modid:my_registry"), MY_REGISTRY);
}

Después de eso, el script del generador puede iterar sobre todo el conjunto de entradas simplemente usando el ID de su registro:

registry = "modid:my_registry"
# ...

Cuando la entrada y su registro ya están listos, el siguiente paso habitual es hacer que un generador de datos personalizado los consuma de verdad.

In This Page
Añadir entradas del generador
NO EXTRACTED HEADINGS