リベンジ!!
前回の鉱石ブロック作成編、MineCraftの世界に新たな鉱石ブロックとして玉鋼鉱石を作ろうと奮闘したものの、アイテムとしてのテクスチャが反映されなかった。
そしてそして、半年以上経過した今、ついにリベンジを果たすことに成功したのです。
だがしかし!!
いろいろと試行錯誤した結果、前回のソースとほぼほぼ違う内容になってしまった。
なので、一新したソースを今回は載せていくことにします。
~メインクラス~
この刀MODで最初に呼び出されるメインクラス。
事前準備編で紹介した内容と違っていることが分かるかと思います。
//アイテムを登録するイベント。旧preinitのタイミングで発火する。
@SubscribeEvent
public void registerItems(RegistryEvent.Register event) {
KatanaModBlocks.TamahaganeOre(event);
}
ここでは、新たに追加するアイテム(玉鋼鉱石)を登録するためのメソッドです。
ブロックのアイテムを追加するので、「KatanaModBlocks」クラスの「TamahaganeOre」メソッドを呼んでます。
コメントにあるように、事前準備編で書いていた「preInit」メソッドの変わりに作っています。
//モデルを登録するイベント。SideOnlyによってクライアント側のみ呼ばれる。旧preinitのタイミングで発火する。
@SubscribeEvent
@SideOnly(Side.CLIENT)
public void registerModels(ModelRegistryEvent event) {
KatanaModBlocks.TamahaganeOreModel(event);
}
ここでは、新たに追加したアイテムのモデルを登録するためのメソッドです。
前回の鉱石ブロック作成編で紫と黒の市松模様になっていたのはここが失敗していたからです。
ブロックのモデルを登録するので、「KatanaModBlocks」クラスの「TamahaganeOreModel」メソッドを呼んでます。
こちらもコメントの通り、事前準備編の「preInit」メソッドでやろうとしていたところです。
~ブロッククラス~
メインクラスから呼んでいるブロックとしての定義をするクラス。また、アイテムとしても登録しています。
鉱石ブロック作成編の「KatanaModBlocks」クラスと違ってかなり見た目がスッキリしたかと思います。
// 玉鋼鉱石をアイテムとして登録
public static void TamahaganeOre(RegistryEvent.Register event) {
// ブロックのインスタンスを生成
TAMAHAGANE_ORE = new BlockTamahaganeOre();
// アイテムとして登録
event.getRegistry().register(new ItemBlock(TAMAHAGANE_ORE).setRegistryName("katanamod", "tamahagane_ore"));
ForgeRegistries.BLOCKS.register(TAMAHAGANE_ORE);
}
まず、「TAMAHAGANE_ORE = new BlockTamahaganeOre();」の部分。
インスタンスの生成と書いてます。つまるところ、ブロックとしての性質を細かく設定するクラスを呼んでます。
そして、コメントで「アイテムとして登録」としている部分。
これは、インベントリに表示されたアイテムに対して名前をつけています。
ここで登録をしていないと、インベントリのアイテムにカーソルを合わせたときの名前がよくわからんやつになります。
「ForgeRegistries.BLOCKS」ってところは、ブロックとしてアイテムを登録しますよーってことだと思ってます。
// 玉鋼鉱石をブロックのモデルとして登録
public static void TamahaganeOreModel(ModelRegistryEvent event) {
// インベントリに登録
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(TAMAHAGANE_ORE), 0,
new ModelResourceLocation(new ResourceLocation("katanamod", "tamahagane_ore"), "inventory"));
}
ここではリソースファイルを取得してテクスチャを貼り付けています。
前回の鉱石ブロック作成編で載せていたjsonファイルですね。
ちなみに、アイテムとしての定義で作成した「tamahagane_ore.json 」は不要だったことが判明しました。
~玉鋼鉱石ブロッククラス~
ブロッククラスの中で呼ばれているクラスですね。
各アイテム毎に1つのクラスを作っていこうかと思っています。
ここは前回の鉱石作成編で載せていたのと基本的には変わっていません。
ただ、引数を変数にして載せているとわかり辛いかなーってことで、直書きしています。本当はよろしくない。
public BlockTamahaganeOre() {
super(Material.ROCK);
this.setHardness(2.0F);
this.setResistance(4.0F);
this.setHarvestLevel("pickaxe", 2);
this.setRegistryName("katanamod","tamahagane_ore");
this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS);
this.setUnlocalizedName("tamahagane_ore");
}
メソッドのコメントに描いているので、それぞれの設定内容については割愛します。
決して、断じて、面倒くさいとかそういうわけではない!
~結果発表!!~
見事にインベントリで玉鋼鉱石(Tamahagane Ore)がテクスチャ付きで表示できました!!
やったぁ!!リベンジ大成功だ!!
そして、当然が如く地面に置いても、手に持っても、アイテムを放り投げてもテクスチャが反映されています。
これにて、鉱石ブロック作成リベンジ編を終了とする!!
次回は、かまどを使って玉鋼鉱石を玉鋼インゴットに精錬できるようにします。
つまり玉鋼インゴットも作ることになるな!!
以上、MineCraftのバージョンは1.12.2でお送りしました。
以下は参考にしたサイト