提供: Minecraft Modding Wiki
移動先: 案内検索
138行目: 138行目:
 
クラス名は'''ItemSampleCore'''. ModLoaderと異なりどんなクラス名でもよいが, ファイル名と同じでなければならない.
 
クラス名は'''ItemSampleCore'''. ModLoaderと異なりどんなクラス名でもよいが, ファイル名と同じでなければならない.
  
<source lang = "java">
+
----
 +
 
 +
;<source lang = "java">
 
public static Item itemSample;
 
public static Item itemSample;
 
</source>
 
</source>
新しいアイテムの宣言. '''public static'''とはこのインスタンスがどこからでも, いつでも参照できるということ. ここらへんはJavaの参考書なりサイトなりで確認.
+
:新しいアイテムの宣言. '''public static'''とはこのインスタンスがどこからでも, いつでも参照できるということ. ここらへんはJavaの参考書なりサイトなりで確認.
 +
<br/>
  
 
<source lang = "java">
 
<source lang = "java">
 
@Mod.Init
 
@Mod.Init
 
</source>
 
</source>
@Modの内部アノテーション, Initを利用する. このアノテーションが付与され, 引数に'''FMLInitialzaitonEvent'''を持つメソッドはFMLによって読み込まれるメソッドになる. この時'''メソッド名は自由'''. ModLoader Moddingにおけるload()に相当する.
+
:@Modの内部アノテーション, Initを利用する. このアノテーションが付与され, 引数に'''FMLInitialzaitonEvent'''を持つメソッドはFMLによって読み込まれるメソッドになる. この時'''メソッド名は自由'''. ModLoader Moddingにおけるload()に相当する.
 +
<br/>
  
 
<source lang = "java">
 
<source lang = "java">
 
itemSample = (new ItemSample(4000 - 256)).setIconCoord(11, 0).setItemName("itemSample").setCreativeTab(CreativeTabs.tabMaterials);
 
itemSample = (new ItemSample(4000 - 256)).setIconCoord(11, 0).setItemName("itemSample").setCreativeTab(CreativeTabs.tabMaterials);
 
</source>
 
</source>
Itemを継承したItemSampleクラスのインスタンスを生成する. ItemSampleの引数はアイテムIDで, -256しているのはMinecraft側の仕様の都合.
+
:Itemを継承したItemSampleクラスのインスタンスを生成する. ItemSampleの引数はアイテムIDで, -256しているのはMinecraft側の仕様の都合.
new以外はItemSampleのコンストラクタでやってもよいが, 今回はこちら側で利用.
+
:new以外はItemSampleのコンストラクタでやってもよいが, 今回はこちら側で利用.
*setIconCoord
+
:*setIconCoord
アイテムのアイコンを指定するメソッド. この場合gui/items.pngの右上から横方向に11, 縦方向に0番目のアイコンを使う, という意味
+
:アイテムのアイコンを指定するメソッド. この場合gui/items.pngの右上から横方向に11, 縦方向に0番目のアイコンを使う, という意味
  
*setItemName
+
:*setItemName
アイテムの'''内部名'''を明記するメソッド. これを行わないと表示名が適用できない.
+
:アイテムの'''内部名'''を明記するメソッド. これを行わないと表示名が適用できない.
  
*setCreativeTab
+
:*setCreativeTab
クリエイティブモードでのインベントリタブのどこに追加するかを決めるメソッド. CreativeTabs.tabMaterialsは右下の素材タブに追加.
+
:クリエイティブモードでのインベントリタブのどこに追加するかを決めるメソッド. CreativeTabs.tabMaterialsは右下の素材タブに追加.
 +
<br/>
  
 
<source lang = "java">
 
<source lang = "java">
166行目: 171行目:
 
LanguageRegistry.instance().addNameForObject(itemSample, "ja_JP", "サンプルアイテム");
 
LanguageRegistry.instance().addNameForObject(itemSample, "ja_JP", "サンプルアイテム");
 
</source>
 
