3,417
个编辑
MCBBS Wiki欢迎您共同参与编辑!在参与编辑之前请先阅读Wiki方针。
如果在编辑的过程中遇到了什么问题,可以去讨论板提问。
为了您能够无阻碍地参与编辑 未验证/绑定过邮箱的用户,请尽快绑定/验证。
MCBBS Wiki GitHub群组已上线!
您可以在回声洞中发表吐槽!
服务器状态监控。点击进入
本站由MCBBS用户自行搭建,与MCBBS及东银河系漫游指南(北京)科技有限公司没有从属关系。点此了解 MCBBS Wiki 不是什么>>
| 第276行: | 第276行: | ||
==== 实现generateChunk方法 ==== | ==== 实现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 ===== | ===== generateHeightMap ===== | ||
===== setBlocksInChunk ===== | ===== setBlocksInChunk ===== | ||
===== | ===== replaceBiomeBlocks ===== | ||
==== 实现populate方法 ==== | ==== 实现populate方法 ==== | ||
== 注释与外部链接 == | == 注释与外部链接 == | ||