Génération du monde

La génération des mondes dans Minecraft est un processus compliqué, et Sponge ajoute aussi sa propre complication. Ici, nous fournissons un aperçu basique de comment cela fonctionne pour le lecteur intéressé. Vous pouvez choisir de passer ceci et d’aller directement aux détails de l’API à:

Un aperçu de la Génération de Mondes dans Minecraft

La génération dans Minecraft est basée sur des chunks. Lorsque le jeu demande un chunk qui n’existe pas une requête est envoyée au générateur de monde pour qu’il fournisse ce chunk. Le processus qui fournit le chunk est divisé en 2 phases distinctes appelées Génération et Population.

La Phase de Génération

La première phase dans la fourniture d’un chunk est la Phase de Génération. C’est principalement responsable de la création de la forme du terrain de base, la génération des biomes, et de plus grandes fonctionnalités telles que les villages et les grottes.

Note

Le placement de blocs dans la phase de génération se déroule entièrement dans une mémoire tampon, comme l’objet Chunk n’est pas créé jusqu’à la dernière étape de la phase.

La première étape consiste pour le générateur de biomes à remplir un tampon de biomes 2D avec les biomes qui correspondront à chaque colonne de 1x1 à l’intérieur du chunk. Ensuite, le GenerationPopulator de base crée la forme basique du terrain. À ce stade, le monde est entièrement fait de pierre. La génération par défaut est simplement une heightmap générée à partir de bruit de perlin, puis remplie - laissant de l’air si la hauteur est plus élevée que le niveau de la mer, et de l’eau si elle est en-dessous. Cette étape peut être remplacée en appelant WorldGenerator#setBaseGenerationPopulator(GenerationPopulator) pour fournir votre propre populateur personnalisé au générateur de mondes.

Ensuite, à l’aide de la mémoire tampon de biomes créée ci-dessus, le générateur remplace les couches supérieures du terrain avec les BlockStates et les profondeurs spécifiées par les GroundCoverLayers des biomes. Les biomes sont fournis par un BiomeGenerator - qui peut également être appliqué au générateur de mondes avec la méthode WorldGenerator#setBiomeGenerator(BiomeGenerator).

Maintenant que le terrain de base a été généré et est prêt, nous passons à travers les GenerationPopulators. Ils viennent en deux groupes : ceux spécifiés globalement pour le générateur de mondes, et ceux spécifiés pour un biome spécifique. L’ensemble des GenerationPopulators utilisés est l’union des GenerationPopulators spécifiés pour chacun des biomes uniques à l’intérieur du chunk.

Les GenerationPopulators sont conçus pour les grandes opérations intensives, et sont appliqués à la mémoire tampon plutôt qu’à l’objet Chunk (encore inexistant). Cela signifie qu’il doit y avoir la restriction que les GenerationPopulators ne peuvent pas placer quelconque bloc à l’extérieur de l’enceinte du chunk en train d’être généré. Le contenu généré par un GenerationPopulator qui s’étend sur plusieurs chunks doit générer en morceaux à l’aide de la position du chunk et du seed du monde pour déterminer quelle morceau du tout va dans le chunk actuel.

Finalement, avec le terrain de base créé, les biomes appliqués, et les GenerationPopulators lancés, nous avons complété la phase de génération, et l’objet Chunk peut être construit et retourné.

La Phase de Population

La Phase de Population peut seulement être lancée sur un chunk une fois que les 3 chunks adjacents à celui-ci dans les directions positives x et z sont chargées. Cela permet aux objets durant cette phase de s’étendre en dehors de la zone de 16x16 du chunk en train d’être peuplé, sans nécessiter la génération partielle utilisée pour les GenerationPopulators. Pour supporter ça, la zone actuellement générée durant cette phase est une zone de 16x16 agrandie de 8 dans chacun des axes x et z.

Seulement les Populators du biome à la position (x*16+16, 0, z*16+16) sont appliqués à cette zone. Ils ne s’appliquent pas à une union de tous les biomes comme c’est le cas pour les GenerationPopulators.

Les populateurs sont idéaux pour des petites fonctionnalités (ex : les puits du désert) et les revêtements de terrain additionnels (ex : les arbres). Sponge fournit un accès à un grand nombre de populateurs spécifiques au jeu de base, qui peuvent être reconfigurés pour votre usage.