こんばんは。Nakanishiです。
Discordサーバーを運営中です。
一緒にゆるくMod制作を楽しみませんか?
※)日本語での会話ができる方のみ参加可能です。
条件に合わない方は参加をご遠慮ください。
前回のおさらい
木材の基本の板材のブロックを追加しました。
JavaでMinecraftのModを作ろう☆ 木材編① 〜板材を作ろう〜 - NakanishiのForge1.20.1のJavaMod開発講座
今回は原木と木の作り方を紹介しようと思います。
①テクスチャ、JSONファイルを用意しよう


原木に必要なテクスチャは横と上下の2種類が必要になります。
まず、このテクスチャを【textures/block】に移動させて【models/item】【models/block】【blockstates】を書いていきます。
原木の【models/block】は縦のJSONファイルと横のJSONファイルの2種類必要になります。これは設置したときに、軸の方向によって見た目が変わるためです。
pale_oak_log.json例)
{
"parent": "minecraft:block/cube_column",
"textures": {
"end": "nakanishi_mod:block/pale_oak_log_top",
"side": "nakanishi_mod:block/pale_oak_log"
}
}

pale_oak_log_horizontal.json例)
{
"parent": "minecraft:block/cube_column_horizontal",
"textures": {
"end": "nakanishi_mod:block/pale_oak_log_top",
"side": "nakanishi_mod:block/pale_oak_log"
}
}

💡ポイント
・horizontalとは水平、横という意味です
【pale_oak_log】のテクスチャがあるので、ついでに【pale_oak_wood】のJSONファイルも作ってしまいます。
pale_oak_wood.json例)
{
"parent": "minecraft:block/cube_column",
"textures": {
"end": "nakanishi_mod:block/pale_oak_log",
"side": "nakanishi_mod:block/pale_oak_log"
}
}

次に【models/item】のJSONファイルを用意します。
pale_oak_log.json例)
{
"parent": "nakanishi_mod:block/pale_oak_log"
}

pale_oak_wood.json例)
{
"parent": "nakanishi_mod:block/pale_oak_wood"
}

これで【model】のJSONファイルは完成です。
続いて【blockstate】を用意します。
pale_oak_log.json例)
{
"variants": {
"axis=x": {
"model": "nakanishi_mod:block/pale_oak_log_horizontal",
"x": 90,
"y": 90
},
"axis=y": {
"model": "nakanishi_mod:block/pale_oak_log"
},
"axis=z": {
"model": "nakanishi_mod:block/pale_oak_log_horizontal",
"x": 90
}
}
}

💡ポイント
・pale_oak_log_horizontalは先ほど作ってもらったpale_oak_log_horizontal.jsonを差します
pale_oak_wood.json例)
{
"variants": {
"axis=x": {
"model": "nakanishi_mod:block/pale_oak_wood",
"x": 90,
"y": 90
},
"axis=y": {
"model": "nakanishi_mod:block/pale_oak_wood"
},
"axis=z": {
"model": "nakanishi_mod:block/pale_oak_wood",
"x": 90
}
}
}

これで原木と木の見た目のJSONファイルが完成しました。
②CLASSファイルを作ろう
まずは原木から作っていきます。名前は【Block_Pale_Oak_Log】にしました。

ここで今までと違うのが、原木のように縦と横の向きのあるブロックは【RotatedPillarBlock】というクラスを使います。
例)
extends RotatedPillarBlock

ここで赤線が引かれますが、いつものように仮のパラメータと引数を表示させてあげます。
赤線の所で右クリックをしてもらって【Show Context Actions】を選択します。
そうしたら【Creat constructor matching super】を選択してください。

そうしたら()内は消してもらって、新しい引数を入力してあげます。
例)
super(Properties.copy(Blocks.OAK_LOG));

これで原木のCLASSファイルは完成です。
次に木(Wood)のCLASSファイルを作っていきます。名前は【Block_Pale_Oak_Wood】にしました。

木(Wood)も原木同様【RotatedPillarBlock】というクラスを作ります。

ここでも原木と同じように()内を消してもらって、引数を入力してあげます。
例)
super(Properties.copy(Blocks.OAK_WOOD));

これで木(Wood)のCLASSファイルが完成しました。
それでは実際にゲーム内に反映させる為、レジストリ登録をしていきましょう。
③レジストリ登録をしよう
登録方法はいつもと同様で、ブロック状態とアイテム状態の2つを登録していきます。
ブロックの登録例)
public static final RegistryObject<Block> PALE_OAK_LOG = BLOCKS.register("pale_oak_log", Block_Pale_Oak_Log::new);
public static final RegistryObject<Block> PALE_OAK_WOOD = BLOCKS.register("pale_oak_wood", Block_Pale_Oak_Wood::new);

アイテムの登録例)
public static final RegistryObject<Item> PALE_OAK_LOG = BLOCK_ITEMS.register("pale_oak_log"
, () -> new BlockItem(Blocks.PALE_OAK_LOG.get(), new Item.Properties()));
public static final RegistryObject<Item> PALE_OAK_WOOD = BLOCK_ITEMS.register("pale_oak_wood"
, () -> new BlockItem(Blocks.PALE_OAK_WOOD.get(), new Item.Properties()));

これでゲーム内に反映させることが出来ました。
あとは前回の記事同様に【翻訳】【クリエイティブタブ】【loot_table】【mineable】の追記を行っていきましょう。
④設定を追加しよう
翻訳の追記方法は今までと同様です。
例)
"item.nakanishi_mod.pale_oak_log": "Pale Oak Log",
"block.nakanishi_mod.pale_oak_log": "Pale Oak Log",
"item.nakanishi_mod.pale_oak_wood": "Pale Oak Wood",
"block.nakanishi_mod.pale_oak_wood": "Pale Oak Wood",

クリエイティブタブの追記方法も今までと同じ方法で行います。

リストは並べた順番で表示されるので、今回は公式と同じ順番に追加しました。
次に【loot_table】の追加を行います。
pale_oak_log.json例)
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"entries": [
{
"type": "minecraft:item",
"name": "nakanishi_mod:pale_oak_log"
}
],
"rolls": 1.0
}
],
"random_sequence": "nakanishi_mod:blocks/pale_oak_log"
}

pale_oak_wood.json例)
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"entries": [
{
"type": "minecraft:item",
"name": "nakanishi_mod:pale_oak_wood"
}
],
"rolls": 1.0
}
],
"random_sequence": "nakanishi_mod:blocks/pale_oak_wood"
}

最後に【mineable】を追記して完成です。
例)
{
"values": [
"nakanishi_mod:pale_oak_log",
"nakanishi_mod:pale_oak_wood",
"nakanishi_mod:pale_oak_planks"
]
}

では動作確認をしてみましょう。

原木・木・板材の順番で表示されています。

しっかり縦・横の向きのあるブロックになってますね。

分かりにくいですが、しっかりと向きのあるブロックになっています。

どちらも斧で素早く破壊することが出来て、ドロップ品もしっかり落ちてます。
これで原木と木が完成しました。
ここまでお疲れ様でした☆
次回はハーフブロックの作り方を書かせてもらおうと思います。
もしこの記事が参考になった、または「JavaでMod制作を始めてみたい!」と思っていただけたら、ぜひ読者登録をお願いします。
それではまた次回お会いしましょう。
ここまでお読みいただき、ありがとうございました。
【次回記事】
JavaでMinecraftのModを作ろう☆ 木材編③ 〜ハーフブロックを作ろう〜 - NakanishiのForge1.20.1のJavaMod開発講座