前回のつづきです。
先に収穫品をさらっとやっておきますね。
Blockクラスでは適したツールでブロックを破壊したときに自身のItemStackをドロップ
するようになっています。Blockクラスを継承しているサブクラスでもオーバーライドしていない
限りは自身のItemStackを1つだけドロップします。
せっかく新しいブロックを追加するならドロップの数を増やしたいなどがあるかと思いますので
それを少しやってみます。
新しいクラスを作成しないでドロップ品、数の変更をしたいときなどはHarvestDropsEvent
クラスを利用します。このクラスを見てもらえればわかりますが、ListになっていてListは
インターフェースなんですがコレクションのインスタンスは曖昧な型で扱うのがメリットが
大きいそうです。(ArrayListやLinkedListの要素のやりとりなど)
このListのメソッドにあるaddやclearなどを使ってドロップ品を増やしたり消したりします。
メインクラスのInitでもpreInitでもいいですが
MinecraftForge.EVENT_BUS.register(メソッドのあるクラスのインスタンス)が必要です。
私は前回やったブロックを登録するクラスにこのメソッドを書き加えました。
元来のドロップ品はそのままで違うドロップ品を付け加える時はclearはいりません。
追加はaddでいくらでも追加可能です。ItemStackなのでブロックをドロップする場合は
new ItemStack(Item.getItemFromBlock(silver_block,1,0))という風にします。
元来のドロップ数を増やしたいときはaddで追加するかclearで消してから
addで追加するか。
このメソッドは既存のブロックのドロップでも同じように増やしたりできます。
Randomを使って確率をつけたりもできますが鉱石を掘ってノードロップだとがっくり
すると思うのでここでは行わないです。ランダムで1~2個にしたりもできますよ。
鉱石ではなくルビーそのものが2個ドロップしました。
このHarvestEventはどちらかというと既存のブロックやBlockクラスをインスタンス化して
作成したブロック向けだと思います。
既存のブロックのクラスの書き換えは出来ませんので既存のブロックのドロップ品を
変えたり増やしたりするために使います。
自分のmodで追加するブロックでは大抵の場合は自分で新しいクラスをBlockクラスを
継承して作成すると思いますその時にドロップのメソッドをオーバライドする。
getDropsメソッドがどこで呼ばれているかが未確認なのでこのメソッド内で解決するしか
ないです(;´Д`)
2種類落とすようになったのはいいけどドロップ数をそれぞれ変えたいときはどうするか・・。
元のドロップはそのままでドロップ品を増やすときは元のドロップ品は継承しているので
書き換えなしで新しいドロップ品のメソッドを加える。それぞれドロップ品の数を変えるので
元のメソッドをオーバライドして2個にする新しい数のメソッドを作成してランダムで1個~3個
ドロップするように式をかく。下のgetDropsのメソッドを書き換える。
元のドロップ品は2個新しいドロップ品は1~3個に。
OKぽいですね。
サブクラスを作成してメソッドの書き換えではなくHarvestEventを利用してドロップ品の
操作もできます。メソッドの書き換えが面倒な人はこちらがいいのではないでしょうか。
色々詰め込んでついでに6面とも違うテクスチャのブロックを作成します。
ブロック用のクラスの作成↓
登録クラスで登録します。
新しいつるはしを作成します。Toolに関しては以前やったので省略します。
アイテム関連の登録は全部このクラスにいれているのでごちゃごちゃしていますが
赤枠のところだけがつるはしの登録のところです。
新しいつるはしのクラスは↓
JsonファイルはItemとblockstatesは同じなので省略します。
blockのjsonファイルは↓
pngファイル
6個用意(-_-;)
ちゃんとランダムでどれかアイテムをドロップ
ダイヤモンドつるはし以下ではドロップしない。
メモのつづきとブロックの向きを次回はやりたいと思います。





















