Minecraft(我的世界)中文论坛
标题: Minecraft MOD制作:从入门到精通——第四章第七节:创建一套盔甲
作者: DJXGAME 时间: 2012-9-3 12:46
标题: Minecraft MOD制作:从入门到精通——第四章第七节:创建一套盔甲
Minecraft MOD制作:从入门到精通
The Dummy's Guide to Modding - From Setup to Advanced!
第四章:您等待已久的一章
我希望您能多加阅读一些Minecraft的代码,虽然对于一个java造诣不精人来说,代码有可能显得凌乱,但是不要灰心丧气。
第四章第七节:创建一套盔甲
在您创建工具成功后,我们下一步就是学习如何创建盔甲,创建盔甲与创建工具十分类似。
首先需要新建一个EnumArmorMaterial对象,这个对象与EnumToolMaterial十分类似但是却不尽相同:
Create a New Armor Material
- static EnumArmorMaterial BLUEARMOR = EnumHelper.addArmorMaterial("BLUE", 25, new int[] { 2, 6, 5, 2 }, 9);
复制代码 |
名称 | 含义 |
EnumHelper.addArmorMaterial | 我们所引用的Forge类函数。如果您在此处出现错误,请手动导入net.minecraft.forge.EnumHelper |
以下这些函数您应该都能看懂和修改…… |
"BLUE" | 材料名称 |
25 | 在该盔甲损坏之前可以承受多少伤害。 |
new int[] | 创建一个指向护甲值的整型指针变量。 |
2, 6, 5, 2 | 各部分的护甲值:从左至右依次为:头部、胸部、腿部、脚部。 |
9 | 可附魔性,我不确定……(羽毛为15,钻石为10,金块为25.) |
接下来需要创建一个新物品对象,与前文所述类似:
New Item Objects
- public static Item blueStoneHelmet = new BlueStoneArmor(ItemID5, BLUEARMOR).setIconIndex(4).setItemName("customHelmet");
- public static Item blueStoneChestplate = new BlueStoneArmor(ItemID6, BLUEARMOR).setIconIndex(5).setItemName("customChestplate");
- public static Item blueStoneLeggings = new BlueStoneArmor(ItemID7, BLUEARMOR).setIconIndex(6).setItemName("customLeggings");
- public static Item blueStoneBoots = new BlueStoneArmor(ItemID8, BLUEARMOR).setIconIndex(7).setItemName("customBoots");
复制代码 |
此时会报错,这是由于还没有新建类。与工具不同的是,您只需要创建一个类即可。
现在我们需要扩展ItemArmor以及完成ITextureProvider和IArmorProvider:
- public class BlueStoneArmor extends ItemArmor implements ITextureProvider, IArmorTextureProvider {
复制代码
接下来需要添加getTextureFile和结构体
- public ItemArmor(int par1, EnumArmorMaterial par2EnumArmorMaterial, int par3, int par4)
- {
- super(par1, par2EnumArmorMaterial, par3, par4);
- }
- @Override
- public String getTextureFile() {
- return "/New/Untitled-1.png";
- }
复制代码
此时程序会报错,这是由于需要添加一个类函数,覆盖如下函数:
- @Override
- public String getArmorTextureFile(ItemStack itemstack) {
- }
复制代码
当然这个类函数仍未完成,需要在其中添加一些内容:
getArmorTextureFile() method
- if (itemstack.itemID == mod_YourModName.blueStoneHelmet.shiftedIndex || itemstack.itemID == mod_YourModName.blueStoneChestplate.shiftedIndex || itemstack.itemID == mod_YourModName.blueStoneBoots.shiftedIndex)
- {
- return "/New/armor/blue_1.png";
- }
- else if (itemstack.itemID == mod_YourModName.blueStoneLeggings.shiftedIndex)
- {
- return "/New/armor/blue_2.png";
- }
- return null;
复制代码 |
该类函数的作用是在材质文件中检索您当前穿着的护甲,并返回相应的材质将其显示在您身上,从而完成您穿着护甲的判定。
|| | Java语句中的“或” |
itemstack.itemID == mod_YourModName.blueStoneHelmet.shiftedIndex | 本逻辑表达式用于检索头盔 |
|| | Java语句中的“或” |
itemstack.itemID == mod_YourModName.blueStoneBoots.shiftedIndex | 检索脚部 |
return "/New/armor/blue_1.png" | 如果检索头盔成功则"blue_1.png"即为我们需要的材质文件。 |
else if (..) | 如果逻辑表达式非真,则执行该语句…… |
(itemstack.itemID == mod_YourModName.blueStoneLeggings.shiftedIndex | 检索腿部 |
return "/New/armor/blue_2.png"; | 与上文类似 |
return null | 返回空值。 |
明白了吧?没有?⊙﹏⊙b……我们一步一步仔细讲解。
首先需要为护甲创建材质:打开minecraft.jar文件,打开armor文件夹,解压缩其中任意的两个文件(如:cloth_1和cloth_2)。
按您的喜好为这两个文件上色,修改形状,等等。并保存为您之前在getArmorTexture()使用过的文件名字……如blue_1.png和blue_2.png。
创建与之前在getArmorTextureFile()类函数中指向的地址吻合的目录。如我就必须新创建一个文件夹"New"、然后在创建一个"Armor",然后把blue1和blue2放到其中,确保一定要吻合~
打开您的MCP文件夹/jars/bin/minecraft.jar。将这堆东西扔到里面。
想在返回eclipse并运行Minecraft,检查您的MOD是否正常运行。由于您不能在创造模式调用该护甲,所以建议您为其使用泥土制作一份合成表,这样可以在生存模式中方便地检测MOD。如果其工作正常,恭喜您!如果其工作不正常,请返回各处检查代码……
作者: geludan 时间: 2012-9-3 12:50
都不抢在前两天发{:10_494:}我来补损失的分吧。。。{:10_495:}
作者: Hao 时间: 2012-9-3 13:13
再死之前吐个槽
作者: pogox 时间: 2012-9-3 16:09
楼主什么时候有整合包呢。。。
作者: strawmaine 时间: 2012-9-4 13:47
不再需要扩展 ITextureProvider(Minecraft已自带)
作者: 天空之城TMD 时间: 2013-4-1 20:22
才发现楼主一个口误:JAVA里没有函数,只有方法。而楼主总是把方法说成函数
作者: gooding300 时间: 2013-7-14 12:28
||应该是逻辑或吧? 只要前面一个为true就不会判断后一个。和或(|)有本质区别
作者: grd020903 时间: 2014-8-18 21:14
其实这个else if可以改成if,因为,如果是真的话,那这个方法也被return掉了
作者: marcong95 时间: 2014-8-27 03:24
接下来需要添加getTextureFile和结构体
这个结构体原文是Constructor?这是构造器……
结构体是structure,而且Java没有,lz难道是搞C之类的?
作者: Enochxyn 时间: 2015-8-20 07:04
小学生编程