提供: Minecraft Modding Wiki
2012年10月24日 (水) 15:14時点におけるReginn666 (トーク | 投稿記録)による版
移動先: 案内検索

この記事は"Minecraft Forge4.3x"を前提MODとしています。

無機能ブロックの追加

 何の機能も無い, しかしワールドに実際に設置できるブロックを追加する. これはブロックを追加するための基礎であり, ここで使われるメソッドはこれ以降のチュートリアルにも頻出する.

ソースコード

  • SampleBlockCore.java
package mods.blocksample;

import net.minecraft.src.*;

import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.network.NetworkMod;

import cpw.mods.fml.common.event.FMLInitializationEvent;

import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;

@Mod(
	modid = "BlockSampleMod",
	name  = "Block Sample Mod",
	version = "1.0.0"
)
@NetworkMod(
	clientSideRequired = true,
	serverSideRequired = false
)
public class BlockSampleCore
{
	public static Block blockSample;
	
	@Mod.Init
	public void init(FMLInitializationEvent event)
	{
		blockSample = (new BlockSample(1300, 20)).setBlockName("sampleblock").setCreativeTab(CreativeTabs.tabBlock);
		
		GameRegistry.registerBlock(blockSample);
		
		LanguageRegistry.addName(blockSample, "Sample Block");
		LanguageRegistry.instance().addNameForObject(blockSample, "ja_JP", "サンプルブロック");
		
		GameRegistry.addShapelessRecipe(
			new ItemStack(blockSample, 1),
				new Object[]
				{
					Block.dirt, Block.dirt
				});
	}
}
  • BlockSample.java
package mods.blocksample;

import net.minecraft.src.*;

public class BlockSample extends Block
{
	public BlockSample(int blockId, int terrainId)
	{
		super(blockId, terrainId, Material.wood);
	}

}

解説

無機能アイテムの追加で説明した項目はここでは説明しないので注意.

BlockSampleCore

BlockSampleCoreクラス

public class BlockSampleCore
{
	public static Block blockSample;
	
	@Mod.Init
	public void init(FMLInitializationEvent event)
	{
		blockSample = (new BlockSample(1300, 20)).setBlockName("sampleblock").setCreativeTab(CreativeTabs.tabBlock);
		
		GameRegistry.registerBlock(blockSample);
		
		LanguageRegistry.addName(blockSample, "Sample Block");
		LanguageRegistry.instance().addNameForObject(blockSample, "ja_JP", "サンプルブロック");
		
		GameRegistry.addShapelessRecipe(
			new ItemStack(blockSample, 1),
				new Object[]
				{
					Block.dirt, Block.dirt
				});
	}
}

public static Block blockSample;
新しいブロックの宣言


blockSample = (new BlockSample(1300, 20)).setBlockName("sampleblock").setCreativeTab(CreativeTabs.tabBlock);
Blockを継承したBlockSampleのインスタンスを生成する. BlockSampleの引数はblockId, terrainIdであり, ブロックID1300, Itemと異なり-256する必要はなく, Minecraft 1.2から追加された拡張分4096IDも利用可能. ただし, 既存のItemIDと被るIDは利用できないので注意.
terrainIdは「terrain.pngの左上から右に数えて20番目」すなわち原木の側面のテクスチャを指す. アイテムと異なり直接指定する必要がある.
  • setBlockName
setItemNameと同等, ブロックの内部名を明記するメソッド.
  • setCreativeTab
アイテムのときと同じように, クリティエイティブモードのインベントリタブのどこに追加するかを決めるメソッド. CreativeTabs.tabBlockは一番左上のブロック全般タブに追加.


GameRegistry.registerBlock(blockSample);
アイテムと異なり, ブロックはこのメソッドを通して登録する必要がある.

BlockSample.java

public class BlockSample extends Block
{
	public BlockSample(int blockId, int terrainId)
	{
		super(blockId, terrainId, Material.wood);
	}

}
Blockを継承したBlockSampleクラスを作る. 基本的なことはアイテムと一緒だが, 引数を変えてある. 引数のMaterial.woodはブロックの材質. ここではテクスチャに合わせて木にしている. 土ブロック2個から作成可能.

実際の挙動

上記のコードをコンパイルし, 実行するとクリエイティブのブロックタブの最後にアイテムが追加される. 右クリックで実際に設置することができるが, 一回殴るとアイテム化してしまうし, テクスチャも原木と異なり全部同じテクスチャである.