WorldGeneratorModifiers

Advertencia

These docs were written for SpongeAPI 7 and are likely out of date. If you feel like you can help update them, please submit a PR!

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;

public 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) {

    }

}

As you can see, WorldGeneratorModifier has three methods which we override. CatalogType#getId() must be overridden to return a constant and unique identifier for your WorldGeneratorModifier, this is the identifier which will be used in the world configuration to specify which worlds your modifier should be applied to. CatalogType#getName() must be overridden with a constant and simple human-readable name for your modifier.

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

Now that you have created the modifier, all you have to do is register it in the GameRegistry. To do this you need to create a listener for the GameRegistryEvent.Register<WorldGeneratorModifier> event and register your instance there, as shown in the following example:

@Listener
public void onWorldGeneratorModifierRegistration(GameRegistryEvent.Register<WorldGeneratorModifier> event) {
    event.register(new MyModifier());
}

To apply your WorldGeneratorModifier to a world you must add it to the world-generation-modifiers array within the world config file found at config/sponge/worlds/[dimension]/[worldName]/world.conf. For example, to apply the skylands WorldGeneratorModifier to a world you would add the skylands modifier’s id to the modifiers list.

# 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.