[周边教程] Minecraft MOD制作:从入门到精通

发布时间:2018-06-27 04:21:15   来源:文档文库   
字号:

第一章 学习Java


java是什么?java是一门计算机语言,我相信很多人都知道这一事实,这很可能是由于您曾经玩过由这一语言编译而成的游戏。Java是一门面向对象的计算机语言,也就是说它由两主要部分组成:字段和方法。那什么是字段和方法呢?我们以人为例:

我们可以把一个人比作一个工程(o(_)o好像有些类比不当~)。在这个工程中会有许多包,比如“human.body.head”。在每个包中会包含好多类(我们之后详细阐述),比如说"ear.java"就是一个类。现在我们已经知道了字段和方法,那么什么是类呢?我们以之前的ear.java为例,这个耳朵类可以诸如耳垂高度音量等特征,所以一个解决方案是建立如“listenTo()”"moveEars()"等函数。

您可能会问这到底是什么呀,也可能会问这些和Minecraft到底有神马关系?好吧,以下就是一个例子:


方法/函数举例

1. public int getMaxHealth()

2. {

3.     return 20;

4. }

复制代码


这是minecraftEntityCreeper.java中的一段代码。这段代码非常基本,您只需关心的是如果把返回值20改为其它的什么东西会发生什么呢?当然您有可能会猜测:嗯,有可能会带来我砍苦力怕多少刀它会死呢?其中的"public"表示其它的类也可以调用该函数,"int"表示该函数为整型函数(在+/-2,147,483,647之间的所有十进制整数)。"getMaxHealth()"为函数名,"return 20"表示返回值,比如如果有人问这个类:苦力怕的最大生命值是多少呀?,它将回答:20~”。由于我们在函数头声明了"int",所以我们的返回值必须为整数。


字段/变量举例

1. private double velocityY;

复制代码


这是在EntityMinecart类中所生命的一个字段。其中"private"表示只有这个类才可以访问这个字段,"double"表示为一个十进制数,"velocityY"为这个变量的变量名(字段和变量有时表示同一个东西)。

以上就是关于Java的一些最基本的知识。网络上还有许许多多更为优秀的Java教程,所以就不再花时间赘述了。


相关教程:

TheNewBoston's Java (Beginner) Programming Tutorials

The JavaTM Tutorials

第二章 计划与头脑风暴

再次强调,这一章非常重要,有许多准备制作MOD的人士天赋异禀,最后全都楼主我要整合包了。您应该对于这个MOD最终能够实现什么功能、您能做到什么程度有一个明确的计划。可以在脑中对MOD进行简单地规划,或者对于每一项您所要添加的项目列出一份长达10页的清单,这都可以,取决于您个人的习惯。


需要牢记的事情:

从简单之处做起!

我见过好多好多人再问楼主类似的问题:如何让NPC自动建筑、谈话、打猎、去杀末影之龙呀?MOD制作是一个长期的过程,您也不可能马上就成为高手。正如我之前谈过的,您可以通过学习一些Java基础知识来了解一些知识,这样可以使您更快地成为高手。所以说要从简单之处入手,先试着为Minecraft添加一个方块吧。


要有兴趣!

请注意,为您喜欢的游戏制作MOD并不应该成为您的一份工作,在MOD制作之时您应该能获得成就感与愉悦。虽然当您不能修正错误,或者您的MOD的反响没有预想中 高时难免会灰心丧气,但这只是一时之举。如果您经常性地感到厌倦并没有从中获得乐趣,或许玩Minecraft更加适合您吧……

——第二章到此结束——

第三章:设置工作环境

在这章开始之前呢,我们需要提一下forge。我个人相比较modloader而言更倾向于forge。您可以在安装之前阅读关于Forgemodloader之间的比较,但是记得总结。有许多工具有助于提高您MOD的兼容性并使您的MOD制作之路更为轻松。Forge可以通过更新支持不同的版本但是modloader只支持对应的版本。所以不要犹豫通过安装FML和其他一些工具,您可以不需要安装那繁多的API。如果您有任何问题,请移驾至esper.net并加入#MinecraftForge


请参阅本文:http://www.mcbbs.net/thread-71071-1-1.html


准备文件

在工作环境中,您需要一份纯净的.minecraft 文件夹。可以通过备份您当前.minecraft文件夹,并通过点击"force update"来获得纯净的minecraft文件



