この記事は"Minecraft Forge4.3x"を前提MODとしています。 |
鉱石辞書の利用
鉱石辞書(OreDictionary)は異なるmod間でのアイテム共有のための機能である. forge前提の大型modでは銅や錫, 青銅などが鉱石辞書に登録され共有できるようになっている. またこの鉱石辞書は鉱石に限らず, あらゆるアイテムを共有できる. 鉱石辞書は3つのクラスOreDictionary, ShapedOreRecipe, ShapelessOreRecipeから成り, それぞれ辞書, 定形レシピ, 不定形レシピを提供する. なお今回具体的なサンプルコードはない.
基本的な使い方
- 鉱石辞書への登録
鉱石辞書への登録はOreDictionaryクラスのregisterOreメソッドを利用する. registerOreメソッドはBlock, Item, ItemStackのどの形式でも登録できることが特徴である.
public static void registerOre(String name, Item ore) public static void registerOre(String name, Block ore) public static void registerOre(String name, ItemStack ore) public static void registerOre(int id, Item ore) public static void registerOre(int id, Block ore) public static void registerOre(int id, ItemStack ore)
すなわち, 鉱石辞書は文字列かユニークIDで共有される. 他のmodのBlockやItemへの参照がなくとも, 文字列かユニークIDを指定しておけば読み込まれたときに自動で関連付けされる.
OreDictionary.registerOre("oreSilver", new ItemStack(blockNewOre, 1, 0)); OreDictionary.registerOre("ingotSilver", new ItemStack(itemNewIngot, 1, 0));
このようにItemStackを用いて登録すればメタデータを利用することで消費IDの抑止にもつながる. 参照の際は文字列だけわかればよいというのも大きなメリットである.
鉱石辞書を利用したレシピの追加
鉱石辞書を利用したレシピを追加する場合, 先述したShapedOreRecipeかShapelessOreRecipeを利用する.
GameRegistry.addRecipe( new ShapedOreRecipe( new ItemStack(silvershovel, 1), new Object[] { "X", "Y", "Y", Character.valueOf('X'), "ingotSilver", Character.valueOf('Y'), Item.stick }));
定形レシピの例である. 要は, 今までBlock, Item, ItemStackにしていた箇所を鉱石辞書で登録した文字列にするだけでできる. 注意すべきはaddRecipe()の引数にnew ShapedOreRecipe()を渡すことである.
GameRegistry.addRecipe( new ShapelessOreRecipe( new ItemStack(ingotSilverIron, 1), new Object[] { "ingotSilver", Item.ingotIron }));
不定形レシピの例, 基本的には定形レシピと同じ. 注意点は不定形でもaddRecipeに渡す点. これはGameRegistryのaddRecipeの引数を見れば自明である.
鉱石辞書に登録する際のルール
現在鉱石辞書を利用しているのはいわゆる工業系mod, すなわちIndustrialCraft2, BulidCraft, RedPower2, Forestry for Minecraftが主流である. 従って後発のmodもこれらの鉱石を共有するために同じ整形ルールで追加, 参照している. わかっている登録名は以下のとおりである.
- oreTin, oreCopper, oreSilver, oreUranium
- ingotTin, ingotCopper, ingotSilver, ingotBrass, ingotBronze
- ingotUranium, ingotRefinedIron
- dyeBlue
- gemRuby, gemEmerald, gemSapphire
- itemDropUranium
- woodRubber
- itemRubber
命名則はプレフィックス+アイテム名である. 鉱石ならoreXXX, インゴットならingotXXXとなっている. FFMのバックパックやmystcraftの鉱石倍加などもこの命名に従っているアイテムを自動で登録するため, forge前提で鉱石を追加する場合は鉱石辞書に登録することが推奨される. また6.3.0.363時点で, バニラの一部アイテムが鉱石辞書に登録されレシピを作成しやすくなった. 追加されたのはメタデータを使う原木や木材, 染料などである.
- logWood
- plankWood
- slabWood
- stairWood
- stickWood
- dyeBlack
- dyeRed
- dyeGreen
- dyeBrown
- dyeBlue
- dyePurple
- dyeCyan
- dyeLightGray
- dyeGray
- dyePink
- dyeLime
- dyeYellow
- dyeLightBlue
- dyeMagenta
- dyeOrange
- dyeWhite
まとめ
鉱石辞書は他のmodとのアイテムの共有を実現するAPIである. それ以外にもメタデータを使った煩雑な(可読性の低い)コードを回避する手段としても利用可能である.