Generación de Mundo
Generación de Mundo en Minecraft es un proceso complicado, y Sponge agrega sus propias complicaciones también. Aquí proveemos una descripción básica de como funciona para el lector interesado. Puede escoger saltar esto y pasar directamente a los detalles de la API en:
Una Descripción de la Generación de Mundo en Minecraft
Generación de mundo en Minecraft es basado en chunks. Cuando el juego requiere un chunk que todavía no existe, una solicitud es realizada en el generador de mundo para proporcionar ese chunk. El proceso para suministrar este chunk se divide en dos fases distintas, denominadas Generación y Población.
La Fase de Generación
La primera fase en proporcionar un chunk es la Fase de Generación. Ésta es principalmente responsable de la creación de la forma base del terreno, la generación de biomas y grandes características como pueblos y cuevas.
Nota
La colocación de bloques en la fase de generación se lleva a cabo enteramente dentro de un buffer, ya que el objeto Chunk no es creado hasta el último paso de la fase.
El primer paso es para que el generador de biomas llene un segundo buffer de bioma con los biomas que corresponderán a cada columna 1x1 dentro del chunk. Luego, la base GenerationPopulator crea la forma básica del terreno. En esta etapa, el mundo está enteramente hecho de piedra. La generación predeterminada es simplemente un mapa de altura generado desde el ruido perlin, después se rellena, dejando al aire si está sobre el nivel del mar y al agua si está por debajo. Este paso puede ser descartado llamando a WorldGenerator#setBaseGenerationPopulator(GenerationPopulator) para proporcionar su propio poblador personalizado al generador de mundo.
A continuación, utilizando el buffer de bioma creado anteriormente, el generador remplaza las capas superiores del terreno con BlockStates y las profundidades especificadas del bioma con GroundCoverLayers. Los biomas son proporcionados por un BiomeGenerator - que también se puede aplicar al generador de mundo con el método WorldGenerator#setBiomeGenerator(BiomeGenerator).
Ahora que el terreno base ha sido generado y preparado, ejecutamos mediante GenerationPopulators. Estos vienen en dos grupos: aquellos especificados globalmente por el generador de mundo y aquellos especificados por un bioma específico. El conjunto de GenerationPopulator
s utilizado es la unión del GenerationPopulator
s especificado con cada uno de los biomas únicos dentro del chunk.
GenerationPopulator
s están diseñadas para largas operaciones intensivas y son aplicadas para el buffer en lugar del objeto Chunk (todavía inexistente). Esto significa que debe existir la restricción de que GenerationPopulator
s no puede colocar ningún bloque fuera de los confines del chunk que se está generando actualmente. El contenido que está siendo generado por un GenerationPopulator
que se extiende múltiples chunks debe generarse en piezas utilizando la posición del chunk y las semillas del mundo para determinar que parte del todo va dentro del chunk actual.
Finalmente, con el terreno base creado, los biomas aplicados y el GenerationPopulator
s ejecutándose, tenemos completa la fase de generación y el objeto Chunk puede ser construido y devuelto.
La Fase de Población
La Fase de Población puede solo ejecutarse sobre un chunk una vez que los tres chunks adyacentes en las direcciones positivas x y z se carguen. Esto permite a los objetos durante esta fase expandirse fuera del área del chunk de 16x16 que se está poblando, sin requerir la generación parcial utilizada para GenerationPopulator
s. Para apoyar esto, el área poblada real durante esta fase es un área 16x16 trasladada por 8 en cada uno de los ejes x y z.
Solo los Populators del bioma en las posiciones (x*16+16, 0, z*16+16) son aplicados para esta área. No aplica una unión para todos los biomas como es el caso de GenerationPopulator
s.
Populators are ideal for small features (e.g. desert wells) and additional terrain covering (e.g. trees). Sponge provides access to a great number of vanilla specified populators which may be reconfigured for your use.