下载

您在开始MOD制作之前还需要下载一下这三样东西:

最新版本的Eclipsehttp://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/junor

最新版本的Minecraft ForgeSRChttp://www.minecraftforge.net/

最新版本的MCPhttp://mcp.ocean-labs.de/index.php/MCP_Releases


设置工作环境

首先将MCP解压缩至您所希望的位置,我个人的习惯是在桌面新建一个名为"Mods"的文件夹,并将MCP解压缩至那里。Forge SRC的下载文件应该会是一个单独的名为"forge"的文件夹,将其解压缩至MCP目录下的“jars”文件夹里(其实只需要Binresources文件夹……但是无妨)。由于Forge不在依赖modloader,所以您不再需要安装modloader了。如果您计划制作支持多人生存模式(SSP)的MOD,您必须要在http://www.minecraft.net/download下载minecraft_server.jar文件,也放在前文所述的"jars"文件夹中,如下图所示:

现在返回MCP目录下的“forge”文件夹,运行"install.cmd"文件,如果您操作系统不同文件名字也不同。稍等片刻,安装结束后我们继续……

收尾工作

如果您在运行install.bat或者install.sh文件时没有任何错误,您现在应该可以开始您的大师之路了。返回Mcp/eclipse文件夹中,复制文件夹的地址,如:X:UsersMitchDesktopModsNewModMCPeclipse。现在您可以通过在您文件解压缩至您所希望的位置的方式安装eclipse。安装结束之后通过双击eclipse.exe的方式运行eclipse,当系统问及您的工作环境时,粘贴之前您复制的Mcp/eclipse文件夹的位置。当加载结束后,需要您找到“Client/src/net.minecraft.src/”的位置。

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


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

第一节:您的第一个方块


通过在net.minecraft.src包内右击任意文件,点击New ->Class

将其命名为“mod_YOURMODNAME”,必须确保其以“mod_”开头,因为只有这样系统才会识别该文件为一个MOD并开始加载。无需在底部选择任何的选项,点击"Finish"完成创建。

此时您会看见一段预先写好的类代码。您的第一件事就是要扩展这个MOD使之成为一个基本类(BaseMod)。您可以通过添加“extends BaseMod”这样的代码完成类的声明,此时代码如下:

1. package net.minecraft.src;

2.

3. public class mod_YourModName extends BaseMod {

4.

5. }

复制代码


当然,此时会在“mod_YOURMODNAME”处显示错误,此时将鼠标移至该错误处,在弹出的对话框中单击“Add unimplemented methods”。此时会在当前的基本类里添加两个类函数:“load”“getVersion”。您可以删除掉“//TODO”这种行,在“getVersion”类函数中,您需要将null替换为”1.0“或者其他您喜欢的版本号。您需要保留引用,就如同需要返回一个字符串一样。此时的代码如下所示:

1. package net.minecraft.src;

2.

3. public class mod_YourModName extends BaseMod {

4.

5.     @Override

6.     public String getVersion() {

7.         return "1.0";

8.     }

9.

10.     @Override

11.     public void load() {

12.         

13.     }

14.

15. }

复制代码


现在您终于可以开始创作您的第一份方块代码啦~

在类的顶端添加下列代码(在“{}”之内):

1. public static Block yourFirstBlock = new BlockTutorial(blockID, 0).setHardness(2.5F).setStepSound(Block.soundWoodFootstep).setBlockName("blockName");

复制代码


其中:


现在您已经掌握了如何新建一个BlockTutorial类了,当然有可能在之前您就把这个名字改掉了……

现在我们要扩展方块,我们首先需要执行ITextureProvider,当您将如下代码复制进其中时,可以使鼠标悬停在ITextureProvider处并单击导入(import)。

