ルビーと銀インゴット、ルビー鉱石銀鉱石の追加を行いましたので

かまどで精錬するレシピの追加を行いたいと思います。

銀鉱石から銀インゴットにしたりルビー鉱石からルビーを取り出したりという感じですね。

精錬レシピの追加はなんと1行で済んでしまいますので

ついでに燃料の追加もやってみたいと思います。

 

こういうイベントの登録は大体GameRegistryクラスのメソッドを利用して登録するみたいです。

スクショの一番上に現在のクラスやメソッドが表示されていると思います。

preInt(FMLPreInitializationEvent event)メソッド内で登録をします。

Gを押してctrl + spaceで候補を出してGameRegistryを選択します。

.を打って次の候補を出します。

 addSmelting(Block input, @Nonnull ItemStack output, float xp)を選びます。

精錬レシピの追加に関するメソッドは3種類ほどありますが自分の精錬したいアイテムの

種類によって選びます。今回は鉱石をアイテムにするのでBlock→ItemStackのを選びます。

引数もちゃんと見ておきます。GameRegistryクラスでのメソッドは

 public static void addSmelting(Block input, @Nonnull ItemStack output, float xp)
    {
        FurnaceRecipes.instance().addSmeltingRecipeForBlock(input, output, xp);
    }

となっています。

inputは精錬前のブロックでoutputは精錬後のアイテムです。xpは精錬したあとの経験値で

float型なので少数で末尾にFをつけます。

eclipseの機能でさくさくと選んでいくだけなのです。

これまでの流れでわかると思いますが、ItemをItemStackとかにするときはnew~

がもはやお約束なのです。

後はxpの数値をいれて銀鉱石の登録も同じように行います。

 

燃料の追加は少し難しい仕様です。

燃料の追加はこのメソッドを使用するので間違いなさそうです。

メソッド名が物語っているのです。

型がインタフェースになっているので見てみるとこれだけ(-_-;)

これじゃわからん( ノД`)シクシク…。

前回のクリエイティブタブのところで抽象クラスが出てきたと思います。

その抽象クラスの特別扱いがインタフェース。

すべてのメソッドが抽象メソッド、フィールドを1つも持たないというのが条件です。

ざっくばらんすぎるけど(-_-;)

まあ・・未定のメソッドの内容をオーバーライドして実装し確定させないといけないことは

わかりました。

候補を出してregisterFuelHandler(IFuelHandler handler)を選択。

登録するときのお約束のnewをつけて候補を出します。

インタフェースの IFuelHandler()を選んだら・・・

ここまでが自動でぱっと出てきました!まあ便利Σ(・ω・ノ)ノ!

自動ででてきたからいいけどまさか()の中にメソッドを入れるなんて(;´∀`)

このままではメソッドが未完ですので内容を足します。returnで返す数値は燃焼時間で

Tick単位 10*20 1秒当たり20tickとかなんとかフォーラムに書かれてました・・・

こういう時間の単位がよくわからない(´・ω・`) Tick1/20秒Tick?

溶岩入りバケツが1000 石炭ブロックが800 ブレイズロッドが120 石炭木炭が80を

参考に・・・。1つ精錬する時間が10秒だそうですよ何を精錬するのにも1つ10秒。

なので10で割った数字が効率ということになるみたいです。

 

さてこのメソッドにどうやって燃料になるアイテムを認識させる文を

いれるかですが葉ブロックからドロップさせるときにブロックを壊したときに

これが葉ブロックかどうか判定する文があったと思います。

今回もifを使って燃料のアイテムを判定させます。

fuel 燃料のアイテムがrubyなら 200という数値を返します。

rubyではないのなら0をかえします。

fuel.と打つと出てくる候補でめぼしいものがgetItem()メソッドくらいしかないので

ブロックの場合はどうしたらいいのかというともうお馴染みになってきましたItem.getItemFromBlokを使います。

私は今のところ燃料になるアイテムの追加を行っていないのでなんか適当に

燃料にしています(-_-;) 燃料の追加登録はあとで消します(´・ω・`)

適当なもので登録したので燃料の倫理観がおかしなことになってますが・・・。

追加登録ができたことを確認できたので終了します。

 

おまけはいつでも突然なのです!

醸造レシピの追加はどうするのか気になって(;´Д`)ちらっとやってみたら出来たので

載せておきます。

BrewingRecipeRegistryクラスの

   public static boolean addRecipe(@Nonnull ItemStack input, @Nonnull ItemStack ingredient, @Nonnull ItemStack output)
    {
        return addRecipe(new BrewingRecipe(input, ingredient, output));
    }

を使用。preInitのところに記述でいいんではないでしょうか。

inputのところは醸造GUIのところの瓶マークが三つ並んだ箇所にいれるモノ。

水入りの瓶などです。空の瓶をいれたらクラッシュしました(-_-;)

ingredientは材料 ここは何でもよいです好きなものをいれる。

outputは出来上がりのポーションを入れます。ポーション以外はクラッシュします。

新たなポーションを追加登録してあるならそれもいれらるはずですが

ここではしていないので既存のポーションを入れます。

※ItemではなくItemStackです。

燃料はブレイズパウダー一択ですが(-_-;)絵がそうなってるから変えられないのかも。

新しい醸造台を作成するなら燃料ごと変えられそうではありますね。しらんけどw

今回はわりとあっさりできた感じですね。手慣れてきた感があります(´・ω・`)

醸造→英訳→参照ライブラリー内のクラスを探す→クラス、メソッドを見る。