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

<code>IChunkGenerator createChunkGenerator()</code>这个方法虽然在WorldProvider类中不是抽象方法,但它也必须被覆写!因为它提供的是该维度的区块生成类——它决定了这个维度的世界生成。如果你不覆写该方法,那么等你进入维度后,你会发现这个维度的地面在Y = 255处,且天空的光照分布十分不正常,TPS会非常非常低。
 
=== WorldType ===
那么可能这个时候就会有人问了:我看过了主世界的WorldProvider,没看到它里面有指定主世界的ChunkGenerator啊?原因是:主世界有两个不同的ChunkGenerator:ChunkGeneratorOverworld和ChunkGeneratorFlat,后者用于生成超平坦主世界,前者用于生成正常的主世界。到底选择哪个ChunkGenerator生成主世界,取决于玩家在创建世界时所选的世界类型(WorldType),这些逻辑是被写在了其他地方的。由此也可以看出,虽然在很多时候,MC中一个World实例就可以近似代表一个维度,但WorldType和DimensionType是不一样的。
 
如果你真想给自己的新维度创建一个全新的WorldType,也不是很难,只需覆写若干非常简单的方法即可,这里就不展开论述了。
 
=== WorldProvider中的一些细节 ===
回到正题上来:在你自己的WorldProvider类中,你也可以自定义很多数据,如“该维度是否为露天世界”“该维度的虚空迷雾的颜色”等等,只需覆写若干方法即可。但要注意:你在你的WorldProvider类中提供的这些数据仅仅是给MC原版的一些机制或者其他模组传递了一些信息而已,它并不会体现在具体的世界生成中。比如笔者把主世界的“是否为露天世界”从true改为false,难道主世界顶部就会自动生成遮天蔽日的方块?MC可没这么智能。实际上这些数据仅仅是你手动暴露给MC原版的一些机制和其他模组的、关于你的新维度的一些信息而已。比如小地图模组可能会根据这一参数来决定生成的小地图的每一个像素点到底要不要取该像素点对应的(x, z)坐标的最高非空气方块的颜色。如果你填的这一参数和实际的世界生成情况不符,那小地图就会出错,就这么简单。新维度的绝大部分的世界生成特性都只体现在你的ChunkGenerator类中。
 
行政员、​优秀编辑者、​界面管理员、​监督员、​管理员、​小部件编辑者
3,258

个编辑