用户:MashKJo/1.12.2模组开发笔记/实现新维度:修订间差异

 
==== 实现generateChunk方法 ====
最难以理解的部分要来了。
 
实现generateChunk方法,大概是这样的:
 
@Override
public Chunk generateChunk(int x, int z)
{
this.rand.setSeed([expression with x and z]);
this.biomesForGeneration = this.world.getBiomeProvider().getBiomes(this.biomesForGeneration, x * 16, z * 16, 16, 16);
ChunkPrimer primer = new ChunkPrimer();
generateHeightMap(x * 4, z * 4, primer);
setBlocksInChunk(x, z, primer);
replaceBiomeBlocks(x, z, primer, biomesForGeneration);
structureGenerator1.generate(this.world, x, z, primer);
...
Chunk chunk = new Chunk(this.world, primer, x, z);
chunk.generateSkylightMap();
return chunk;
}
 
首先,重新设定this.rand的seed。原版和几乎所有模组在这里都会把expression设定为<code>(long)x * 341873128712L + (long)z * 132897987541L</code>。
 
然后,新建一个ChunkPrimer对象。再接连调用三个方法:generateHeightMap、setBlocksInChunk和replaceBiomeBlocks。这三个方法都用private修饰,实际上这体现了ChunkPrimer对象写入数据的一些步骤,你当然也可以把这三个方法的代码全塞在generateChunk这个方法里,但是完全没必要。把这些代码分成三个方法,更能体现代码模块化的原则。
===== generateHeightMap =====
 
===== setBlocksInChunk =====
 
===== 计算天空光照分布replaceBiomeBlocks =====
 
==== 实现populate方法 ====
行政员、​优秀编辑者、​界面管理员、​监督员、​管理员、​小部件编辑者
3,258

个编辑