MCBBS Wiki欢迎您共同参与编辑!在参与编辑之前请先阅读Wiki方针

如果在编辑的过程中遇到了什么问题,可以去讨论板提问。

为了您能够无阻碍地参与编辑 未验证/绑定过邮箱的用户,请尽快绑定/验证

MCBBS Wiki GitHub群组已上线!

您可以在回声洞中发表吐槽!

服务器状态监控。点击进入

本站由MCBBS用户自行搭建,与MCBBS及东银河系漫游指南(北京)科技有限公司没有从属关系。点此了解 MCBBS Wiki 不是什么>>

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

跳到导航 跳到搜索
的确,如果没有清晰的教程指引的话,任何人在初学这块的时候很容易在第一步就卡住——那为什么会卡住呢?还不是因为不知所谓的变量太多了!让我们先来理一理。
 
首先,第一个变量是Random类型的。如果我们在区块生成类的构造器中使用零参构造器构造它,那么它的seed默认使用当前的系统时间。这样其实是很不好的——因为这就意味着你所生成的维度的具体样子和你输入的世界种子没有关系,纯粹取决于该维度的区块开始生成时的时间,这么做的案例当然也有——那便是GT6的矿脉生成。不过人家不走寻常路,不代表我们也要这么做,所以这里我们用world实例的世界种子作为该Random对象的构造器传入参数。
 
然后,便是声明了一大堆噪声算法相关的变量。读者可能会被他们镇住。NoiseGeneratorOctaves使用的是八度噪声算法,NoiseGeneratorPerlin使用的是柏林噪声算法,这两种算法到底是怎么回事,读者可以自行查阅,笔者在这里就不讲了——因为讲了也没用,因为Minecraft早就用NoiseGeneratorOctaves和NoiseGeneratorPerlin这两个类把这两个算法的计算过程封装好了。这两种算法都具有伪随机特性,可以看到:我们都传入了this.rand,而this.rand的seed是当前的世界种子,那也就保证了相同的世界种子生成的两个世界中,该维度的地形生成是一样的。这些噪声变量用于生成高度分布图。
 
然后是一个World类型的变量,这也显得理所应当——这个类中当然要有一个World实例了。
 
至于那个WorldType类型的变量,其实不是必需的,如果你的维度的区块生成和WorldType没半毛钱关系,那么,这个变量也可以没有。
 
然后就是声明了一大堆MapGenBase子类变量,这些主要用于生成大型结构。这些变量一般在声明之时就初始化,然后在初始化块中再赋值——赋的这个值,笔者也不懂其具体含义,这块读者直接参阅原版的相关源代码,就知道怎么填了。
 
然后是一个Biome数组,它用于存储该维度中所有的生物群系种类,并在generateChunk阶段以此为依据替换表层方块。如果你的维度中只有一个生物群系,那么这个Biome数组完全没必要声明,你直接在generateChunk里面向结果编程就好了。
==== 实现generateChunk方法 ====
===== generateHeightMap =====
行政员、​优秀编辑者、​界面管理员、​监督员、​管理员、​小部件编辑者
3,258

个编辑

我们提供服务需要使用Cookie。您使用我们的服务,即表示您同意我们使用Cookie。

导航菜单