今回は防具の追加をやりたいと思います。

防具はスキンと同じテクスチャの仕様なので少し難しいです。

ItemStackとしての画像と実際に装備したときの画像が必要になります。

Materialは素材のことでマイクラではleather chain iron gold diamondの素材ごとに

値が当てはめられています。これと同じ値でもいいのならこの既存の値を利用して

見た目だけオリジナルの防具が出来るのですがArmorMaterialを追加することによって

自分のmod独自の防具を追加できるという仕組みになっているようです。

 

まずは画像を用意します。とは言っても防具の画像を一から用意するのは

私にとっては難易度が高いのでいつものように既存の画像ファイルを参考にします。

リソースパックを作ったことがある方ならやり方はお分かりかと思いますが、

私はないのでメモ代わりにここに載せておきます。

userのフォルダには見えないフォルダが隠れているので表示のところの隠しファイルのところにチェックを入れます。

AppDataというフォルダがうっすら見えるようになるのでこれを開きます。

Roamingというフォルダがあるのでこれを開きます。

この中にマイクラのデータファイルが入っています。

minecraftフォルダを開いて

versionsフォルダを開きます。

この中にそれぞれのバージョンのjarファイルが入っているので(私は1.12しかないけど)

このjarファイルを展開します。zip7で開くかコマンドプロントで展開するかお好きな方で。

私はさっくりzip7で展開。

展開したものの中にassetsフォルダがあります。modを作ってきたのでもうお分かりかと

思いますがこの中にいろいろ入っています。

テクスチャもjsonファイルも。

ついでにこのフォルダとファイルの配置を覚えておいてください。

自分のmodも同じ配置でファイルを置くことになりますので。

Armorのテクスチャ画像はassets/modid/textures/models/armorフォルダに入れることがわかります。

それから名前の付け方もこれを参考にします。

layer_1は頭胴足腕 layer_2は脚腰です。必ずこのlayer_1か2をつけます。

layer_1の配置。 頭の半分以下は顔なのでフルフェイスでもない限りは開けておきますw

水色の枠は首周り。

layer_2の配置。緑枠のは腰です。

これらは装備したときのテクスチャです。

別にItemStackとしてのテクスチャを用意します。

頭 胴 脚 足 の4つ。

