1、第一章 学习 Javajava 是什么?java 是一门计算机语言,我相信很多人都知道这一事实,这很可能是由于您曾经玩过由这一语言编译而成的游戏。Java 是一门面向对象的计算机语言,也就是说它由两主要部分组成:字段和方法。那什么是字段和方法呢?我们以人为例:我们可以把一个人比作一个工程(o(_ )o 好像有些类比不当 )。在这个工程中会有许多包,比如“human.body.head”。在每个包中会包含好多类(我们之后详细阐述),比如说“ear.java“就是一个类。现在我们已经知道了字段和方法,那么什么是类呢?我们以之前的 ear.java 为例,这个耳朵类可以诸如“耳垂高度”和“ 音量”等
2、特征,所以一个解决方案是建立如“listenTo()”和“moveEars()“等函数。您可能会问这到底是什么呀,也可能会问这些和 Minecraft 到底有神马关系?好吧,以下就是一个例子:方法/函数举例1. public int getMaxHealth()2. 3. return 20;4. 复制代码这是 minecraft 中 EntityCreeper.java 中的一段代码。这段代码非常基本,您只需关心的是如果把返回值 20 改为其它的什么东西会发生什么呢?当然您有可能会猜测:嗯,有可能会带来我砍苦力怕多少刀它会死呢?其中的“public“表示其它的类也可以调用该函数,“int“表
3、示该函数为整型函数(在 +/-2,147,483,647 之间的所有十进制整数)。“getMaxHealth()“为函数名,“return 20“表示返回值,比如如果有人问这个类:“苦力怕的最大生命值是多少呀?”,它将回答: “是 20”。由于我们在函数头声明了“int“,所以我们的返回值必须为整数。字段/变量举例1. private double velocityY;复制代码这是在 EntityMinecart 类中所生命的一个字段。其中“private“表示只有这个类才可以访问这个字段,“double“表示为一个十进制数,“velocityY“为这个变量的变量名(字段和变量有时表示同一个东
4、西)。以上就是关于 Java 的一些最基本的知识。网络上还有许许多多更为优秀的 Java 教程,所以就不再花时间赘述了。相关教程: TheNewBostons Java (Beginner) Programming Tutorials The JavaTM Tutorials第二章 计划与头脑风暴再次强调,这一章非常重要,有许多准备制作 MOD 的人士“天赋异禀”,最后全都“楼主我要整合包”了。您应该对于这个 MOD 最终能够实现什么功能、您能做到什么程度有一个明确的计划。可以在脑中对 MOD 进行简单地规划,或者对于每一项您所要添加的项目列出一份长达 10 页的清单,这都可以,取决于您个人的
5、习惯。需要牢记的事情: 从简单之处做起!我见过好多好多人再问楼主类似的问题:“如何让 NPC 自动建筑、谈话、打猎、去杀末影之龙呀?” 。MOD 制作是一个长期的过程,您也不可能马上就成为高手。正如我之前谈过的,您可以通过学习一些 Java 基础知识来了解一些知识,这样可以使您更快地成为高手。所以说要从简单之处入手,先试着为 Minecraft 添加一个方块吧。 要有兴趣!请注意,为您喜欢的游戏制作 MOD 并不应该成为您的一份工作,在 MOD 制作之时您应该能获得成就感与愉悦。虽然当您不能修正错误,或者您的 MOD 的反响没有预想中 高时难免会灰心丧气,但这只是一时之举。如果您经常性地感到厌
6、倦并没有从中获得乐趣,或许玩 Minecraft 更加适合您吧第二章到此结束第三章:设置工作环境在这章开始之前呢,我们需要提一下 forge。我个人相比较 modloader 而言更倾向于forge。您可以在安装之前阅读关于 Forge 与 modloader 之间的比较,但是记得总结。有许多工具有助于提高您 MOD 的兼容性并使您的 MOD 制作之路更为轻松。 Forge 可以通过更新支持不同的版本但是 modloader 只支持对应的版本。所以不要犹豫通过安装 FML 和其他一些工具,您可以不需要安装那繁多的 API。如果您有任何问题,请移驾至 并加入#MinecraftForge。请参
7、阅本文:http:/ 文件夹。可以通过备份您当前.minecraft 文件夹,并通过点击 “force update“来获得纯净的 minecraft 文件下载您在开始 MOD 制作之前还需要下载一下这三样东西: 最新版本的 Eclipse:http:/www.eclipse.org/downloads/packages/eclipse-ide-java-developers/junor 最新版本的 Minecraft ForgeSRC:http:/ 最新版本的 MCP:http:/mcp.ocean-labs.de/index.php/MCP_Releases设置工作环境首先将 MCP 解压
8、缩至您所希望的位置,我个人的习惯是在桌面新建一个名为“Mods“的文件夹,并将 MCP 解压缩至那里。Forge SRC 的下载文件应该会是一个单独的名为“forge“的文件夹,将其解压缩至 MCP 目录下的“jars”文件夹里(其实只需要 Bin 和resources 文件夹 但是无妨)。由于 Forge 不在依赖 modloader,所以您不再需要安装modloader 了。如果您计划制作支持多人生存模式(SSP )的 MOD,您必须要在http:/ 下载 minecraft_server.jar 文件,也放在前文所述的“jars“文件夹中,如下图所示:现在返回 MCP 目录下的“forg
9、e”文件夹,运行“install.cmd“文件,如果您操作系统不同文件名字也不同。稍等片刻,安装结束后我们继续收尾工作如果您在运行 install.bat 或者 install.sh 文件时没有任何错误,您现在应该可以开始您的大师之路了。返回 Mcp/eclipse 文件夹中,复制文件夹的地址,如:X:UsersMitchDesktopModsNewModMCPeclipse。现在您可以通过在您文件解压缩至您所希望的位置的方式安装 eclipse。安装结束之后通过双击 eclipse.exe 的方式运行 eclipse,当系统问及您的工作环境时,粘贴之前您复制的 Mcp/eclipse 文件夹
10、的位置。当加载结束后,需要您找到“Client/src/net.minecraft.src/”的位置。第四章:您等待已久的一章我希望您能多加阅读一些 Minecraft 的代码,虽然对于一个 java 造诣不精人来说,代码有可能显得凌乱,但是不要灰心丧气。第一节:您的第一个方块通过在 net.minecraft.src 包内右击任意文件,点击 New -Class。将其命名为“mod_YOURMODNAME”,必须确保其以“mod_”开头,因为只有这样系统才会识别该文件为一个 MOD 并开始加载。无需在底部选择任何的选项,点击“Finish“完成创建。此时您会看见一段预先写好的类代码。您的第一
11、件事就是要扩展这个 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”这种
12、行,在 “getVersion”类函数中,您需要将 null 替换为”1.0“或者其他您喜欢的版本号。您需要保留引用,就如同需要返回一个字符串一样。此时的代码如下所示:1. package net.minecraft.src;2.3. public class mod_YourModName extends BaseMod 4.5. Override6. public String getVersion() 7. return “1.0“;8. 9.10. Override11. public void load() 12. 13. 14.15. 复制代码现在您终于可以开始创作您的第一份方块代
13、码啦在类的顶端添加下列代码(在“”之内):1. public static Block yourFirstBlock = new BlockTutorial(blockID, 0).setHardness(2.5F).setStepSound(Block.soundWoodFootstep).setBlockName(“blockName“);复制代码其中:名称 含义public 表示所有类均可以访问。static 表示在类内不创建一个新的实例的条件下即可访问(详情请查阅 java 教程)Block 该变量引用“Block.java”yourfirstBLock 变量名,叫什么都行= new
14、BlockTutorial此时在 BlockTutorial 类中创建了一个新的实例,由于我们之前没有声明,因此会出错。您可以将其改为任何您喜欢的名字,只要之后的名字与其相同就可以了。(blockID, 0) 您所传递给 BlockTutorial 类的信息,就是方块 ID。您可以在这里将其替换成您所希望的任何数值。特别提醒您,在最新版本的 Forge 中,可以自动调整您的方块 ID,并将其设置到 137 到 4096 中的一个未使用过的数值。您可以在这里查看您的 MOD 与 MOD 的兼容性。之后的 0 稍后会为您详细阐述,现在暂且放过它。.setHardness(2.5F) 设置该方块的硬
15、度为 2.5,您可以随意调整。.setStepSound(Block.soundWoodFootstep) 走在上面的声音,如果您喜欢的话,也可以将“soundWoodFootstep”改成“soundClothFootstep”或者任何你喜欢的声音。.setBlockName(“blockName“); 这个变量无关紧要,只是要保证每个的名字不同就可以了。现在您已经掌握了如何新建一个 BlockTutorial 类了,当然有可能在之前您就把这个名字改掉了现在我们要扩展方块,我们首先需要执行 ITextureProvider,当您将如下代码复制进其中时,可以使鼠标悬停在 ITexturePro
16、vider 处并单击导入( 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. 复制代码名称 含义BlockTutorial 由于是构造函数,此处需与类的名字相同。(int i, int j) 我们在之前使用(blockID, 0)的声明。
17、更为详细的来说,表示该构造函数使用两个整数变量并将其命名为 i 和 j。super 表示需要使用超类来传递方块信息,这也是问什么我们扩展这个类的缘故。可能难以理解但是请参阅 java 教程 o(_)o(i, j, Material.wood);这是由我们的 MOD 类中继承的将要传给方块的参数,我们同时也传递了 Material.wood 是因为我希望这个方块在被镐敲击时可以更为容易地被破坏。好,现在您即将进行的步骤是添加一个 Forge 的类函数以便我们可以为这个方块设置材质。1. public String getTextureFile()2. 3. return “/MicsMods/C
18、rossbowMod/gui/Crossbow.png“;4. 复制代码切记:不要更改类函数的第一行!乱修改可能覆盖或者替换类函数。这是一个用于十字弓 MOD 的例子,其中的材质存储在 minecraft.jar 的相应位置中。您可以很轻松地修改您所使用的材质,但是如果指向一个空位置则无法进行加载。当然也要保证是双引号最后还需要一个 Forge 的类函数将该方块添加至创造模式的物品栏中。1. public void addCreativeItems(ArrayList itemList)2. 3. if(blockID = mod_ YourModName. yourFirstBlock.bl
19、ockID)4. 5. itemList.add(new ItemStack(this);6. 7. 复制代码当鼠标悬停至 ArrayList 时可以导入。最后一个类函数可能有些复杂名称 含义void 表示该函数没有返回值addCreativeItems(ArrayList itemList) 类函数和构造函数的名字。不要进行修改,否则会覆盖 Forge 的类函数。if( 根据真假不同返回值也不同,如果不懂请多看看教程blockID = mod_ YourModName. yourFirstBlock.blockID逻辑表达式,如果该方块的方块 ID 与您创建的方块的方块 ID 则继续item
20、List.add(new ItemStack(this); 在创造模式中可以创建和堆叠这一方块,这条语句不懂亦无妨。之后,我们在 load()类函数中添加如下语句 :1. ModLoader.registerBlock(yourFirstBlock);2. ModLoader.addName(yourFirstBlock, “Woohoo! My first Block :D“);复制代码其中:名称 含义ModLoader.registerBlock 您所调用的类函数(yourFirstBlock) 您所使用的方块,确保之前声明过。ModLoader.addName 调用另一个类函数,用于添加
21、名字(yourFirstBlock, “Woohoo! My first Block :D“);这里是为您的方块实例赋予名字的地方,您可以在这里写“红石灯(Redstone Lamp)”,“ 楼主我要整合包(LouzhuWoyaoZhengheBao)”等等。现在要做一件最为重要的事请:hx940525,如果您要查看本帖隐藏内容请回复您已经为 Minecraft 制作了一个属于您的 MOD,不再是 MOD 制作小白痴了!无论这个 MOD 多么粗糙和简陋,但都是您在 MOD 制作大师之路的一个见证!希望当您在成为大师之时蓦然回首还能记得您的第一份作品,无论如何,恭喜您!第四章:您等待已久的一章我
22、希望您能多加阅读一些 Minecraft 的代码,虽然对于一个 java 造诣不精人来说,代码有可能显得凌乱,但是不要灰心丧气。第二节:为您的方块添加材质在这一部分教程中,将会为您讲述如何为您的方块添加材质。首先您需要一份默认的“子图 ”。所谓“子图”就是一份可以由程序在需要时可以随时加载的图片。在 Minecraft 中,可以从 terrain.png 和 items.png 中加载材质。实际上,依托于 Forge,您所做的工作即为编辑一张属于您的 terrain.png 以及 items.png 并将您的 MOD与这些子图之间建立联系。再次特意为您精心准备了两张默认的子图(items.png、terrain.png)。我们可以打开编辑软件(Photoshop、Gimp、Paint.NET(译者强力推荐),此时您可以看见 256 个紫色方块,现在需要做的就是按照您的喜好绘制图案。请牢记您的材质是 1616 的,并且按照如下方式排列。