提供: Minecraft Modding Wiki
移動先: 案内検索
(ページの白紙化)
(フォーラムにおける指摘を受けて修正.なんでclass)
 
(他の1人の利用者による、間の2版が非表示)
1行目: 1行目:
 +
{{前提MOD|reqmod="Minecraft Forge Universal 9.10.0.xxx~"}}
 +
{{チュートリアル難易度|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>
 +
で成長させる。

2016年2月17日 (水) 20:11時点における最新版

この記事は"Minecraft Forge Universal 9.10.0.xxx~"を前提MODとしています。

Stone pickaxe.png
中級者向けのチュートリアルです。
C block.png
Blockに関係のあるチュートリアルです。


植物の追加[編集]

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 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");
    }
}

解説[編集]

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);

で成長させる。