1. public class BlockTutorial extends Block implements ITextureProvider {

复制代码


现在我们需要为我们之前跳过的那部分创建一个构造函数(可以在java教程中获得更为详实的信息)。

1. public BlockTutorial(int i, int j)

2. {

3.     super(i, j, Material.wood);

4. }

复制代码


好,现在您即将进行的步骤是添加一个Forge的类函数以便我们可以为这个方块设置材质

1. public String getTextureFile()

2. {

3.     return "/Mic'sMods/CrossbowMod/gui/Crossbow.png";

4. }

复制代码


切记:不要更改类函数的第一行!乱修改可能覆盖或者替换类函数。

这是一个用于十字弓MOD的例子,其中的材质存储在minecraft.jar的相应位置中。您可以很轻松地修改您所使用的材质,但是如果指向一个空位置则无法进行加载。当然也要保证是双引号~

最后还需要一个Forge的类函数将该方块添加至创造模式的物品栏中。

1. public void addCreativeItems(List itemList)

2. {

3. if(blockID == mod_ YourModName. yourFirstBlock.blockID)

4.             {

5.                     itemList.add(new ItemStack(this));

6.             }

7. }

复制代码


当鼠标悬停至List时可以导入。

最后一个类函数可能有些复杂……


之后,我们load()类函数中添加如下语句

1. ModLoader.registerBlock(yourFirstBlock);

2. ModLoader.addName(yourFirstBlock, "Woohoo! My first Block :D");

复制代码


其中:


现在要做一件最为重要的事请:

hx940525,如果您要查看本帖隐藏内容请回复



您已经为Minecraft制作了一个属于您的MOD,不再是MOD制作小白痴了!无论这个MOD多么粗糙和简陋,但都是您在MOD制作大师之路的一个见证!希望当您在成为大师之时蓦然回首还能记得您的第一份作品,无论如何,恭喜您!!!

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


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


第二节:为您的方块添加材质


在这一部分教程中,将会为您讲述如何为您的方块添加材质。

首先您需要一份默认的子图。所谓子图就是一份可以由程序在需要时可以随时加载的图片。在Minecraft中,可以从terrain.pngitems.png中加载材质。实际上,依托于Forge,您所做的工作即为编辑一张属于您的terrain.png以及items.png并将您的MOD与这些子图之间建立联系。再次特意为您精心准备了两张默认的子图(items.pngterrain.png)。

我们可以打开编辑软件(PhotoshopGimpPaint.NET(译者强力推荐~)),此时您可以看见256个紫色方块,现在需要做的就是按照您的喜好绘制图案。请牢记您的材质是16×16的,并且按照如下方式排列。

您可能很好奇为什么是从0开始的呢?好吧,还记得我们之前的“(blockID, 0)”吗?其中的“0”就是调用这个文件。如果我们在之前的文档中保持“0”不变就会在加载子图之后您的方块将显示为蓝色的“0”方块,如果我们在代码中将“0”改为“1”,则在最后您的方块将变为红色“1”方块。

当您绘制完您的方块材质后,您需要以png格式保存这份子图,否则Minecraft不会正确加载。还记得之前的“getTextureFile()”类函数么,Forge虽然会自动进行寻找,但还请将子图与代码放在一系列的文件夹内。打开“YourMCPFolder/jars/bin/minecraft.jar”并将文件夹拖入其中,此时getTextureFile()就应该在minecraft.jar内找到您子图所在的位置。这可能有些晦涩难懂,所以我们需要测试一下您是否真正搞懂了。在我们运行客户端之前还有一件事需要进行:

——需要Forge预加载材质。

1. MinecraftForgeClient.preloadTexture("/New/Untitled-1.png");

复制代码

请确保您在类函数中所输入的文件地址与getTexture()所引用地址相同。我使用Forge客户端而不是用普通的forge类的原因是材质只是在客户端加载,不需要服务器端提供支持。

现在您就应该看到您的那个大大的0方块啦~


P.S

默认的子图文件下载地址在这里

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


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

第三节:创建一份合成表


在这一节,我将为您讲述如何创建一份合成表,本章不会有任何下载内容O(_)O~

当您已经成功地掌握了前两节的内容,您就已经基本掌握了制作MOD的基本知识。现在需要为那些奋斗在生存模式的人们考虑了~

本节内容十分简单,仅调用一个类函数。所以您可以尝试一下能否自己一个人搞清楚代码,我会将释义附在后面。当然,这些代码完全可以一行写完,但是写成这样子更为直观,就好像您在用工作台进行合成一样。

1. ModLoader.addRecipe(new ItemStack(yourFirstBlock), new Object[] {

2.     "BBB",

3.     "BAB",

4.     "BBB",

5.     Character.valueOf('A'), Item.diamond,

6.     Character.valueOf('B'), Block.obsidian

7. });

复制代码

您看懂了么?


您当然也可以在合成中使用您自己创建的方块或物品,举例来说,"Character.valueOf('A'), yourFirstBlock"即代表之前所述的“A”为您所创建的方块。

如下图所示:



以下为一些在编写合成公式时的小技巧:


您可以使用空格代表工作台中的空位。

1.     "DDD",    " I ",    " I ",

复制代码


您可以简化合成公式,这样子无论原材料在工作台内如何放置,只要形状正确即能合成(木板合成工作台就是一例)

1.     "BB",    "BB",

复制代码


您可以只使用单一原材料进行合成,也就是说放入一个该方块或物品即可合成您所希望的物品。

1. "Z",

复制代码

d7z65.png (118.59 KB, 下载次数: 14)

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


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

第五节:添加烧炼与创建物品

在这一节,我们将要为您在上一节创建的矿藏添加烧炼物,以锭为例,因为其相对较为简单。

创建物品与创建方块相比非常类似,事实上我们只需要在方块/物品的代码中修改一点点的地方即可。我们这次需要创建一个物品对象。

New Item Object


与方块相比,除去使用的对象和类不同外其余完全相同。我们此时并没有使用在结构体内添加子图的方法,而是使用.setlconindex(int)类函数,.setitemName与其相同,即使这些并没有在游戏中出现,但也应该与您的方块不同。

现在我们创建ItemTutorial类,代码与前文所述BlockTutorial类的代码完全相同(您可以自行更改类的名称)。此时只需要扩展item类,注意并不需要覆盖addCreativeItems类函数。

使用Modloader.addName()类函数、预加载子图(如果您方块和物品使用不同子图重新预加载的话需要)

load()函数中添加如下代码:


Into load()


其中的第一个参数是输入端,亦即我们之前制作的那个方块,第二个参数为itemStack亦即我们通过熔炉烧炼出的您创建的物品。

好啦,您的第一份物品已经通过熔炉烧炼而成了(其实就是一个矿石锭~),这一章虽然简单,但是却对下一节的教程非常有用,下一节我们讲述如何制作工具


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


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


第四章第六节:创建一组工具


在接下来的教程中,我们主要集中于讲述如何创建一组工具。这一节要比其他各节都要复杂,所以各位同学打起精神来~~

首先,我们需要为新的工具创建一个EnumToolMaterial。在您的类中添加如下代码,注意不是在任何的类函数中。


New Tool Material


第二步,我们需要创建一个新的物品对象:

New Items


此时会报错,这是由于还没有新建类。


现在创建一个新的类,此时您应该需要5个类了。现在我们执行下一步,扩展工具类(不是扩展item类)。

举例来说,我的蓝石铲(BlueStoneSpade)会扩展为ItemSpade。那么蓝石斧(BlueStoneAxe)就应该扩展为 ItemAxe,以此类推。

Into load()



您只需要为斧、镐、铲进行相应的设置!

现在使用Modloader.addName添加名字,以及参照之前的教程添加合成表~

好啦,您的蓝石系列工具就出炉啦~我认为MOD制作中最为复杂的部分就是绘制一份好看的材质。。。。

少年们,用你们手中自己创建的工具挖出个大坑吧~~~

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


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


第四章第八节:添加多材质方块


什么是多材质方块?就是类似草地这样子的方块:绿色的顶部,低端是棕色的,而四周却与上下均不相同。

第一步需要为其创建材质。需要绘制至少两幅材质才可以实现多材质的功能,将其放在同一份子图文件下。确保使用渲染软件将不同的材质渲染在同一方块上使其看起来彼此拼接,毕竟您不希望一个带有紫色边的方块转过去一看编程绿色边了吧……

在您制作成功材质后实际上代码非常简单,您只需要一个类函数即可:


Magical Multi-texture Method


在这一例程中展示了一份草方块的制作过程。通过使用getBlockTexture()类函数,我们可以调用不同位置的子图。

当您看到这一方块时:

顶部:0

底部:1

四周:2345

请确认您所看到的方块是否与其吻合~~(据反馈此处有问题……

好啦,看到这里您已经是MOD制作方面的大师了~~(至少在理论层面是这样~~~)恭喜您O(_)O~

本文来源:https://www.2haoxitong.net/k/doc/be6b954427d3240c8447ef45.html

《[周边教程] Minecraft MOD制作:从入门到精通.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式