利用Forge API开发联机MOD【基础篇】【第五章】
给你的MOD添加一个物品
作者:yuxuanchiadm
索引贴地址:http://www.mcbbs.net/thread-38211-1-1.html
请确定你已经阅读完成第四章的内容:
http://www.mcbbs.net/thread-83003-1-1.html
否则不要阅读此贴!
序:
在上一章里,我们已经学会了如何制作一个MOD的配置文件,是时候做一个功能强大的MOD了把 : )。现在,我将要手把手教你做一个有一定内容的MOD。
添加一个新的物品:
(这次的教程我准备讲解一个名为刷怪笼手工艺的MOD,当然这是我自己的MOD :D,顺便把这MOD做成联机的,一举两得:D,此MOD的老版本下载地址:http://www.mcbbs.net/thread-37772-1-1.html)
首先,我们需要做一个镐子,来采集传说中的刷怪笼 :D
新建一个包:myFirstMod.Item
新建一个类,命名为ItemSpawnerPickaxe,继承自ItemPickaxe,
然后写入如下代码:
- package myFirstMod.Item;
- import net.minecraft.block.Block;
- import net.minecraft.entity.EntityLiving;
- import net.minecraft.entity.item.EntityItem;
- import net.minecraft.item.EnumToolMaterial;
- import net.minecraft.item.ItemPickaxe;
- import net.minecraft.item.ItemStack;
- import net.minecraft.world.World;
- public class ItemSpawnerPickaxe extends ItemPickaxe
- {
- //构造函数(参数1:物品ID)
- public ItemSpawnerPickaxe(int par1)
- {
- super(par1, EnumToolMaterial.EMERALD);
- this.setItemName("SpawnerPickaxe");
- }
- //破坏方块时调用(参数1:玩家拿着的物品栈(此物品的物品栈),参数2:方块世界,参数3:方块ID,参数4-6:方块坐标,参数7:使方块被摧毁的玩家)
- public boolean onBlockDestroyed(ItemStack par1ItemStack, World par2World, int par3, int par4, int par5, int par6, EntityLiving par7EntityLiving)
- {
- //损伤这个物品
- par1ItemStack.damageItem(1, par7EntityLiving);
- //如果被破坏的方块等于刷怪笼
- if(par3 == Block.mobSpawner.blockID)
- {
- //新建一个掉落的方块
- EntityItem entityitem = new EntityItem(ModLoader.getMinecraftInstance().theWorld, (float)par4, (float)par5, (float)par6, new ItemStack(Block.mobSpawner.blockID,1,0));
- //设置可拿起的间隔
- entityitem.delayBeforeCanPickup = 10;
- //抛出这个方块
- ModLoader.getMinecraftInstance().theWorld.spawnEntityInWorld(entityitem);
- }
- return true;
- }
- }
首先,上次创建的配置文件管理类有用处了=w=,在mod_myFirstMod的字段区域添加:
- public static int ItemSpawnerPickaxeID;
- myFirstModConfig.InitliazeConfig(event.getSuggestedConfigurationFile());
- try
- {
- ItemSpawnerPickaxeID = myFirstModConfig.GetItemID("ItemSpawnerPickaxe",12001);
- }
- catch(Exception error)
- {
- System.out.println(error.getMessage());
- System.out.println(error.getStackTrace());
- }
- myFirstModConfig.SaveConfig();
现在,我们已经成功的获取到了镐子的ID,默认为12001,并且可以在配置文件修。
是时候了,编译此MOD,再运行一次游戏,你将在MCP62ForgeMod\jars\config下得到一个漂亮的配置文件LOL,虽然此MOD任然不能玩。
现在,我们需要把这个镐子添加进游戏里。
第一步:我们需要纹理
首先,复制这个图片:
到\mcp725ForgeMOD\src\minecraft\myFirstMod\sprites并命名为items.png。
打开此文件,用PS乱涂一番,保存为items.png,建议把.psd文件一起保存,方便日后修改,就得到了我们镐子的纹理:)。
(记得注意透明通道 :D)
第二步:纹理需预载入
还记得我们在第四章做的代理类么,现在派上用处了 :D
打开myFirstModProxyCommon类,添加:
- public void registerRenderers()
- {
-
- }
- public final static String ITEMS_PNG_PATH = "/myFirstMod/sprites/items.png";
- public void registerRenderers()
- {
- MinecraftForgeClient.preloadTexture(ITEMS_PNG_PATH);
- }
打开ItemSpawnerPickaxe,在构造函数中添加代码:
- this.setTextureFile(myFirstModProxyClient.ITEMS_PNG_PATH);this.setIconIndex(0);
在mod_myFirstMod中新建字段:
- public static Item SpawnerPickaxe;
- import net.minecraft.src.EnumToolMaterial;
- import net.minecraft.src.Item;
- import myFirstMod.Item.ItemSpawnerPickaxe;
- SpawnerPickaxe = new ItemSpawnerPickaxe(ItemSpawnerPickaxeID);
- ModLoader.addName(SpawnerPickaxe, "刷怪笼回收镐");
这样,你就成功的把你的镐子添加进了游戏:),现在,再添加个合成公式:
- ModLoader.addRecipe(new ItemStack(SpawnerPickaxe,1), new Object[]
- {
- "###"," * "," * ",Character.valueOf('#'),Item.redstone,Character.valueOf('*'),Item.stick
- });
现在,编辑并测试的的MOD,尝试合成一个镐子,如果你能够合成,就说明你成功了!
(好吧,代码编辑功能极度不好用,空格键差点被我敲坏)