Minecraft MOD でブロックを追加する方法 1.12.2の場合

TOP > チュートリアル一覧 > Minecraft MOD でブロックを追加する方法 1.12.2の場合


更新:2018年5月2日 投稿2018年4月24日

今回は、Minecraft JE版 1.12.2 用のMOD製作チュートリアルです。

ブロックの追加方法について、実際に鎮守府MODのソースを見ながら解説をしていきます。

なお、記事中のリンク先に載せたソースは、説明の混乱を避けるために不要な部分を削除してあります。鎮守府MODのソースは GitHub で公開していますので、気になる方はそちらをご覧ください。

 

1.ブロック1つを追加する場合

まずは、鎮守府MOD の【空箱(木)】を例にして、ブロック追加のチュートリアルをします。

 

1-1.クラスの相関関係イメージ

ChinjufuMod[1.12.2] では、ブロックを追加するためのクラスを役割に応じて分割しており、クラスの参照を利用して画像のような関係を作っています。

アイテムと異なり、ブロックには材質や効果音などの性質があるため、必ずクラス(=ブロックなどの設計図)をともないます。

ブロック追加時のクラスの相関関係イメージ 1.12.2

さて、1.10.2 では、MOD のインスタンスを行う ChinjufuMod.java にすべてを集める関係を作っていました。しかし、1.12.2では RegisterEvent を使ってアイテムの登録をするため、上の画像のような形に変わっています。

また、1.12.2 のレシピは resources へ移動するため、基本的には使わない RecipeHandler.java と CraftingChinjufuMod.java は点線にしてあります。

ここで注意が必要なのは、Minecraft のブロックは Block と ItemBlock の2つの側面を持っているため、それぞれに登録が要ることです。

Block としての側面 建築などでワールドへ置けるブロックとして
RegistryEvent.Register<Block>を使って登録
ItemBlock としての側面 破壊時のドロップやインベントリで使うアイテムとして
RegistryEvent.Register<Item>を使って登録

 

1-2.役割に応じた分割結果としての11枚

各クラスの役割は以下の通りです。

ChinjufuMod.java Modのインスタンス(=製品)を生成する
Reference.java よく参照する値の管理
ProxyInterface.java CommonProxyで扱うメソッドを約束
CommonProxy.java サーバーでの処理
ClientProxy.java クライアントでの処理
RegistrationHandler.java
※リンクは後述する 1-3 にて
ブロックと ItemBlock を登録を行う
ChinjufuModBlocks.java ブロックと ItemBlock の登録を管理
BlockEmptyBox.java ブロック個別の設計図
ChinjufuModItems.java ItemBlock の登録で使用
RecipeHandler.java レシピの登録 ※1.12.2では基本的に不使用
CraftingChinjufuMod.java レシピ個別の設計図 ※1.12.2では基本的に不使用

初めて Minecraft の MOD製作をされる方は「11枚も使うの?」と思うかもしれません。また、やろうと思えば「ItemChawan.java」の1枚にまとめることも可能です。

しかし、アイテムを復数追加することを考えると、役割ごとにクラスを分ける方が作業は楽になります。

 

1-3.実際のクラス関係と各ソースへのリンク

さらに鎮守府MODでは、ソースの管理のしやすさを考えて画像のような書き方をしています。

ソースは、イメージマップの各リンク先にのせています。※ウィンドウ最大化推奨

ブロックを1つ追加する場合 1.12.2

Reference.java ChinjufuMod.java ProxyInterface CommonProxy.java ClientProxy.java, RegistrationHandler RecipeHandler.java CraftingChinjufuMod.java ChinjufuModBlocks.java, RegistrationHandler ChinjufuModItems.java, RegistrationHandler BlockEmptyBox.java

説明を付け加えると、下記することを行っています。内部クラスに関しては、リンク先のソースを見てもらった方が分かりやすいと思います。

・RegisterEvent を扱う RegistrationHandler.java を分割
・Block の登録を行う部分を ChinjufuModBlocks.java の内部クラスにする
・Block の描画を登録する部分を ClientProxy.java の内部クラスにする
・ChinjufuModItems.java の内部クラスを使って ItemBlock の登録を行う

ItemBlock の登録では、アイテムの登録を行う RegistryEvent.Register<Item> を利用します。そのため、アイテムの登録を管理する ChinjufuModItems.java の内部クラスである RegistrationHandler.java を使って、ItemBlock の登録を行っています。

 

2.復数のブロックを追加する場合

鎮守府MOD の【空箱(木)】を追加した状態から、さらに鎮守府MOD の【鋼材ブロック】を追加していきます。

 

2-1.クラスの相関と各ソースへのリンク

復数のアイテムを追加する場合、ChinjufuMod[1.12.2] のクラスの相関関係は下図のようになります。

ソースは、イメージマップの各リンク先にのせています。※ウィンドウ最大化推奨

ブロックを復数追加する場合 1.12.2

Reference.java ChinjufuMod.java ProxyInterface CommonProxy.java ClientProxy.java, RegistrationHandler RecipeHandler.java CraftingChinjufuMod.java ChinjufuModBlocks.java, RegistrationHandler ChinjufuModItems.java, RegistrationHandler BlockEmptyBox.java BlockSteelBlock.java

あらかじめクラスを役割ごとに分割してあるため、アイテム単体の追加から変化するのは赤くした2枚のクラスだけで、他は触る必要がありません。

もし、BlockEmptyBox.javaで1枚、BlockSteelBlock.javaで1枚とやっていくと、重複するコードをそれぞれのクラスに書く必要がでてきます。

 

まとめ

ここまでの作業で実行テストをおこなうと、画像のような状況になっているはずです。

ブロック追加後のテスト 1.12.2

1.12.2 ではレシピも resources に移動しますが、バニラのクリエイティブタブへの割り振りをしておくと、ブロックを登録できているかどうかの確認は簡単にできます。


このチュートリアルは参考になりましたか? シェアはこちらをご利用ください。
Was this tutorial helpful? Please use here for market share.

当サイトは年間6,480円のサーバー代がかかるため、投げ銭をしてもらえると助かります。
This site costs 6,480 yen per year for server fee. It will be helpful if you make a donation.

Bitcoinで投げ銭をする Bitcoin donations

¥
Personal Info

Terms

Donation Total: ¥100

MONAで投げ銭をする MONA donations
MONAで投げ銭をする MONA donations. tipmonaとは?

コメントを残す

メールアドレスが公開されることはありません。

コメント

お名前

ウェブサイトURL

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください