最新版 |
編集中の文章 |
1行目: |
1行目: |
− | {{前提MOD|reqmod="Minecraft Forge Universal 9.10.0.xxx~"}}
| + | jじいいじうしjすmjみあいあいしいmしいんづ |
− | {{チュートリアル難易度|difficulty=1|clear=none}}
| |
− | {{チュートリアルカテゴリー|difficulty=0|type=Block}}
| |
− | | |
− | ==植物の追加==
| |
− | BlockBushとIGrowableを使って作物を追加する。<br>
| |
− | 種や作物のアイテムの追加は省略。
| |
− | ===ソースコード===
| |
− | *SampleBushCore.java
| |
− | <source lang="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");
| |
− | }
| |
− | }
| |
− | </source>
| |
− | *BlockSampleBush.java
| |
− | <source lang="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 class 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");
| |
− | }
| |
− | }
| |
− | </source>
| |
− | | |
− | ==解説==
| |
− | ===SampleBushCore.java===
| |
− | このModのエントリポイント。作物のブロックの追加をしている。
| |
− | ===BlockSampleBush.java===
| |
− | 作物のブロック。
| |
− | <source lang="java">
| |
− | setTickRandomly(true);
| |
− | </source>
| |
− | でランダムにupdateTickを呼び、そこで
| |
− | <source lang="java">
| |
− | int growStage = world.getBlockMetadata(x, y, z); // メタデータ=成長段階
| |
− | growStage++;
| |
− | if (growStage > 6) { // 0が1段階目なのでこうなる
| |
− | growStage = 6; // バグ防止
| |
− | }
| |
− | world.setBlockMetadataWithNotify(x, y, z, growStage);
| |
− | </source>
| |
− | で成長させる。
| |