(→ダメージを保つ場合) |
|||
31行目: | 31行目: | ||
ItemStack blackWoolStack = new ItemStack(Block.cloth, 42, 15); | ItemStack blackWoolStack = new ItemStack(Block.cloth, 42, 15); | ||
</source> | </source> | ||
− | + | ウールはMinecraftのコードの中ではclothと呼ばれています。この例の場合、15というメタデータが黒を指すので、42個の黒いウールとなります。 | |
+ | |||
====item idしか知らない場合==== | ====item idしか知らない場合==== | ||
ブロックのインスタンスへの参照がわからなくても、ブロックIDがわかれば、別のコンストラクタが使えます。しかし、おすすめはしません。 | ブロックのインスタンスへの参照がわからなくても、ブロックIDがわかれば、別のコンストラクタが使えます。しかし、おすすめはしません。 |
2013年5月4日 (土) 07:15時点における版
このページはForge wiki内のCrafting and Smelting Tutorialの翻訳記事です。多くが意訳で、雑な翻訳であること、見やすさに応じて太字などは独自に変えられている場合がありますのでご注意ください。Javaの一般的な知識に関する項目、Minecraftの上で一般的な知識は訳していません。
目次
Havvy's Minecraft Forge Tutorials(Crafting and Smelting)
BaseModクラスの準備ができたら、レシピの追加は簡単に出来ます。レシピには3つのクラスがあります。形のあるもの、形のないもの、そして精錬のレシピです。
一般的なクラフティングの知識
レシピの追加は@Initアノテーションの追加されたメソッドで行われます。GenericModでは、tutorial.generic.Genericのloadメソッドに当たります。この章の最後では、完成形のGenericクラスと、クラフティングレシピのクラスのファイルをご覧に入れましょう。
クラフティングに関するメソッドはスタティックメソッドです。GameRegistryの中にあり、CraftingManagerにデータを渡します。
アイテムスタック
ItemStackは、スタックできる量と、使った際にダメージを持つかどうか(ピッケルなど)による、いくつかのコンストラクターを持っています。
単数所持、ダメージを持たない
1つのみスタックできて、ダメージを持たないアイテムの場合、設定は簡単なので、1つしか引数は取りません。
ItemStack dirtStack = new ItemStack(Block.dirt);
上のコードは一つのブロックを持つDirtのサンプルです。
複数所持、ダメージを持たない
複数スタックできるアイテムの場合は、以下の様なコードで設定出来ます。
ItemStack diamondsStack = new ItemStack(Item.diamond, 64);
これは、フルスタックのダイアモンドを指します。
ダメージを保つ場合
もしダメージもしくはメタデータの値を含ませたいのならば、量を含ませる必要があります。
ItemStack blackWoolStack = new ItemStack(Block.cloth, 42, 15);
ウールはMinecraftのコードの中ではclothと呼ばれています。この例の場合、15というメタデータが黒を指すので、42個の黒いウールとなります。
item idしか知らない場合
ブロックのインスタンスへの参照がわからなくても、ブロックIDがわかれば、別のコンストラクタが使えます。しかし、おすすめはしません。
ItemStack unknownItemStack = new ItemStack(1, 3, 0);
3つで構成されるスタックで、ブロックのidが1のDirtを指します。しかし、インスタンスへの参照をとることを試みるべきでしょう。バニラの全てのアイテムとブロックは、net.minecraft.block.Blockもしくは、net.minecraft.item.Item内に見つかります。
形のないクラフティング
形のないクラフティングは、アイテムの並び方を気にしません。一般的な例は、きのこスープと本でしょう。一般的に形のないレシピの追加は以下を使います。
GameRegistry.addShapelessRecipe(ItemStack result, Object... recipe)
例えば、以下のようにして土をダイヤモンドに交換出来ます。
GameRegistry.addShapelessRecipe(new ItemStack(Item.diamond, 64), new ItemStack(Block.dirt));
もしレシピに複数のアイテムを要求したいのであれば、より多くのItemStacksをクことができます。同じアイテムを複数置きたいなら、ItemStackをまた置けばいいだけなのです。以下に例として、砂とじゃりと丸石と6個の土を使ったレシピの追加法を示します。
ItemStack dirtStack = new ItemStack(Block.dirt); GameRegistry.addShapelessRecipe(new ItemStack(Item.diamond, 64), dirtStack, dirtStack, dirtStack, dirtStack, dirtStack, dirtStack, new ItemStack(Block.sand), gravelStack, cobbleStack);
形のあるクラフティング
1*1から3*3の全てのレシピには、文字列がレシピの形とアイテムの種類を使い、以下のメソッドを用います。
GameRegistry.addRecipe(String row1, [String row2[, String row3]] char itemType1, ItemStack itemStackType1[, ... char itemTypeN, ItemStack itemStackTypeN]);
おそらく、混乱するでしょう、そこでいくつかの例を上げわかりやすくして行きたいと思います。2*2の土とじゃりをそれぞれのカドに配置したレシピを作る際は以下のようになります。
ItemStack dirtStack = new ItemStack(Block.dirt); ItemStack gravelStack = new ItemStack(Block.gravel); GameRegistry.addRecipe(new ItemStack(Block.cobblestone), "xy", "yx", 'x', dirtStack, 'y', gravelStack);
改行されたあとのコードはレシピのアイテムを読める形で示しています。レシピの中に使わない場所を設ける際にはどうしたら良いでしょうか。スペース(" ")がこの役割を担います。 このことを示すために、土とじゃりでかこんだレシピは以下になります。
GameRegistry.addRecipe(new ItemStack(Block.stone), "xyx", "y y", "xyx", 'x', dirtStack, 'y', gravelStack);
精錬のレシピ
精錬のレシピは3つの中で最も簡単です。これは、1ついれたら1つ出てくるというわかりやすい方式だからです。精錬に対するメソッドは以下のようになります。
GameRegistry.addSmelting(int inputItemID, ItemStack result, float experience);
ここで解説しなければならないのは2つの値です。ItemIDとexperienceです。itemIDはブロックのidを指します。ブロックのインスタンスがあるなら、すべてのブロックはblockIDフィールドを持つので利用できます。