WorldGeneratorModifiers

Pour un bref aperçu du processus de Génération de Mondes dans Sponge, lisez Génération du monde. Maintenant, nous allons montrer comment vous pouvez commencer à faire votre marque sur la génération de mondes.

Tous les plugins qui souhaitent faire des changements à un générateur de mondes doivent enregistrer un WorldGeneratorModifier. Ces modificateurs sont enregistrés globalement avec un id unique, qui doit être ajouté à la config d’un monde par un administrateur du serveur. Avec l’id spécifié dans la config du monde, un WorldGeneratorModifier sera appelé automatiquement lorsque le générateur pour ce monde est mis en place, lui permettant d’effectuer des modifications au générateur.

Création d’un WorldGeneratorModifier

Commençons par le format d’un WorldGeneratorModifier. Tout d’abord, vous avez besoin d’une classe qui implémente l’interface 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) {

    }

}

Comme vous pouvez le voir, WorldGeneratorModifier a trois méthodes que nous réécrivons. CatalogType#getId() doit être réécrit pour retourner un identificateur unique et constant pour votre WorldGeneratorModifier, c’est l’identificateur qui sera utilisé dans la configuration du monde pour spécifier sur quels mondes votre modificateur doit être appliqué. CatalogType#getName() doit être réécrit avec un nom constant et lisible par l’homme simplement pour votre modificateur.

La troisième méthode réécrite est celle où vous apportez vos modifications au générateur de mondes. Cette méthode est appelée par l’implémentation lorsqu’il crée le générateur de mondes pour un monde qui a spécifié que votre WorldGeneratorModifier doit être appliqué.

Le WorldProperties et un DataContainer de propriétés additionnelles pour le monde sont passés à cette méthode afin de donner un contexte à vos modifications. Par exemple, vous pouvez utiliser le WorldProperties pour seulement appliquer vos modifications de générateur aux mondes Nether.

Entregistrement d’un WorldGeneratorModifier

Maintenant que vous avez créé notre modificateur, vous devez l’enregistrer. Un bom moment pour faire cela est durant l’état INITIALIZATION. Pour l’enregistrer, appelez simplement GameRegistry#register(Class, T) avec WorldGeneratorModifier.class comme premier argument et votre modificateur comme le second.

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

Pour appliquer votre WorldGeneratorModifier à un monde vous devez l’ajouter au tableau world-generation-modifiers à l’intérieur du fichier de configuration du monde, trouvé à config/sponge/worlds/[dimension]/[worldName]/world.conf. Par exemple pour appliquer le WorldGeneratorModifier skylands à un monde vous ajouteriez l’id du modificateur skylands à la liste de modificateurs.

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

Notez que la liste world-generation-modifiers peut ne pas être là, comme par défaut il n’y a aucun modificateur appliqué à un monde et donc la valeur n’est pas créée quand le fichier de configuration est créé.

Dans les prochains articles, nous allons examiner plus profondément les changements que nous pouvons faire avec notre WorldGeneratorModifier.