適当に色を変えただけのものを用意しました(;´∀`)

画像が用意できたらソースコードとjsonファイルの作成を行っていきます。

platinumarmorのクラスとrubyarmorのクラスをそれぞれ作ります。

rubyarmorクラスではArmorMaterialで装備したときのテクスチャの指定をして

platinumarmorクラスではlayer_1とlayer_2をメソッドで装備したときのテクスチャを

指定するやり方をしています。

 

RubyArmor

クラスを作成します。ItemArmorクラスを継承させます。

eclipseにコンストラクタを促されるので入れて必要なものをthis.setで入れていきます。

といってもArmorMaterialで値が定められているのでクリエイティブタブの指定かスタック数しか

変えられませんが(-_-;)

ItemArmorクラスでインスタンスが作成されていて引き継いでいるのでまああまり

改めて書くことも少ないのです。

ここでArmorMaterialの値がそれぞれの素材ごとに設定されています。

ここにEnumHelperで独自の素材を追加登録します。

引数の名前とArmorMaterialのdiamondなどの例で大体わかると思いますが、 

素材の名称、テクスチャのファイル名、耐久性、ダメージカット量、エンチャントの付きやすさ、

装脱着時の音、タフネス。となっています。

素材名は"ruby"じゃもうややこしいので"rubyarmor"としています。これは頭胴脚足と共通の

Materialの名称です。

テクスチャファイルはpngファイルをいれる場所が 決まっており、assets.moonrosemod.textures.models.armorの中にいれます。

そしてpngファイルの名前の付け方にも決まりがあり、頭胴足のファイル名には_layer_1.pngとつけます。脚腰のファイル名には_layer2.pngとつけます。 コードの方のテクスチャ画像ファイルの指定をするときは後ろの _layer_1.pngはつけません。modid:と_layer_1.pngを抜いたファイル名で "moonrosemod:rubyarmor" となります。

durebilityは耐久性で int型でいれます。(あまり大きくない整数)

 int[]eductionAmounts はダーメージカット量 1ptで4%カットらしい。 int型の配列でいれます。{2,5,8,2} 左から足脚胴頭となっています。 合計が25まで数値をいれることができる。

enchantabilitはエンチャントの付きやすさでint型で入れます。

SoundEvent soundOnEquipは装備の付け外し?の時の音の設定 SoundEvent.このクラスに登録してあるサウンドの変数名 SoundEvents.ITEM_ARMOR_EQUIP_IRON とすると鉄装備の音が なるようになるみたいです。

float toughnessはタフネスとしか・・・ダイヤモンドだけ2.0fになっています。float型なので小点つきで末尾にFをつけます。 でも0は0.0Fにしなくても0でもエラーにはならないみたいです。 

Public static final ArmorMaterial RUBY = に上記の値を代入しています。

class RubyArmor extends ItemArmor
{
	public static final ArmorMaterial RUBY = 
			EnumHelper.addArmorMaterial("rubyamor","moonrosemod:rubyarmor",30,new int[]{3,8,9,2},10,SoundEvents.ITEM_ARMOR_EQUIP_DIAMOND,2F);
	public RubyArmor(ArmorMaterial materialIn, int renderIndexIn, EntityEquipmentSlot equipmentSlotIn)
	{
		super(materialIn, renderIndexIn, equipmentSlotIn);
		this.setCreativeTab(CreativeTabs.COMBAT);
		BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(this, DISPENSER_BEHAVIOR);
	}
}

クラスが出来たらいつものようにrejistriに登録します。

フィールドの宣言をして

フィールドを作成してそれぞれ登録していきます。

newの後ろは先ほど作成したコンストラクタをいれます。引数のArmorMaterialも先ほど

追加してRUBYに代入しているのでそれを使用します。クラス名.変数名で入れます。

後ろの数値はレンダーインデックスらしいです。RenderPlayerで使用して、プレーヤーにレンダリングする対応する鎧を選択します。0は布、1はチェーン、2は鉄、3はダイヤモンド、4は金です。よくわからないので適当(-_-;)

その後ろは装備する箇所の指定です。

あとはいつも道理なので省略します。

それぞれのjsonファイルの作成と

画像ファイルをいれます。

アイテム名を変えるだけで後はみんな同じ。

 

アイテムとしての画像ファイル

装備したときの画像ファイル。

assets/moonrosemod/texturesフォルダの中にmodelsフォルダを作成してその中に

armorフォルダを作成してその中に_layer_1とかついた画像ファイルをいれます。

それからlangファイルの記述もしておきます。

テクスチャの位置とかおかしい箇所は都度直していく感じです(;´∀`)

実際に見ないとわからないし・・・スキンのソフトがあるならそれを使うのがいいのかもです。

防具の大きさなどはスキンと同じなのでそれ以上にはみ出したいときにはmodelの

クラスを作ってコードを書いて新しいmodelを作成するかモブのモデルを引用するなどの

必要があります。

 

PlatinumArmor

メソッドでテクスチャの指定をするもの。

なのでArmorMaterialのところのテクスチャの指定は""空欄にしています。

こちらのやり方ではテクスチャのファイル名を全部入れる必要があります。

断然ArmorMaterialの追加の方でテクスチャの指定をするほうが簡単で楽なのですが

これは部分的にテクスチャの指定をしたいときに役に立つものだと思われます。

部位全部追加するんではなくて例えば頭だけ追加したいとか。

登録とかは他と同じなので省略します。脚だけちょっと違いますがArmorMaterialをどうするか

の違いなのです。

帽子だけ追加したい・・・ArmorMaterialは何でもいいというときなんかは

帽子だけのテクスチャの画像を用意して

テクスチャの指定だけ任意のをするという感じですかね。帽子なので25じゃなくて0でいいとおもいますが(´・ω・`)

 

そもそもクラスとか作るのも面倒だという方は

直にArmorMaterialを追加してもOKなのです。