【Minecraft / Forge Modding】アイテムを追加する【1.8.9】
2019-11-2 | Minecraft / Forge Modding メモ Minecraft 1.8.9 | Java, Minecraft, Modding
2019-11-2 | Minecraft / Forge Modding メモ Minecraft 1.8.9 | Java, Minecraft, Modding
この記事では、自作のアイテムを追加するよ!
Minecraft 1.8.9 版の記事になります。
Minecraft の Modding の全体像については、こちらのページ をご覧ください。
ロジックの部分に 1.8.9 と 1.7.10 との違いはありません。
インポートするパッケージが差し替えとなってます。下記の対応表を参照してくださいまし。
1.8.9 | 1.7.10 |
---|---|
net.minecraftforge.fml.common.registry.GameRegistry | cpw.mods.fml.common.registry.GameRegistry |
net.minecraftforge.fml.common.Mod | cpw.mods.fml.common.Mod |
net.minecraftforge.fml.common.Mod.EventHandler | cpw.mods.fml.common.Mod.EventHandler |
net.minecraftforge.fml.common.event.FMLInitializationEvent | cpw.mods.fml.common.event.FMLInitializationEvent |
net.minecraftforge.fml.common.event.FMLPreInitializationEvent | cpw.mods.fml.common.event.FMLPreInitializationEvent |
ほとんど 1.7.10 の記事と同じ内容になっています。
アイテムは、クラスとして実装する。1 つのアイテムを追加するのに 1 つのクラスを作成する。
クラスをどのパッケージに含めるかは任意です。
今回は、ゴピチャンドとゴピチャンドを作る為の中間素材となるアイテムを追加するのでプロジェクトの構成は、下記のようになった。
src/main/java
com.gopichandmod
GopichandMod.java(MOD の全般的な内容を管理するクラス)
Recipes.java(追加するアイテムのレシピを登録するクラス)
com.gopichandmod.items
GopichandItems.java(追加するアイテムを登録するクラス)
ItemGopichand.java(アイテム“Gopichand”を実装するクラス)
ItemGopichandBody.java(アイテム“Gopichand Body”を実装するクラス)
ItemGopichandHead.java(アイテム“Gopichand Head”を実装するクラス)
ItemIronString.java(アイテム“Iron String”を実装するクラス)
package com.gopichandmod.items; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraftforge.fml.common.registry.GameRegistry; public class ItemGopichand extends Item { public ItemGopichand() { String name = "gopichand"; this.setCreativeTab( CreativeTabs.tabMisc ); this.setUnlocalizedName( name ); maxStackSize = 1; GameRegistry.registerItem( this, name ); return; } }
このクラスでゴピチャンドを実装する。
package com.gopichandmod.items;
パッケージを設定する。
import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraftforge.fml.common.registry.GameRegistry;
インポートするクラスを設定する。
public class ItemGopichand extends Item
追加するアイテムのクラスを設定する。
インポートしたクラス net.minecraft.item.Item
を継承している。
public ItemGopichand()
クラスのコンストラクターです。
String name = "gopichand";
String
型の変数 name を定義する。
初期値には、追加するアイテムのシステム上の名前 "gopichand"
を設定する。
this.setCreativeTab( CreativeTabs.tabMisc );
クリエイティブモードのインベントリにアイテムを登録する。
引数で登録先のタブを指定する。
今回は、Minecraft に元からある“その他(Miscellanuous)”に登録する。他にも下記のタブが用意されている。
値 | タブ名(日本語) | タブ名(英語) |
---|---|---|
tabBlock | 建築ブロック | Building Blocks |
tabDecorations | 装飾ブロック | Decoration Blocks |
tabRedstone | レッドストーン | Redstrone |
tabTransport | 運送 | Transportation |
tabMisc | その他 | Miscellanuous |
tabFood | 食料 | Foodstuffs |
tabTools | 道具 | Tools |
tabCombat | 戦闘 | Combat |
tabBrewing | 醸造 | Brewing |
tabMaterials | 材料 | Materials |
MOD 独自の新しいタブを作り、そのタブにアイテムを登録することもできる。
独自のタブの追加については、別の記事で解説する。
this.setUnlocalizedName( name );
システム上でのアイテムの名前を設定する。
Minecraft の言語設定でローカライズされていない言語が選択されている場合、ここで設定した文字列が使用される。item.gopichand.name
という書式で表示される、
ローカライズについても、別の記事で解説する。
maxStackSize = 1;
スタックできる数を指定する。
今回は、ツルハシ、シャベル等のスタックできないアイテムと同じく 1
を設定した。
GameRegistry.registerItem( this, name );
コンストラクターの最後で Minecraft にアイテムを登録する。
以降のクラスは、ほとんどクラスの名前とアイテムの名前が違うだけなので説明は省略します。
package com.gopichandmod.items; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraftforge.fml.common.registry.GameRegistry; public class ItemGopichandBody extends Item { public ItemGopichandBody() { String name = "gopichandbody"; this.setCreativeTab( CreativeTabs.tabMisc ); this.setUnlocalizedName( name ); maxStackSize = 1; GameRegistry.registerItem( this, name ); return; } }
このクラスで「ゴピチャンドのボティ」を実装する。
「ゴピチャンドのボティ」は、「ゴピチャンド」を作るために必要な中間素材です。
package com.gopichandmod.items; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraftforge.fml.common.registry.GameRegistry; public class ItemGopichandHead extends Item { public ItemGopichandHead() { String name = "gopichandhead"; this.setCreativeTab( CreativeTabs.tabMisc ); this.setUnlocalizedName( name ); maxStackSize = 1; GameRegistry.registerItem( this, name ); return; } }
このクラスで「ゴピチャンドのヘッド」を実装する。
「ゴピチャンドのヘッド」は、「ゴピチャンドのボディ」と同じくゴピチャンドを作るために必要な中間素材です。
package com.gopichandmod.items; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraftforge.fml.common.registry.GameRegistry; public class ItemIronString extends Item { public ItemIronString() { String name = "ironstring"; this.setCreativeTab( CreativeTabs.tabMisc ); this.setUnlocalizedName( name ); maxStackSize = 64; GameRegistry.registerItem( this, name ); return; } }
このクラスで鉄の弦を実装する。
「鉄の弦」は、「ゴピチャンド」を作るために必要な中間素材です。
maxStackSize = 64;
このアイテムのスタックできる数は、ブロックや食料と同じく 64
と設定した。
package com.gopichandmod.items; import net.minecraft.item.Item; import com.watermelonheadman.gopichandmod.GopichandMod; public class GopichandItems { public static Item Gopichand; public static Item GopichandBody; public static Item GopichandHead; public static Item IronString; public static void registry( GopichandMod mod ) { Gopichand = new ItemGopichand(); GopichandBody = new ItemGopichandBody(); GopichandHead = new ItemGopichandHead(); IronString = new ItemIronString(); return; } }
このクラスで新しいアイテムの登録を一括で行う。
public static Item Gopichand; public static Item GopichandBody; public static Item GopichandHead; public static Item IronString;
メンバー変数を設定する。
public static void registry( GopichandMod mod ) { Gopichand = new ItemGopichand(); GopichandBody = new ItemGopichandBody(); GopichandHead = new ItemGopichandHead(); IronString = new ItemIronString(); return; }
[========]
関数 registry
を設定する。
この関数を実行すると追加するアイテムを実装するクラスが作成される。各クラスのコンストラクターが実行され、Minecraft にアイテムが登録される。
package com.gopichandmod; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.registry.GameRegistry; import com.gopichandmod.items.GopichandItems; public class Recipes { public static void registry() { GameRegistry.addRecipe( new ItemStack( GopichandItems.GopichandHead, 1 ), new Object[] { " x ", "y y", 'x', Blocks.planks, 'y', Items.stick } ); GameRegistry.addRecipe( new ItemStack( GopichandItems.GopichandBody, 1 ), new Object[] { "x", "y", 'x', Blocks.planks, 'y', Items.leather } ); GameRegistry.addRecipe( new ItemStack( GopichandItems.IronString, 9 ), new Object[] { "x", "x", "x", 'x', Items.iron_ingot } ); GameRegistry.addRecipe( new ItemStack( GopichandItems.Gopichand, 1 ), new Object[] { "x", "y", "z", 'x', GopichandItems.GopichandHead, 'y', GopichandItems.IronString, 'z', GopichandItems.GopichandBody } ); return; } }
public static void registry()
関数 registry
が実行されるとレシピが登録される。
GameRegistry.addRecipe( new ItemStack( GopichandItems.GopichandHead, 1 ), new Object[] { " x ", "y y", 'x', Blocks.planks, 'y', Items.stick } );
レシピを登録する。
new ItemStack( GopichandItems.GopichandHead, 1 ),
第1引数の GopichandItems.GopichandHead
は、レシピによって作られるアイテムのクラスの名前です。
第2引数の 1
は、一度に作られるアイテムの数です。
バニラのブロック、アイテムの宣言は、"パッケージ・エクスプローラー"から参照できる。
参照ライブラリー → forgeSrc-1.7.2-10.12.2.1121-sources.jar → net.minecraft.init.Blocks
参照ライブラリー → forgeSrc-1.7.2-10.12.2.1121-sources.jar → net.minecraft.init.Items
" x ", "y y",
は、レシピです。
x
と y
は、それぞれ別々のアイテム、スペースは空欄を表している。
'x', Blocks.planks, 'y', Items.stick } );
前述のレシピの x
をBlocks.planks
として設定する。Blocks.planks
は 木材(Wood Planks)
です。
レシピの y
をItems.stick
として設定する。Items.stick
は 棒(Stick)
です。
下記のレシピを追加したことになる。
GameRegistry.addRecipe( new ItemStack( GopichandItems.GopichandBody, 1 ), new Object[] { "x", "y", 'x', Blocks.planks, 'y', Items.leather } );
Items.leather
は革(Leather)
です。
下記のレシピを追加したことになる。
GameRegistry.addRecipe( new ItemStack( GopichandItems.IronString, 9 ), new Object[] { "x", "x", "x", 'x', Items.iron_ingot } );
このアイテムは、一度のレシピで9個できる。
Items.iron_ingot
は鉄インゴット(Iron Ingot)
です。
下記のレシピを追加したことになる。
GameRegistry.addRecipe( new ItemStack( GopichandItems.Gopichand, 1 ), new Object[] { "x", "y", "z", 'x', GopichandItems.GopichandHead, 'y', GopichandItems.IronString, 'z', GopichandItems.GopichandBody } );
今回新しく追加する gopichandhead
と ironstring
と gopichandboby
を順番で縦に並べて gopichand
を1つ作るレシピを設定している。
package com.gopichandmod; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import com.gopichandmod.Recipes; import com.gopichandmod.items.GopichandItems; @Mod( modid = GopichandMod.MODID, version = GopichandMod.VERSION ) public class GopichandMod { @Mod.Instance("GopichandMod") public static final String MODID = "gopichandmod"; public static final String VERSION = "0.1"; @EventHandler public void preInit( FMLPreInitializationEvent e ) { GopichandItems.registry( this ); } @EventHandler public void Init(FMLInitializationEvent e) { Recipes.registry(); } }
前回の記事で作ったクラスにアイテムとそのレシピを登録する処理を追加する。
import com.gopichandmod.Recipes; import com.gopichandmod.items.GopichandItems;
今回作成したクラスをインポートする。
@EventHandler public void preInit( FMLPreInitializationEvent e ) { GopichandItems.registry( this ); }
関数 preInit
は、Minecraft の起動時の MOD を読み込むタイミングに実行される。
今回作成した追加するアイテムを登録するクラス GopichandItems
の関数 register
を実行し、この MOD で追加するアイテムを Minecraft に登録する。
@EventHandler public void Init( FMLInitializationEvent e ) { Recipes.registry(); }
関数 Init
は、関数 preInit
が実行された後に実行される。
他の MOD が読み込まれ、それぞれの MOD の関数 preInit
が実行された後に実行されるので、他の MOD の導入判定は、ここでする。
今回作成した追加するアイテムのレシピを Minecraft に登録するクラス Recipes
の関数 register
を実行し、この MOD で追加するレシピを Minecraft に登録する。
MOD をビルドしてアイテムが追加されているかテストする。
素材を集めるのがめんどいのでクリエイティブモードでテストする。
インベントリを開き、その他のタブを選択する。下にスクロールするとバニラのアイテムの後に登録したアイテムが増えている。
アイコンが変な画像になっているけど、カーソルを合わせると追加したアイテムの名前が表示される。
変な画像が表示されるのは、まだ、アイテムにテクスチャが設定されていないからです。
最近の投稿
カテゴリー