こんばんは。Nakanishiです。
Discordサーバーを運営中です。
一緒にゆるくMod制作を楽しみませんか?
※)日本語での会話ができる方のみ参加可能です。
条件に合わない方は参加をご遠慮ください。
前回までは農業編を書かせてもらいましたが、今回からは建築に必須な木材編を書いていこうと思います。
ブロック編の応用編と思ってもらえれば良いと思います。
①テクスチャ、JSONファイルを用意しよう

まずはベースとなる板材を作っていきます。
今回は例として、バージョン1.21.2で追加された【ペールオーク】を例に使おうと思います。
つまり、テクスチャがあればバージョンが違う木材でも再現可能という事です。
板材のテクスチャは階段、フェンス、フェンスゲート、ボタン、感圧板と多岐に渡って使われる基本テクスチャとなります。
まず、このpngテクスチャを【textures/block】に移動させて、【models/block】【models/item】と【blockstates】を書いていきます。
まず【model】から書いていきます。
【models/block】例)
{
"parent": "minecraft:block/cube_all",
"textures": {
"all": "nakanishi_mod:block/pale_oak_planks"
}
}

【models/item】例)
{
"parent": "nakanishi_mod:block/pale_oak_planks"
}

【blockstates】例)
{
"variants": {
"": {
"model": "nakanishi_mod:block/pale_oak_planks"
}
}
}

💡ポイント
・nakanishi_mod=modidなので、各自のmodidに変えてください
これで見た目を設定するJSONファイルは完成です。
②CLASSファイルを作ろう
任意ですが、今回は分かりやすくする為に【block】内に【pale_oak】の【Package】を用意しました。

この中に【ペールオーク】関連のブロックのCLASSファイルを入れていきます。
まず板材のCLASSファイルを作るので、名前は【Block_Pale_Oak_Planks】にしました。

板材はextends Blockを使います。

💡ポイント
・Blockはnet.minecraft.world.level.blockを選択してください
そうすると赤線が引かれますので、仮のパラメータと引数を表示させてあげます。
赤線の所で右クリックをしてもらって【Show Context Actions】を選択します。
そうしたら【Creat constructor matching super】を選択してください。

これで仮のパラメータと引数を表示させて赤線を消すことが出来ました。
このままでは仮の状態なので、実際に引数を入力してあげます。
一旦()内を消してあげて、以下のように書いてあげます。
例)
super(Properties.copy(Blocks.OAK_PLANKS));

💡ポイント
・Blocksはnet.minecraft.world.level.blockを選択してください
これでオークの板材と同じ性質のブロックが完成しました。
次にブロック登録CLASSへ登録してあげましょう。
③レジストリ登録をしよう
JavaでMinecraftのModを作ろう☆ ブロック編④ 〜registryクラスを作ってブロックを登録しよう〜 - NakanishiのForge1.20.1のJavaMod開発講座
ブロック登録CLASSを作ってない方は、上記の記事を参照ください。
登録は【Block】(ブロック状態)と【BLOCK_ITEM】(アイテム状態)の2か所の登録が必要になります。
ブロック状態の登録の例)
public static final RegistryObject<Block> PALE_OAK_PLANKS = BLOCKS.register("pale_oak_planks", Block_Pale_Oak_Planks::new);

アイテム状態の登録の例)
public static final RegistryObject<Item> PALE_OAK_PLANKS = BLOCK_ITEMS.register("pale_oak_planks"
, () -> new BlockItem(Blocks.PALE_OAK_PLANKS.get(), new Item.Properties()));

これでゲーム内に反映させる事が出来ました。
ただ、この状態ではまだid表示されてしまうので、翻訳を追加します。
④翻訳、クリエイティブタブに追記しよう
JavaでModを作ろう☆ 共通編① ~翻訳とレシピを作ろう~ - NakanishiのForge1.20.1のJavaMod開発講座
翻訳をまだ作ってない方は、上記の記事を参照ください。
追記方法は今までと同じです。
例)
"item.nakanishi_mod.pale_oak_planks": "Pale Oak Planks",
"block.nakanishi_mod.pale_oak_planks": "Pale Oak Planks"

これで【Pale Oak Planks】と表示されるようになります。
ついでにクリエイティブタブに追加もしておきましょう。
クリエイティブタブ編 カテゴリーの記事一覧 - NakanishiのForge1.20.1のJavaMod開発講座
クリエイティブタブを追加していない方は、上記の記事を参照ください。
追記方法は今までと同じです。

💡ポイント
・Blocksではなく、BlockItemを選択してください
これで名前表示、クリエイティブタブの追加が終わりました。
ただ、このままではサバイバルモードで壊した時に何もドロップしないので、【loot_table】というものを設定していきます。
⑤サバイバルモード用の設定をしよう
まずドロップ品を設定する為の【loot_table】を設定します。
場所は
【resource/data/modid/loot_tables/blocks】
になります。

この中にJSONファイルを入れていくことになります。
例)
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"entries": [
{
"type": "minecraft:item",
"name": "nakanishi_mod:pale_oak_planks"
}
],
"rolls": 1.0
}
],
"random_sequence": "nakanishi_mod:blocks/pale_oak_planks"
}

これでサバイバルモードで壊した時に【Pale Oak Planks】がドロップします。
このままでも良いのですが、今回は応用編も兼ねてもう1つ設定を加えます。
【mineable】という適正ツールを決める設定を加えます。
【mineable】の場所は
【resource/data/minecraft/tags/blocks/mineable】
となります。
今回は板材なので、斧が適正ツールになります。
そのため、
【resources/data/minecraft/tags/blocks/mineable/axe.json】
に書いていきます。

例)
{
"values": [
"nakanishi_mod:pale_oak_planks"
]
}
💡ポイント
・今回は例として直接ブロックを書きましたが、実際の板材はタグで括られていて、それを【mineable/axe.json】に登録しています。
これで適正ツールが斧になり、斧で素早く壊すことが出来るようになります。
ここまでお疲れ様でした☆
次回は原木の作り方を書かせてもらおうと思います。
もしこの記事が参考になった、または「JavaでMod制作を始めてみたい!」と思っていただけたら、ぜひ読者登録をお願いします。
それではまた次回お会いしましょう。
ここまでお読みいただき、ありがとうございました。
【次回記事】
JavaでMinecraftのModを作ろう☆ 木材編② 〜原木を作ろう〜 - NakanishiのForge1.20.1のJavaMod開発講座