本帖最后由 DJXGAME 于 2012-8-30 12:55 编辑

Minecraft MOD制作:从入门到精通
The Dummy's Guide to Modding - From Setup to Advanced!




——全文索引地址——
http://www.mcbbs.net/thread-46190-1-1.html

第四章:您等待已久的一章


我希望您能多加阅读一些Minecraft的代码,虽然对于一个java造诣不精人来说,代码有可能显得凌乱,但是不要灰心丧气。


第四节:生成矿藏




现在您可以能会想如何制作一份矿藏呢?如果您希望制作一份矿藏,请不要为其设置可以进行合成的要素,毕竟矿藏是不能合成出来的

建议您重新为自己的矿物方块设计一套材质,毕竟在许多灰色的石头中间突然挖到一个蓝色大方块很是诡异。您可以根据自己使用photoshop或Gimp的水平进行创作,甚至直接拷贝原版材质并加以修改其中的色调和饱和度也是一个不错的而选择.

还记得我们在教程之前提到的".setHardness(2.5F)"么?在制作矿藏时这一参数也需要考虑在内:0.1F意味着几乎可以瞬间摧毁该方块,而1000.0F则意味着您可以挖到天荒地老。还有一点请注意,此处与您实际进行采矿无任何相关,我们稍后会进行讲解。

我们使用generateSurface()类函数对modloader类函数进行覆盖,当生成世界时就会调用这个类函数,并生成您所添加进类函数的语句。以下代码将用于您的mod_file:



Overriding The ModLoader Method


再次强调,不要做任何修改,因为您的任何改动都会带来不可知的结果。
现在需要再去中添加一个循环语句:
Generation For Loop

名称]含义
for(..) 表示循环,详情请参阅java教程
int i = 0; i < 20; i++默认的循环语句,您只需要关心其中的“20”就可以了,如果您将其设置为1就代表该矿物如同钻石一样珍惜,而将其设置为20则代表如同煤那样广泛分布,您可以将其最大设置为50左右。
int randPosX = chunkX + random.nextInt(16);表示矿藏的确切位置其中变量randPosX用于存储矿藏的X坐标,而矿脉的实际位置则由1到16的一个随机数与区块位置共同决定。不要更改其中的16!
int randPosY = random.nextInt(20);矿脉的y坐标由1到20的一个随机数决定,您可以将20改为任何一个正值,比如矿石就将其设置为16而煤则为128。
int randPosZ = chunkZ + random.nextInt(16);矿脉的Z坐标由变量randPosZ确定,矿脉的实际位置则由1到16的一个随机数与区块位置共同决定。不要更改其中的16!
new WorldGenMinableWorldGenMinable类中添加一个新的实例,该实例主要用于控制生成
(this.yourFirstOre.blockID, 8)控制您所生成矿脉的最大矿石数量,最小值为3亦即每个矿脉只生成1块矿石
.generateWorldGenMinable中调用generate类函数。
(world, random, randPosX, randPosY, randPosZ)''world''为生成世界的名称,可以由delaration类函数提供;''Random''为java的随机场,也由delaration类函数提供;"Random'' X, Y, Z为三个整值变量,用于控制矿脉的位置。

我们接下来设置矿藏的硬度等级,也就是说使用何种镐开采这一种矿藏,以下为典型矿石的硬度等级:黑曜石为3。钻石为2。铁矿石为1。

在您的load()类函数中添加如下代码:


Setting Harvest Level


此时您的矿藏创建之旅就临近尾声,大家请欣赏我创造的超级恶劣材质的矿藏~



P.S:在您重新生成一个世界后(也就是您更改了控制世界生成的变量)如果出现错误,请先检查区块生成是否正确再行检查代码问题。~