</source>
アイテムに名前をつけるメソッド. addNameは英語名をつけるメソッド. addNameForObjectは二番目の引数で指定した言語の名前をつけるメソッド, 今回は日本語.
+
:アイテムに名前をつけるメソッド. addNameは英語名をつけるメソッド. addNameForObjectは二番目の引数で指定した言語の名前をつけるメソッド, 今回は日本語.
前者と違い後者にはinstance()というメソッドが使われているが, これはaddNameがstaticなメソッドであるのに対し, addNameForObjectがそうでないからである. LanguageRegistryのコードを読むと違いがわかるだろう.
+
:前者と違い後者にはinstance()というメソッドが使われているが, これはaddNameがstaticなメソッドであるのに対し, addNameForObjectがそうでないからである. :LanguageRegistryのコードを読むと違いがわかるだろう.
 +
<br/>
  
 
<source lang = "java">
 
<source lang = "java">
177行目: 183行目:
 
});
 
});
 
</source>
 
</source>
レシピを追加するメソッドである. 土ブロックから新しく追加したアイテムを作成できるようにする.
+
:レシピを追加するメソッドである. 土ブロックから新しく追加したアイテムを作成できるようにする.
  
 
===ItemSample.java===
 
===ItemSample.java===
189行目: 195行目:
 
}
 
}
 
</source>
 
</source>
Itemクラスを継承したItemSampleクラスを作る. コンストラクタではsuperクラス(=Itemクラス)のコンストラクタに引数itemIdを渡しているだけ. このようにsuperクラス(親クラスとも)のメソッドを派生クラス(子クラス)で利用することは多々ある.
+
:Itemクラスを継承したItemSampleクラスを作る. コンストラクタではsuperクラス(=Itemクラス)のコンストラクタに引数itemIdを渡しているだけ. このようにsuperクラス(親クラスとも)のメソッドを派生クラス(子クラス)で利用することは多々ある.
  
 
==実際の挙動==
 
==実際の挙動==
 
上記のコードをコンパイルし, 実行するとクリエイティブの素材タブの最後にアイテムが追加される. しかし右クリックしても食べられないし, 左クリックしても素手と同じ扱いである.
 
上記のコードをコンパイルし, 実行するとクリエイティブの素材タブの最後にアイテムが追加される. しかし右クリックしても食べられないし, 左クリックしても素手と同じ扱いである.

2012年10月21日 (日) 19:40時点における版

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

無機能アイテムの追加

ソースコード

  • ItemSampleCore.java
package mods.itemsample;

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 = "ItemSampleMod",
	name  = "Item Sample Mod",
	version = "1.0.0"
)
@NetworkMod(
	clientSideRequired = true,
	serverSideRequired = false
)
public class ItemSampleCore
{
	public static Item itemSample;
	
	@Mod.Init
	public void init(FMLInitializationEvent event)
	{
		itemSample = (new ItemSample(4000 - 256)).setIconCoord(11, 0).setItemName("itemSample").setCreativeTab(CreativeTabs.tabMaterials);
		
		LanguageRegistry.addName(itemSample, "Sample Item");
		LanguageRegistry.instance().addNameForObject(itemSample, "ja_JP", "サンプルアイテム");
		
		GameRegistry.addShapelessRecipe(
			new ItemStack(itemSample, 1),
				new Object[]
				{
					Block.dirt
				});
	}
	
}
  • ItemSample.java
package mods.itemsample;

import net.minecraft.src.*;

public class ItemSample extends Item
{
	public ItemSample(int itemId)
	{
		super(itemId);
	}
}

解説

ItemSampleCore

package, import

package mods.itemsample;

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;
  • package mods.itemsample;
このModのパッケージを指定する. このパッケージは実際のフォルダ階層と同じでなければならない. したがってこのファイルはmcroot/src/common/mods/itemsampleフォルダに置かなければならない.
  • import net.minecraft.src.*;
net.minecraft.src以下を全てインポートする. ItemやBlockなど既存のクラスを利用するのに必要.
  • import cpw.mods.fml.common.Mod;
  • import cpw.mods.fml.common.network.NetworkMod;
2つのアノテーションを使うためにインポートする. 2つのアノテーションについては新しいコーディング記法とUniversal_Moddingを参照.
  • import cpw.mods.fml.common.event.FMLInitializationEvent;
