提供: 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としています。 |
植物の追加[編集]
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);
で成長させる。