WorldGeneratorModifiers

Para una breve descripción del proceso de Generación de Mundo en Sponge, por favor lea Generación de Mundo. Ahora, vamos a mostrar como puede comenzar a dejar huella en la generación de mundo.

Todos los complementos que deseen realizar cambios en un generador de mundos deben registrar un WorldGeneratorModifier. Estas modificaciones son globalmente registradas con una única identificación, la cual debe agregarse a la configuración de un mundo por un administrador del servidor. Con la identificación especificada en el la configuración de mundo, un WorldGeneratorModifier será automáticamente llamado cuando el generador para ese mundo esté configurado, permitiendo realizar cambios en el generador.

Creación de un WorldGeneratorModifier

Comencemos con el formato de un WorldGeneratorModifier. En primer lugar, necesita una clase que implemente la interfaz WorldGeneratorModifier:

import org.spongepowered.api.world.storage.WorldProperties;

private class MyModifier implements WorldGeneratorModifier {

    @Override
    public String getId() {
        return "pluginid:mymodifier";
    }

    @Override
    public String getName() {
        return "My Modifier";
    }

    @Override
    public void modifyWorldGenerator(WorldProperties world, DataContainer settings, WorldGenerator worldGenerator) {

    }

}

Como puede ver, WorldGeneratorModifier tiene tres métodos que remplazamos. CatalogType#getId() debe ser remplazado para devolver una identificador constante y única para su WorldGeneratorModifier, este es el identificador que será utilizado en la configuración de mundo para especificar a que mundos se debe aplicar su modificador. CatalogType#getName() debe remplazarse con un nombre constante y simple, legible para el usuario, para su modificador.

El tercer método remplazado es donde realiza sus cambios para el generador de mundo. Este método es llamado para la implementación cuando se está creando el generador de mundo para un mundo que ha especificado que debe aplicar su WorldGeneratorModifier.

Las WorldProperties y un DataContainer de propiedades adicionales para el mundo son pasadas para este método en orden para dar contexto a sus cambios. Por ejemplo, puede utilizar el WorldProperties solo para aplicar sus cambios del generador a mundos inferiores.

Registro de un WorldGeneratorModifier

Ahora que ha creado nuestro modificador, necesita registrarlo. Un buen momento para hacer esto es durante el estado INICIALIZACIÓN. Para registrarlo, simplemente llame a GameRegistry#register(Class, T) con WorldGeneratorModifier.class como el primer argumento y su modificador como el segundo.

@Listener
public void onGameInitialization(GameInitializationEvent event) {
    Sponge.getRegistry().register(WorldGeneratorModifier.class , new MyModifier());
}

Para aplicar su WorldGeneratorModifier a un mundo, debe agregarlo a la matriz world-generation-modifiers dentro del archivo de configuración del mundo en config/sponge/worlds/[dimension]/[worldName]/world.conf. Por ejemplo, para aplicar el WorldGeneratorModifier skylands a un mundo debe agregar la identificación del modificador de skylands a la lista de modificadores.

# WorldGenerationModifiers to apply to the world
world-generation-modifiers=[
"sponge:skylands"
]

Tenga en cuenta que la lista``world-generation-modifiers`` puede no estar allí, ya que por defecto no hay modificadores aplicados a un mundo y por lo tanto, el valor no es creado cuando el archivo de configuración se crea.

En los próximos artículos veremos más a fondo los cambios que podemos realizar desde nuestro WorldGeneratorModifier.