FMLInitializationEventというクラスを利用するためにインポートする. ModLoaderにおけるloadメソッドに相当する.
  • import cpw.mods.fml.common.registry.GameRegistry;
  • import cpw.mods.fml.common.registry.LanguageRegistry;
FMLのAPIを利用するためにインポートする.

@Mod, @NetworkMod

@Mod(
	modid = "ItemSampleMod",
	name  = "Item Sample Mod",
	version = "1.0.0"
)
@NetworkMod(
	clientSideRequired = true,
	serverSideRequired = false
)

@Modで他のMODと重複しない文字列のmodidとModの名前, バージョンを明記する. @NetworkModでクライアントとサーバーに関する設定を行う. 今回は2つだけ.

ItemSampleCoreクラス

public class ItemSampleCore
{
	public static Item itemSample;
	
	@Mod.Init
	public void init(FMLInitializationEvent event)
	{
		itemSample = (new ItemSample(4000 - 256)).setIconCoord(11, 0).setItemName("itemSample").setCreativeTab(CreativeTabs.tabMaterials);
		
		LanguageRegistry.addName(itemSample, "Sample Item");
		LanguageRegistry.instance().addNameForObject(itemSample, "ja_JP", "サンプルアイテム");
		
		GameRegistry.addShapelessRecipe(
			new ItemStack(itemSample, 1),
				new Object[]
				{
					Block.dirt
				});
	}
	
}

クラス名はItemSampleCore. ModLoaderと異なりどんなクラス名でもよいが, ファイル名と同じでなければならない.


public static Item itemSample;
新しいアイテムの宣言. public staticとはこのインスタンスがどこからでも, いつでも参照できるということ. ここらへんはJavaの参考書なりサイトなりで確認.


@Mod.Init
@Modの内部アノテーション, Initを利用する. このアノテーションが付与され, 引数にFMLInitialzaitonEventを持つメソッドはFMLによって読み込まれるメソッドになる. この時メソッド名は自由. ModLoader Moddingにおけるload()に相当する.


itemSample = (new ItemSample(4000 - 256)).setIconCoord(11, 0).setItemName("itemSample").setCreativeTab(CreativeTabs.tabMaterials);
Itemを継承したItemSampleクラスのインスタンスを生成する. ItemSampleの引数はアイテムIDで, -256しているのはMinecraft側の仕様の都合.
new以外はItemSampleのコンストラクタでやってもよいが, 今回はこちら側で利用.
  • setIconCoord
アイテムのアイコンを指定するメソッド. この場合gui/items.pngの右上から横方向に11, 縦方向に0番目のアイコンを使う, という意味
  • setItemName
アイテムの内部名を明記するメソッド. これを行わないと表示名が適用できない.
  • setCreativeTab
クリエイティブモードでのインベントリタブのどこに追加するかを決めるメソッド. CreativeTabs.tabMaterialsは右下の素材タブに追加.


LanguageRegistry.addName(itemSample, "Sample Item");
LanguageRegistry.instance().addNameForObject(itemSample, "ja_JP", "サンプルアイテム");
アイテムに名前をつけるメソッド. addNameは英語名をつけるメソッド. addNameForObjectは二番目の引数で指定した言語の名前をつけるメソッド, 今回は日本語.
前者と違い後者にはinstance()というメソッドが使われているが, これはaddNameがstaticなメソッドであるのに対し, addNameForObjectがそうでないからである. :LanguageRegistryのコードを読むと違いがわかるだろう.


GameRegistry.addShapelessRecipe(
	new ItemStack(itemSample, 1),
		new Object[]
		{
			Block.dirt
		});
レシピを追加するメソッドである. 土ブロックから新しく追加したアイテムを作成できるようにする.

ItemSample.java

public class ItemSample extends Item
{
	public ItemSample(int itemId)
	{
		super(itemId);
	}
}
Itemクラスを継承したItemSampleクラスを作る. コンストラクタではsuperクラス(=Itemクラス)のコンストラクタに引数itemIdを渡しているだけ. このようにsuperクラス(親クラスとも)のメソッドを派生クラス(子クラス)で利用することは多々ある.

実際の挙動

上記のコードをコンパイルし, 実行するとクリエイティブの素材タブの最後にアイテムが追加される. しかし右クリックしても食べられないし, 左クリックしても素手と同じ扱いである.