提供: Minecraft Modding Wiki
この編集を取り消せます。
下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
2行目: | 2行目: | ||
==無機能アイテムの追加== | ==無機能アイテムの追加== | ||
− | + | ソースコード | |
− | |||
− | |||
− | |||
− | |||
*ItemSampleCore.java | *ItemSampleCore.java | ||
<source lang = "java"> | <source lang = "java"> | ||
69行目: | 65行目: | ||
==解説== | ==解説== | ||
− | === | + | ===ItemSampleCore=== |
+ | ====package, import==== | ||
<source lang = "java"> | <source lang = "java"> | ||
package mods.itemsample; | package mods.itemsample; | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
import net.minecraft.src.*; | import net.minecraft.src.*; | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
import cpw.mods.fml.common.Mod; | import cpw.mods.fml.common.Mod; | ||
import cpw.mods.fml.common.network.NetworkMod; | import cpw.mods.fml.common.network.NetworkMod; | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
import cpw.mods.fml.common.event.FMLInitializationEvent; | import cpw.mods.fml.common.event.FMLInitializationEvent; | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
import cpw.mods.fml.common.registry.GameRegistry; | import cpw.mods.fml.common.registry.GameRegistry; | ||
import cpw.mods.fml.common.registry.LanguageRegistry; | import cpw.mods.fml.common.registry.LanguageRegistry; | ||
</source> | </source> | ||
− | + | ;*package mods.itemsample; | |
− | FMLのAPIを利用するためにインポートする. | + | :この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, @NetworkMod==== | ||
123行目: | 109行目: | ||
) | ) | ||
</source> | </source> | ||
− | |||
@Modで'''他のMODと重複しない文字列のmodid'''とModの名前, バージョンを明記する. | @Modで'''他のMODと重複しない文字列のmodid'''とModの名前, バージョンを明記する. | ||
@NetworkModでクライアントとサーバーに関する設定を行う. 今回は2つだけ. | @NetworkModでクライアントとサーバーに関する設定を行う. 今回は2つだけ. | ||
− | |||
====ItemSampleCoreクラス==== | ====ItemSampleCoreクラス==== | ||
152行目: | 136行目: | ||
} | } | ||
</source> | </source> | ||
− | |||
クラス名は'''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の参考書なりサイトなりで確認. | ||
− | |||
− | |||
<source lang = "java"> | <source lang = "java"> | ||
@Mod.Init | @Mod.Init | ||
</source> | </source> | ||
− | + | @Modの内部アノテーション, Initを利用する. このアノテーションが付与され, 引数に'''FMLInitialzaitonEvent'''を持つメソッドはFMLによって読み込まれるメソッドになる. この時'''メソッド名は自由''. ModLoader Moddingにおけるload()に相当する. | |
− | @Modの内部アノテーション, Initを利用する. このアノテーションが付与され, 引数に'''FMLInitialzaitonEvent'''を持つメソッドはFMLによって読み込まれるメソッドになる. この時'''メソッド名は自由 | ||
− | |||
− | |||
<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番目のアイコンを使う, という意味 | |
+ | |||
*setItemName | *setItemName | ||
− | + | アイテムの'''内部名'''を明記するメソッド. これを行わないと表示名が適用できない. | |
+ | |||
*setCreativeTab | *setCreativeTab | ||
− | + | クリエイティブモードでのインベントリタブのどこに追加するかを決めるメソッド. CreativeTabs.tabMaterialsは右下の素材タブに追加. | |
− | |||
<source lang = "java"> | <source lang = "java"> | ||
191行目: | 166行目: | ||
LanguageRegistry.instance().addNameForObject(itemSample, "ja_JP", "サンプルアイテム"); | LanguageRegistry.instance().addNameForObject(itemSample, "ja_JP", "サンプルアイテム"); | ||
</source> | </source> | ||
− | |||
アイテムに名前をつけるメソッド. addNameは英語名をつけるメソッド. addNameForObjectは二番目の引数で指定した言語の名前をつけるメソッド, 今回は日本語. | アイテムに名前をつけるメソッド. addNameは英語名をつけるメソッド. addNameForObjectは二番目の引数で指定した言語の名前をつけるメソッド, 今回は日本語. | ||
− | 前者と違い後者にはinstance()というメソッドが使われているが, これはaddNameがstaticなメソッドであるのに対し, addNameForObjectがそうでないからである. | + | 前者と違い後者にはinstance()というメソッドが使われているが, これはaddNameがstaticなメソッドであるのに対し, addNameForObjectがそうでないからである. LanguageRegistryのコードを読むと違いがわかるだろう. |
− | |||
− | |||
<source lang = "java"> | <source lang = "java"> | ||
205行目: | 177行目: | ||
}); | }); | ||
</source> | </source> | ||
− | + | レシピを追加するメソッドである. 土ブロックから新しく追加したアイテムを作成できるようにする. | |
− | レシピを追加するメソッドである. | ||
− | |||
− | |||
− | === | + | ===ItemSample.java=== |
<source lang = "java"> | <source lang = "java"> | ||
public class ItemSample extends Item | public class ItemSample extends Item | ||
220行目: | 189行目: | ||
} | } | ||
</source> | </source> | ||
− | |||
Itemクラスを継承したItemSampleクラスを作る. コンストラクタではsuperクラス(=Itemクラス)のコンストラクタに引数itemIdを渡しているだけ. このようにsuperクラス(親クラスとも)のメソッドを派生クラス(子クラス)で利用することは多々ある. | Itemクラスを継承したItemSampleクラスを作る. コンストラクタではsuperクラス(=Itemクラス)のコンストラクタに引数itemIdを渡しているだけ. このようにsuperクラス(親クラスとも)のメソッドを派生クラス(子クラス)で利用することは多々ある. | ||
− | |||
==実際の挙動== | ==実際の挙動== | ||
− | |||
上記のコードをコンパイルし, 実行するとクリエイティブの素材タブの最後にアイテムが追加される. しかし右クリックしても食べられないし, 左クリックしても素手と同じ扱いである. | 上記のコードをコンパイルし, 実行するとクリエイティブの素材タブの最後にアイテムが追加される. しかし右クリックしても食べられないし, 左クリックしても素手と同じ扱いである. | ||
− |