提供: Minecraft Modding Wiki
この記事は"Minecraft Forge Universal 9.10.0.xxx~"を前提MODとしています。 |
植物の追加
BlockBushとIGrowableを使って作物を追加する。
種や作物のアイテムの追加は省略。
ソースコード
- SampleBushCore.java
package mods.plant; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; @Mod(modid = "BushSampleMod", name = "BushSampleMod", version = "0.0.0") public class SampleBushCore { public static Block sampleBush; public static int sampleBushID = 4078; @EventHandler public void init(FMLInitializationEvent event) { // ローカライズ LanguageRegistry.addName(sampleBush, "Sample Bush"); LanguageRegistry.instance().addNameForObject(sampleBush, "ja_JP", "サンプル 植物"); } @EventHandler public void preInit(FMLPreInitializationEvent event) { sampleBush = new BlockSampleBush(sampleBushID); GameRegistry.registerBlock(sampleBush, "sampleBush"); } }
- BlockSampleBush.java
package mods.plant; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.util.Random; import net.minecraft.block.BlockBush; import net.minecraft.block.IGrowable; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.util.IIcon; import net.minecraft.world.ColorizerGrass; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public BlockSampleBush extends BlockBush implements IGrowable { @SideOnly(Side.CLIENT) private IIcon[] icon; public BlockSampleBush(int id) { super(id); setCreativeTab(CreativeTabs.tabBlock); setUnlocalizedName("bush.block.plant"); setTextureName("samplebushmod:bush"); // たまに成長するようにする。 setTickRandomly(true); setStepSound(soundTypeGrass); } @Override protected boolean canPlaceBlockOn(Block parBlock) { return parBlock == Blocks.farmland; } @Override public void updateTick(World world, int x, int y, int z, Random random) { super.updateTick(world, x, y, z, random); int growStage = world.getBlockMetadata(x, y, z); // メタデータ=成長段階 growStage++; if (growStage > 6) { // 0が1段階目なのでこうなる growStage = 6; // バグ防止 } world.setBlockMetadataWithNotify(x, y, z, growStage); } @Override // 完全成長しているか確認するメソッド (7段階目が完全成長) public boolean func_149851_a(World parWorld, int parX, int parY, int parZ, boolean p_149851_5_) { return parWorld.getBlockMetadata(parX, parY, parZ) != 7; } @Override // 骨粉処理 public boolean func_149852_a(World p_149852_1_, Random parRand, int p_149852_3_, int p_149852_4_, int p_149852_5_) { return true; } @Override // 骨粉処理 public void func_149853_b(World parWorld, Random parRand, int parX, int parY, int parZ) { incrementGrowStage(parWorld, parRand, parX, parY, parZ); } @Override public int getRenderType() { return 1; // 描画タイプ:1はクロステクスチャ } @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int metadata) { return icon[metadata]; } @Override // ドロップする個数 public int quantityDropped(int metadata, int fortune, Random random) { return metadata == 6 ? random.nextInt() + 1 : 1; // 完全成長ならランダム、それ以外なら1つ } @Override // ドロップするアイテム public Item getItemDropped(int metadata, Random random, int fortune) { return /* ここに種や収穫物等*/ ; } @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister parIIconRegister) { iIcon = new IIcon[7]; // 全成長段階のテクスチャを登録 iIcon[0] = parIIconRegister.registerIcon("samplebushmod:bush_stage_0"); iIcon[1] = parIIconRegister.registerIcon("samplebushmod:bush_stage_0"); iIcon[2] = parIIconRegister.registerIcon("samplebushmod:bush_stage_1"); iIcon[3] = parIIconRegister.registerIcon("samplebushmod:bush_stage_1"); iIcon[4] = parIIconRegister.registerIcon("samplebushmod:bush_stage_2"); iIcon[5] = parIIconRegister.registerIcon("samplebushmod:bush_stage_2"); iIcon[6] = parIIconRegister.registerIcon("samplebushmod:bush_stage_3"); iIcon[7] = parIIconRegister.registerIcon("samplebushmod:bush_stage_3"); } }
解説
SampleBushCore.java
このModのエントリポイント。作物のブロックの追加をしている。
BlockSampleBush.java
作物のブロック。
setTickRandomly(true);
でランダムにupdateTickを呼び、そこで
int growStage = world.getBlockMetadata(x, y, z); // メタデータ=成長段階 growStage++; if (growStage > 6) { // 0が1段階目なのでこうなる growStage = 6; // バグ防止 } world.setBlockMetadataWithNotify(x, y, z, growStage);
で成長させる。