利用Forge API开发联机MOD【基础篇】【第六章】
给你的MOD添加一个方块
作者:yuxuanchiadm
索引贴地址:http://www.mcbbs.net/thread-38211-1-1.html
请确定你已经阅读完成第五章的内容:
http://www.mcbbs.net/thread-38387-1-1.html
否则不要阅读此贴!
序:
在上一章里,我们学会了如何创建一个物品,并应用于游戏中。现在我们将创建一个高级刷怪笼方块的基本Block对象,使你可以设置刷怪笼所刷的怪物。
添加一个新方块:
首先,我们要想好这个方块所能实现的功能。
1.可以被任何镐子直接挖掉。
2.可以设置刷怪笼所刷的怪物。
3.可以设置刷怪笼刷怪的时间间隔。
下面,开始行动!
首先,添加一个可以合成普通刷怪笼的合成表:
- ModLoader.addRecipe(new ItemStack(Block.mobSpawner,1), new Object[]
- {
- "###","#*#","###",Character.valueOf('#'),Item.ingotIron,Character.valueOf('*'),Item.redstone
- });
- package myFirstMod.Block;import java.util.Random;import net.minecraft.block.BlockContainer;
- import net.minecraft.block.material.Material;
- import net.minecraft.entity.player.EntityPlayer;
- import net.minecraft.tileentity.TileEntity;
- import net.minecraft.world.World;public class BlockAdvancedMobSpawner extends BlockContainer
- {
- // 构造函数
- public BlockAdvancedMobSpawner(int par1)
- {
- super(par1, Material.rock);
- this.setHardness(5.0F);
- this.setStepSound(soundMetalFootstep);
- this.setBlockName("Advanced Mob Spawner");
- }
- // TileEntity对象
- public TileEntity createNewTileEntity(World var1)
- {
- return new TileEntityAdvancedMobSpawner();
- }
- // 掉落的物品ID
- public int idDropped(int par1, Random par2Random, int par3)
- {
- return this.blockID;
- }
- // 不是不透明方块
- public boolean isOpaqueCube()
- {
- return false;
- }
- // 玩家右击方块
- public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9)
- {
- if (par5EntityPlayer.isSneaking())
- {
- if(par1World.isRemote)
- {
- //如果蹲下但是客户端,也跳出,但返回true使其挥舞手臂
- return true;
- }
- }
- else
- {
- //如果没有蹲下则跳出
- return false;
- }
- // 以后会在这里添加代码
- return true;
- }
- }
/**知识点:在Minecraft里用什么表示一个方块?
Minecraft里所有的方块都表示为继承自Block类的一个类,在Block类里,定义了许多有用的方法,这些方法会在玩家执行右击、破坏、左击......等动作时调用,以实现相应的处理,Minecraft的方块时一个接一个的储存在存档文件里的,在读取的时候顺序读取,存储在存档文件里面的一个方块只包含基础信息,不包含其方块的坐标,方块的坐标是在载入时根据先后顺序依次计算的。
**/
在mod_myFirstMod里添加字段:
- public static int BlockAdvancedMobSpawnerID;
- public static Block AdvancedMobSpawner;
在preInit函数唯一一个try语句块中添加
- BlockAdvancedMobSpawnerID = myFirstModConfig.GetBlockID("BlockAdvancedMobSpawner", 300);
得到高级刷怪笼的纹理:)

在myFirstModProxyClient中注册(预载入)这个纹理:
添加字段:
- public final static String BLOCKS_PNG_PATH = "/myFirstMod/sprites/blocks.png";
- MinecraftForgeClient.preloadTexture(BLOCKS_PNG_PATH);
- this.blockIndexInTexture = 0;
- this.setTextureFile(myFirstModProxyClient.BLOCKS_PNG_PATH);
- AdvancedMobSpawner = new BlockAdvancedMobSpawner(BlockAdvancedMobSpawnerID);
- ModLoader.registerBlock(AdvancedMobSpawner);
- ModLoader.addName(AdvancedMobSpawner, "高级刷怪笼");
添加合成表:
- ModLoader.addRecipe(new ItemStack(AdvancedMobSpawner,1), new Object[]
- {
- "###","#*#","###",Character.valueOf('#'),Item.diamond,Character.valueOf('*'),Block.mobSpawner
- });
现在,你可以把这个方块的createNewTileEntity()函数改成(记得改回来):
- public TileEntity createNewTileEntity(World var1)
- {
- return null;
- }
并测试游戏,你可以用8个钻石和1个刷怪笼得到一个类似刷怪笼的玩意(伪·钻石氪金刷怪笼),但是这玩意丝毫没有用处,在下一章里,我将教你如何让这玩意起作用。
总结:
在这一章里,我们学会了如何创建一个基本的方块,在下一章里,我们会让这个方块能够像刷怪笼一样刷各种生物。